Книга: Основы программирования в Linux

Создание меню и панелей инструментов с помощью KDE

Создание меню и панелей инструментов с помощью KDE

Для того чтобы продемонстрировать мощь виджетов KDE, мы оставили меню и панели инструментов напоследок, поскольку они — уж очень наглядные примеры того, как библиотеки KDE экономят время и усилия по сравнению с применением только Qt или любых других комплектов с элементами графического пользовательского интерфейса.

Обычно в библиотеках GUI элементы меню и панелей инструментов — отличающиеся элементы, каждый со своим собственным виджетом. Вы должны создавать отдельные объекты для каждого элемента и отслеживать изменения, например, делая недоступными определенные варианты, каждый отдельно.

У программистов KDE появилось лучшее решение. Вместо такого обособленного подхода в KDE определен виджет KAction для представления действия, которое может выполнить приложение. Это действие может открыть новый документ, сохранить файл или вывести окно справки.

KAction присваивается текст, клавиатурный акселератор, пиктограмма и слот, который вызывается при активизации действия:

KAction *new_file = new KAction("New", "filenew",
 KstdAccel::shortcut(KstdAccel::New), this,
 SLOT(newFile()), this, "newaction");

Затем KAction может быть вставлено в меню и панель инструментов без дополнительного описания:

new_file->plug(a_menu);
new_file->plug(a_toolbar);

Таким образом, вы создали пункт меню New и кнопку панели инструментов, которые вызывают newFile при щелчке кнопкой мыши.

Теперь если вам нужно отменить KAction — скажем, вы не хотите, чтобы пользователь мог создать новый файл, — вызов централизован:

new_file->setEnabled(FALSE);

Это все, что касается меню и панелей инструментов в среде KDE — на самом деле очень легко и просто. Далее приведен конструктор виджета KAction:

#include <kde/kaction.h>
KAction(const QString& text, const KShortcut& cut,
 const QObject* receiver, const char* slot,
 QObject *parent, const char* name = 0);

KDE предоставляет стандартные объекты KAction для унификации текста, клавиатурных акселераторов и пиктограмм в разных приложениях KDE:

#include <kde/kaction.h>
KAction* openNew(const QObject* recvr, const char *slot,
 KActionCollection* parent, const char* name = 0)ж
KAction* save ...
KAction* saveAs ...
KAction* revert ...
KAction* close ...
KAction* print ...

И т.д.

Любое стандартное действие принимает одни и те же параметры; слот-приемник и функцию, KActionCollection и имя KAction. Объект KActionCollection управляет в окне объектами KAction, и вы можете получить текущий объект с помощью метода actionCollection окна KMainWindow:

KAction *saveas = KStdAction::saveAs(this, SLOT(saveAs()) ,
 actionCollection(), "saveas");

Выполните упражнение 17.8.

Упражнение 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("[email protected]"), 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-файл.

На рис. 17.11 и 17.12 показано, как появляются в окне меню и кнопки панели инструментов.


Рис. 17.11 


Рис. 17.12 

И вот оно! Мы закончили наш тур по Qt и KDE, рассмотрев базовые элементы, всех приложений GUI, окна, схемы размещения, кнопки, диалоговые окна и меню. Существует бесчисленное множество виджетов Qt и KDE, о которых мы не упоминали, начиная с QColorDialog — диалогового окна для выбора цвета — и заканчивая KHTML — виджетом Web-обозревателя — все они подробно описаны на Web-сайтах компании Trolltech и графической среды KDE. 

Оглавление книги


Генерация: 1.110. Запросов К БД/Cache: 3 / 0
поделиться
Вверх Вниз