Archive:Development/Tutorials/Using KXmlGuiWindow (zh CN): Difference between revisions
(→编译运行) |
m (AnneW moved page Development/Tutorials/Using KXmlGuiWindow (zh CN) to Archive:Development/Tutorials/Using KXmlGuiWindow (zh CN) without leaving a redirect: Obsolete) |
||
(4 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Template:I18n/Language Navigation Bar (zh_CN)|Development/Tutorials/Using KXmlGuiWindow}} | {{Template:I18n/Language Navigation Bar (zh_CN)|Development/Tutorials/Using KXmlGuiWindow}} | ||
{{TutorialBrowser| | {{TutorialBrowser (zh_CN)| | ||
series=初学者教程| | series=初学者教程| | ||
Line 25: | Line 25: | ||
===mainwindow.h=== | ===mainwindow.h=== | ||
< | <syntaxhighlight lang="cpp-qt"> | ||
#ifndef MAINWINDOW_H | #ifndef MAINWINDOW_H | ||
#define MAINWINDOW_H | #define MAINWINDOW_H | ||
Line 42: | Line 42: | ||
#endif | #endif | ||
</ | </syntaxhighlight> | ||
首先,我们在第7行声明了KXmlGuiWindow的一个派生类:<tt>class MainWindow : public KXmlGuiWindow</tt>. | 首先,我们在第7行声明了KXmlGuiWindow的一个派生类:<tt>class MainWindow : public KXmlGuiWindow</tt>. | ||
Line 50: | Line 50: | ||
===mainwindow.cpp=== | ===mainwindow.cpp=== | ||
< | <syntaxhighlight lang="cpp-qt"> | ||
#include "mainwindow.h" | #include "mainwindow.h" | ||
Line 59: | Line 59: | ||
setupGUI(); | setupGUI(); | ||
} | } | ||
</ | </syntaxhighlight> | ||
首先,很自然的,我们在第一行首先声明包含了含有类声明的头文件。 | 首先,很自然的,我们在第一行首先声明包含了含有类声明的头文件。 | ||
Line 69: | Line 69: | ||
为了能够实际运行前面定义的窗口, 我们还需要在<tt>main.cpp</tt>中增加一些代码: | 为了能够实际运行前面定义的窗口, 我们还需要在<tt>main.cpp</tt>中增加一些代码: | ||
===main.cpp=== | ===main.cpp=== | ||
< | <syntaxhighlight lang="cpp-qt"> | ||
#include <KApplication> | #include <KApplication> | ||
#include <KAboutData> | #include <KAboutData> | ||
Line 92: | Line 92: | ||
return app.exec(); | return app.exec(); | ||
} | } | ||
</ | </syntaxhighlight> | ||
与第一讲相比,这里唯一新增加的行就是第18和19行。在第18行,我们生成了一个MainWindow类的对象实例,然后在第19行显示它。 | 与第一讲相比,这里唯一新增加的行就是第18和19行。在第18行,我们生成了一个MainWindow类的对象实例,然后在第19行显示它。 | ||
Line 98: | Line 98: | ||
构建此程序的最好方法是使用CMake。与第一讲中的CMakeLists.txt文件相比,唯一的改变是<tt>mainwindow.cpp</tt>被增加到了源文件列表中,以及<tt>tutorial1</tt>变成了<tt>tutorial2</tt>。 | 构建此程序的最好方法是使用CMake。与第一讲中的CMakeLists.txt文件相比,唯一的改变是<tt>mainwindow.cpp</tt>被增加到了源文件列表中,以及<tt>tutorial1</tt>变成了<tt>tutorial2</tt>。 | ||
===CMakeLists.txt=== | ===CMakeLists.txt=== | ||
< | <syntaxhighlight lang="ini"> | ||
project (tutorial2) | project (tutorial2) | ||
Line 111: | Line 111: | ||
kde4_add_executable(tutorial2 ${tutorial2_SRCS}) | kde4_add_executable(tutorial2 ${tutorial2_SRCS}) | ||
target_link_libraries( tutorial2 ${KDE4_KDEUI_LIBS}) | target_link_libraries( tutorial2 ${KDE4_KDEUI_LIBS}) | ||
</ | </syntaxhighlight> | ||
=== 编译运行 === | === 编译运行 === |
Latest revision as of 12:34, 23 June 2013
Template:I18n/Language Navigation Bar (zh CN) Template:TutorialBrowser (zh CN)
摘要
本教程承接上一讲教程1 - Hello World ,进一步介绍KXmlGuiWindow类的使用。
在上一讲中,程序只是显示了一个弹出框。在本讲中,我们要让我们的程序具备更加实际功能。
使用KXmlGuiWindow
为了得到一个可用的KXmlGuiWindow,我们必须对它子类化。为此,我们创建两个文件:mainwindow.cpp和mainwindow.h,在其中保存我们的派生类代码。我们的类继承自KXmlGuiWindow,因为它使用XML来定义程序的菜单结构。
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <KXmlGuiWindow>
#include <KTextEdit>
class MainWindow : public KXmlGuiWindow
{
public:
MainWindow(QWidget *parent=0);
private:
KTextEdit* textArea;
};
#endif
首先,我们在第7行声明了KXmlGuiWindow的一个派生类:class MainWindow : public KXmlGuiWindow.
接下来我们声明了一个构造函数MainWindow(QWidget *parent=0);.
最后我们定义了一个指针类型的成员变量,它将被用来指向我们用来构成程序主体的KTextEdit对象。KTextEdit是一个通用的RichText编辑器,并具有很多KDE特有的优点,如光标自动隐藏等。
mainwindow.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent)
{
textArea = new KTextEdit;
setCentralWidget(textArea);
setupGUI();
}
首先,很自然的,我们在第一行首先声明包含了含有类声明的头文件。
在第五行,我们初始化了一个KTextEdit对象并将它赋给之前定义的成员变量。接下来在第6行,我们调用KXmlGuiWindow内置的setCentralWidget()函数,它告诉程序应该将什么东西显示在窗口的中央。
最终, KXmlGuiWindow::setupGUI()被调用,它会替我们完成很多底层的工作,并创建一个缺省的菜单(包含“设置”和“帮助”)。
回到main.cpp
为了能够实际运行前面定义的窗口, 我们还需要在main.cpp中增加一些代码:
main.cpp
#include <KApplication>
#include <KAboutData>
#include <KCmdLineArgs>
#include "mainwindow.h"
int main (int argc, char *argv[])
{
KAboutData aboutData( "tutorial2", 0,
ki18n("Tutorial 2"), "1.0",
ki18n("A simple text area"),
KAboutData::License_GPL,
ki18n("Copyright (c) 2007 Developer") );
KCmdLineArgs::init( argc, argv, &aboutData );
KApplication app;
MainWindow* window = new MainWindow();
window->show();
return app.exec();
}
与第一讲相比,这里唯一新增加的行就是第18和19行。在第18行,我们生成了一个MainWindow类的对象实例,然后在第19行显示它。
CMake
构建此程序的最好方法是使用CMake。与第一讲中的CMakeLists.txt文件相比,唯一的改变是mainwindow.cpp被增加到了源文件列表中,以及tutorial1变成了tutorial2。
CMakeLists.txt
project (tutorial2)
find_package(KDE4 REQUIRED)
include_directories( ${KDE4_INCLUDES} )
set(tutorial2_SRCS
main.cpp
mainwindow.cpp
)
kde4_add_executable(tutorial2 ${tutorial2_SRCS})
target_link_libraries( tutorial2 ${KDE4_KDEUI_LIBS})
编译运行
要编译、链接以及运行该程序,使用下面的命令:
mkdir build && cd build cmake .. make ./tutorial2
继续前进
接下来你可以继续学习下一讲使用KActions.