Чтение онлайн

ЖАНРЫ

Основы программирования в Linux
Шрифт:

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 {

Поделиться с друзьями: