- 標頭檔案 KDEMenu.h
#include <kmainwindow.h>
class KDEMenu : public KMainWindow
{
Q_OBJECT
public:
KDEMenu(const char * name = 0);
private slots:
void newFile();
void aboutApp();
};
- 在 KDEMenu.cpp 中引入 widget 相關的檔案:
#include "KDEMenu.h"
#include <kapp.h>
#include <kaction.h>
#include <kstdaccel.h>
#include <kmenubar.h>
#include <kaboutdialog.h>
- 在建構函式中產生三個 KAction widget。
KDEMenu::KDEMenu(const char *name = 0) : KMainWindow (0L, name )
{
KAction *new_file = new KAction("New", "filenew",
KstdAccel::key(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());
- 產生兩層的選單,並將它插入 KApplication 的選單列中:
QPopupMenu *file_menu = new QPopupMenu;
QPopupMenu *help_menu = new QPopupMenu;
menuBar()->insertItem("&File", file_menu);
menuBar()->insertItem("&Help", help_menu);
- 將 action 都插入選單和工具列中,並在
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());
}
- slot 的定義:aboutApp 產生一個 KAbout 對話窗,顯示程式的相關資訊。
void KDEMenu::newFile()
{
// Create new File
}
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();
}
- 提供一個 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
- 執行 qmake 來產生 Makefile,隨後再進行編譯、執行程式。
$ qmake menu.prop -o Makefile
$ make
$ ./kdemenu