new_file->plug(a_toolbar);
Таким образом, вы создали пункт меню New
и кнопку панели инструментов, которые вызываютnewFile
при щелчке кнопкой мыши.Теперь если вам нужно отменить KAction
new_file->setEnabled(FALSE);
Это все, что касается меню и панелей инструментов в среде KDE — на самом деле очень легко и просто. Далее приведен конструктор виджета KAction
#include
KAction(const QString& text, const KShortcut& cut,
const QObject* receiver, const char* slot,
QObject *parent, const char* name = 0);
KDE предоставляет стандартные объекты KAction
#include
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.
В приведенном далее примере вы опробуете объекты KAction
1. Начните с заголовочного файла KDEMenu.h. KDEMenu
KMainWindow
, являющегося подклассом класса QMainWindow
. KMainWindow
управляет сеансом в среде KDE и обладает встроенными панелью инструментов и строкой состояния.#include
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
#include
#include
#include
#include
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 {