KF5开发文档翻译:开发/教程/使用KXmlGuiWindow/KF5,Development/Tutorials/Using KXmlGuiWindow/KF5
如何使用KXmlGuiWindow
教程系列 |
入门级教程 |
上一篇教程 |
|
下一篇教程 |
|
进一步阅读 |
此教程承接上一篇 第一 个程序教程 , 将向妳介绍 KXmlGuiWindow 类。
在前一篇教程中,我们的程序弹出了一个对话框。而这次呢,我们会再进一步,编写出一个有一定功能的应用程序。
KXmlGuiWindow ,提供了一个完整的主窗口界面,其中包含 有:菜单 栏、工具栏、状态 栏以及正中 间用于容纳一个巨大部件的主工作区域。其中 的帮助菜单是预定义好的。 大部分 KDE应用程序 都会使用到这个 类,因为 它提供了一种简易的通过XML 文件 来定义菜单和工具栏布局的手段 ( 这种技术称为 XMLGUI ,是 KF5::XmlGui 框架的组成部分 ) 。 我们在 这个 教程中还不会直接用到XMLGUI,到了下个教程中就会用到了。
要创建出一个有用的KXmlGuiWindow,我们必须先继承它。所以 我们要创建两个文件, mainwindow.cpp 和 mainwindow.h ,代码就写到这两个文件中。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <KXmlGuiWindow>
class KTextEdit;
class MainWindow : public KXmlGuiWindow
{
public :
MainWindow(QWidget * parent =0 );
private :
KTextEdit * textArea;
};
#endif
首先,在第8 行,继承了KXmlGuiWindow 类, MainWindow : public KXmlGuiWindow 。
然后 ,定义了构造函数, MainWindow(QWidget *parent=0); 。
最后 ,我们声明了一个指针,指向那个将会成为我们程序中主体部分的对象。 KTextEdit 是一个通用的富文本编辑器组件,它具有一些细节 上的功能,例如光标自动隐藏。
#include <KTextEdit>
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent)
{
textArea = new KTextEdit();
setCentralWidget(textArea);
setupGUI();
}
首先,在第1 行,我们需要包含类声明所在的头文件。
在第7 行,我们使用一个对象来初始化那个文本编辑器。然后,在第8 行,我们调用了KXmlGuiWindow的内置函数setCentralWidget(),它的作用是,告诉KXmlGuiWindow 要将哪个东西放置到窗口的中央部位。
最后,调用KXmlGuiWindow::setupGUI(),它进行了大量的幕后工作以创建出界面,还会创建出默认的菜单栏(设置,帮助)。
为了将窗口显示出来,我们还需要向main.cpp 中加入几行代码:
#include <cstdlib>
#include <QApplication>
#include <QCommandLineParser>
#include <KAboutData>
#include <KLocalizedString>
#include "mainwindow.h"
int main (int argc, char *argv[])
{
QApplication app(argc, argv);
KLocalizedString :: setApplicationDomain( "tutorial2" );
KAboutData aboutData(
// 内部使用 的程序名字。 (componentName)
QStringLiteral( "tutorial2" ),
// 用于显示 的程序名字。 (displayName)
i18n( "Tutorial 2" ),
// 程序 的版本号字符串。 (version)
QStringLiteral( "1.0" ),
// 对于程序功能 的简短描述。 (shortDescription)
i18n( "A simple text area" ),
// 此代码所使用的许可证。
KAboutLicense :: GPL,
// 版权声明 。 (copyrightStatement = QString())
i18n( "(c) 2015" ),
// 关于 对话框 中显示的额外文字。
// 可包含任意内容。 (otherText)
i18n( "Some text..." ),
// 程序 的主页地址。 (homePageAddress = QString())
QStringLiteral( "http://example.com/" ),
// 缺陷报告 的邮件地址。
// (bugsEmailAddress = QLatin1String("submit@bugs.kde.org")
QStringLiteral( "submit@bugs.kde.org" ));
aboutData.addAuthor(i18n( "Name" ), i18n( "Task" ), QStringLiteral( "your@email.com" ),
QStringLiteral( "http://your.website.com" ), QStringLiteral( "OSC Username" ));
KAboutData :: setApplicationData(aboutData);
QCommandLineParser parser;
parser.addHelpOption();
parser.addVersionOption();
aboutData.setupCommandLine( & parser);
parser.process(app);
aboutData.processCommandLine( & parser);
MainWindow * window = new MainWindow();
window -> show();
return app.exec();
}
(与 教程 1相比)仅有的新代码就是第9、49 和50 行。在第49行,我们创建了MainWindow 对象, 在第50 行,将它显示出来。
要 构建 这个程序,最好的方式就是使用CMake。 我们向源代码列表中加入 mainwindow.cpp ,包含XmlGui 和TextEdit 框架, 并将所有的 tutorial1 文字内容都替换成 tutorial2 。
加入KXmlGui 和KTextWidgets 框架。
project (tutorial2)
cmake_minimum_required(VERSION 2.8.12 FATAL_ERROR)
set(QT_MIN_VERSION "5.3.0")
set(KF5_MIN_VERSION "5.2.0")
find_package(ECM 1.0.0 REQUIRED NO_MODULE)
set(CMAKE_MODULE_PATH ${ ECM_MODULE_PATH } ${ ECM_KDE_MODULE_DIR } ${ CMAKE_CURRENT_SOURCE_DIR } /cmake)
include(KDEInstallDirs)
include(KDECMakeSettings)
include(KDECompilerSettings)
include(FeatureSummary)
find_package(Qt5 ${ QT_MIN_VERSION } CONFIG REQUIRED COMPONENTS
Core # QCommandLineParser, QStringLiteral
Widgets # QApplication
)
find_package(KF5 ${ KF5_MIN_VERSION } REQUIRED COMPONENTS
CoreAddons # KAboutData
I18n # KLocalizedString
XmlGui # KXmlGuiWindow
TextWidgets # KTextEdit
)
feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)
set(tutorial2_SRCS main.cpp mainwindow.cpp)
add_executable(tutorial2 ${ tutorial2_SRCS })
target_link_libraries(tutorial2
Qt5::Widgets
KF5::CoreAddons
KF5::I18n
KF5::XmlGui
KF5::TextWidgets
)
install(TARGETS tutorial2 ${ INSTALL_TARGETS_DEFAULT_ARGS })
要想编译、链接及运行这个程序,最好的方式就是, 建立 一个正确的构建环境 。 不过,对于像本示例这样的简单教程来说,直接创建 一个构建目录,再在那个目录中构建即可。 以下命令,在一行代码里做了所有的事:
mkdir build && cd build && cmake .. && make && ./tutorial2
现在, 可继续学习下一篇, 使用KAction 。
Angell Summers
Your opinionsHxLauncher: Launch Android applications by voice commands