Основы программирования в 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);
Таким
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 {
Поделиться с друзьями: