Arial Century Courier Georgia Tahoma Verdana Times New Roman
-
+
Упражнение 17.8. Приложение в KDE с меню и панелями инструментов
В приведенном далее примере вы опробуете объекты
KAction
в приложении среды KDE.
1. Начните с заголовочного файла KDEMenu.h.
KDEMenu
— это подкласс
KMainWindow
, являющегося подклассом класса
QMainWindow
.
KMainWindow
управляет сеансом в среде KDE и обладает встроенными панелью инструментов и строкой состояния.
#include <kde/kmainwindow.h>
class KDEMenu : public KMainWindow {
Q_OBJECT
public:
KDEMenu(const char * name = 0);
private slots:
void newFile;
void aboutApp;
};
2. Файл KDEMenu.cpp
начните с директив
#include
для виджетов, которые будете применять:
#include "KDEMenu.h"
#include <kde/kapp.h>
#include <kde/kaction.h>
#include <kde/kstdaccel.h>
#include <kde/kmenubar.h>
#include <kde/kaboutdialog.h>
3. В конструкторах, создающих три виджета
KAction
,
new_file
определяется вручную, a
quit_action
и
help_action
используют стандартные определения
KAction
:
KDEMenu::KDEMenu(const char *name = 0) : KMainWindow (0L, name) {
KAction *new_file = new KAction("New", "filenew",
KstdAccel::shortcut(KstdAccel::New), this, SLOT(newFile),
this, "newaction");
KAction *quit_action = KStdAction::quit(KApplication::kApplication,
SLOT(quit), actionCollection);
KAction *help_action = KStdAction::aboutApp(this, SLOT(aboutApp),
actionCollection);
4. Создайте два меню верхнего уровня и включите их в строку меню
KApplication
:
QPopupMenu *file_menu = new QPopupMenu;
QPopupMenu *help_menu = new QPopupMenu;
menuBar->insertItem("&File", file_menu);
menuBar->insertItem("&Help", help_menu);
5. Теперь вставьте действия в меню и панель инструментов, добавив разделительную линию между
new_file
и
quit_action
:
new_file->plug(file_menu);
file_menu->insertSeparator;
quit_action->plug(file_menu);
help_action->plug(help_menu);
new_file->plug(toolBar);
quit_action->plug(toolBar);
}
6. В заключение несколько определений слотов:
aboutApp
создает диалоговое окно
KAbout
для отображения сведений о программе. Учтите, что слот
quit
определен как часть
KApplication
:
void KDEMenu::newFile {
// Создание нового файла
}
void KDEMenu::aboutApp {
KAboutDialog *about = new KAboutDialog(this, "dialog");
about->setAuthor(QString("A. N. Author"),
QString("an@email.net"), QString("http://url.com"),
QString("work"));
about->setVersion("1.0");
about->show;
}
int main(int argc, char **argv) {
KApplication app(argc, argv, "cdapp");
KDEMenu* window = new KDEMenu("kdemenu");
app.setMainWidget(window);
window->show;
return app.exec;
}
7. Далее вам нужен файл menu.pro для утилиты
qmake
:
TARGET = kdemenu
MOC_DIR = moc
OBJECTS_DIR = obj
INCLUDEPATH = /usr/include/kde
QMAKE_LIBDIR_X11 += -L$KDEDIR/lib
QMAKE_LIBS_X11 += -lkdeui -lkdecore
SOURCES = KDEMenu.cpp
HEADERS = KDEMenu.h
8. Теперь запустите
qmake
для создания make-файла, откомпилируйте и выполните программу:
$ qmake menu.pro -о Makefile
$ make
$ ./kdemenu
Как это работает
Несмотря на то, что этот пример получился чуть длиннее других, программный код довольно краток, если учесть всю выполняемую им работу по созданию строки меню и самих меню. Лучшее качество виджетов
KAction
— возможность использования каждого из них в разных частях программы, таких как панель инструментов и меню в строке меню, все упомянутые возможности показаны в данном примере.
Построение приложений KDE требует больше работы, чем создание большинства программ, по крайней мере, на первый взгляд. В действительности файл menu.pro и команда
qmake
скрывают большой набор параметров, которые в противном случае вам пришлось бы вставлять вручную в ваш make-файл.