StupidBeauty
Read times:4219Posted at:Sat Dec 10 00:06:05 2016 - no title specified

KF5开发文档翻译:开发/教程/使用KXmlGuiWindow/KF5,Development/Tutorials/Using KXmlGuiWindow/KF5

如何使用KXmlGuiWindow

教程系列

入门级教程

上一篇教程

教程1 - 世界 妳好

下一篇教程

教程3 - KActions XMLGUI

进一步阅读

KXmlGuiWindow

概述

此教程承接上一篇 第一 个程序教程 将向妳介绍 KXmlGuiWindow 类。

在前一篇教程中,我们的程序弹出了一个对话框。而这次呢,我们会再进一步,编写出一个有一定功能的应用程序。

KXmlGuiWindow

KXmlGuiWindow ,提供了一个完整的主窗口界面,其中包含 有:菜单 栏、工具栏、状态 栏以及正中 间用于容纳一个巨大部件的主工作区域。其中 的帮助菜单是预定义好的。 大部分 KDE应用程序 都会使用到这个 类,因为 它提供了一种简易的通过XML 文件 来定义菜单和工具栏布局的手段 这种技术称为 XMLGUI ,是 KF5::XmlGui 框架的组成部分 我们在 这个 教程中还不会直接用到XMLGUI,到了下个教程中就会用到了。

要创建出一个有用的KXmlGuiWindow,我们必须先继承它。所以 我们要创建两个文件, mainwindow.cpp mainwindow.h ,代码就写到这两个文件中。

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 是一个通用的富文本编辑器组件,它具有一些细节 上的功能,例如光标自动隐藏。

mainwindow.cpp

#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

为了将窗口显示出来,我们还需要向main.cpp 中加入几行代码:

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

构建 这个程序,最好的方式就是使用CMake。 我们向源代码列表中加入 mainwindow.cpp ,包含XmlGui 和TextEdit 框架, 并将所有的 tutorial1 文字内容都替换成 tutorial2


加入KXmlGui 和KTextWidgets 框架。

CMakeLists.txt

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 opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands