StupidBeauty
Read times:3024Posted at:Tue Dec 6 00:10:45 2016 - no title specified

KF5开发文档翻译:开发/教程/第一个程序/KF5,Development/Tutorials/First program/KF5

世界妳好

教程系列

入门级教程

前置知识

C++ Qt 构建KDE

下一篇教程

教程 2 - KXmlGuiWindow

进一步阅读

CMake

概述

妳的第一个程序中,会以一句经典的"Hello World"来向世界问好 ,这就够了 为了实现这个功能, 我们会用上一个 KMessageBox ,并且对其中的某个按钮进行自定义。

小提示

对于妳在教程中遇到的任何一个类,都可以使用“kde 搜索引擎来获取它的信息。例如,要查找关于 KMessageBox 的信息,则在Konqueror、Rekonq 或KRunner 中输入"kde:kmessagebox",就会跳转到对应的文档。

小提示

可使用 KDevelop QtCreator 作为项目的集成开发环境。

代码

所有 的代码都在 一个文件中, main.cpp 。创建 这个文件,并且输入以下代码:

#include <cstdlib>

#include <QApplication>

#include <QCommandLineParser>

#include <KAboutData>

#include <KLocalizedString>

#include <KMessageBox>

int main (int argc, char *argv[])

{

QApplication app(argc, argv);

KLocalizedString :: setApplicationDomain( "tutorial1" );

KAboutData aboutData(

// 内部使用 的程序名字。 (componentName)

QStringLiteral( "tutorial1" ),

// 用于显示 的程序名字。 (displayName)

i18n( "Tutorial 1" ),

// 程序 的版本号字符串。 (version)

QStringLiteral( "1.0" ),

// 对于程序功能 的简短描述。 (shortDescription)

i18n( "Displays a KMessageBox popup" ),

// 此代码所使用的许可证。

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);

KGuiItem yesButton( i18n( "Hello" ), QString(),

i18n( "This is a tooltip" ),

i18n( "This is a WhatsThis help text." ) );

return

KMessageBox :: questionYesNo

( 0 , i18n( "Hello World" ), i18n( "Hello" ), yesButton )

== KMessageBox :: Yes ? EXIT_SUCCESS : EXIT_FAILURE;

}

首先 ,我们要创建一个 QApplication 对象。 在每个程序中,都要将这件事情进行一次, 它是其它事情的基础,例如 i18n 。并且 ,应当在创建任何其它的KDE 或Qt 对象之前创建这个对象。调用 KLocalizedString ::setApplicationDomain() ,也是必要的, 这样做的作用是正确地设置翻译目录,这个步骤必须在其它步骤之前进行。

在这个程序中,我们创建的第一个与KDE 相关的对象,就是 KAboutData 这个类,用来储存与程序相关的信息,例如,简短的描述、作者信息或许可证信息。每个KDE 程序 都应当使用这个类。然后 ,我们调用 KAboutData ::setApplicationData()来对 QApplication 对象的各个属性进行初始化。

接下来就是 QCommandLineParser 这个类,用来指定那些 起到特定作用的命令行参数,例如 ,某个参数用来指定 要打开哪个文件。 不过呢,在这个教程中, 我们只是简单地使用 KAboutData 对象来对 它进行初始化, 这样,我们就可以使用 --version --author 选项。

到了这个阶段,所有必要的KDE 初始化工作都做完了 可以开始做些真正有意思的事情了 我们会创建一个弹出对话框,不过我们会对其中一个按钮进行自定义。对于 这个自定义过程,我们会使用一个 KGuiItem 对象。 KGuiItem 构造函数 中的第一个参数,即是要显示在该条目( 在本教程中,就是一个按钮 )上的文字内容。然后 ,我们可以向该按钮设置一个图标,但是 我们目前并不打算设置一个图标,所以直接传入一个 QString() 。然后 我们设置工具提示 ( 将鼠标悬停在条目上,就会出现这个 ) 和“这是什么?”(右键点击 ,或者按 Shift-F1 ,就会出现 )内容

条目创建 好了,接下来就可以创建弹出框了。 我们调用 KMessageBox ::questionYesNo() 函数, 它在默认情况下会创建一个带有"Yes"和"No"按钮的消息框。第二 个参数, 是指将会出现在对话框里按钮上方的文字内容。第三 个参数是窗口的标题。最后 一个参数,我们 将"Yes"按钮 (正常情况 下就会是这个 的KGuiItem 设置成我们之前创建的 KGuiItem yesButton

注意 ,所有能被用户看到的文字内容,都是通过i18n()函数来传递的;必须 这样做,整个界面才是可翻译的。 欲知更多关于本地化的信息,则阅读 本地 化教程

关于代码,都讲完了。现在可以构建并且运行它了。

构建

应当 使用CMake 作为构建环境 妳需要提供一个CMakeLists.txt 文件, cmake 会使用这个文件来生成Makefile文件。

CMakeLists.txt

在main.cpp 所在的同一个目录中,创建一个名为CMakeLists.txt 的文件,输入以下内容:

project (tutorial1)

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)

# 寻找Qt模块

find_package(Qt5 ${ QT_MIN_VERSION } CONFIG REQUIRED COMPONENTS

Core # QCommandLineParser, QStringLiteral

Widgets # QApplication

)

# 寻找KDE模块

find_package(KF5 ${ KF5_MIN_VERSION } REQUIRED COMPONENTS

CoreAddons # KAboutData

I18n # KLocalizedString

WidgetsAddons # KMessageBox

)

feature_summary(WHAT ALL INCLUDE_QUIET_PACKAGES FATAL_ON_MISSING_REQUIRED_PACKAGES)

set(tutorial1_SRCS main.cpp)

add_executable(tutorial1 ${ tutorial1_SRCS })

target_link_libraries(tutorial1

Qt5::Widgets

KF5::CoreAddons

KF5::I18n

KF5::WidgetsAddons

)

install(TARGETS tutorial1 ${ INSTALL_TARGETS_DEFAULT_ARGS })

find_package() 函数 ,会找到妳要求它寻找的软件包 ( 在本示例中,就是 ECM Qt5 KF5) ,并且设置一些变量,用于描述该软件包的头文件和库文件的位置信息。 ECM 、全称 Extra CMake Modules 是必要的,它被用来导入特殊的 CMake文件 和函数,以便构建KDE 相关的应用程序。

此处,我们尝试寻找Qt 5 和KDE Frameworks 5 的各个模块,以便构建我们的教程程序。CMake 会包含各个必要的文件,使得编译器在构建时刻能够找到它们。在CMakeLists.txt 文件的顶部设置了各个模块的最小版本号,以便后续方便地引用。

接下来,我们使用 set() 函数来创建一个名为 tutorial1_SRCS 的变量。 在本示例中,我们只需要将它设置成唯一的源代码文件的文件名即可。

然后 ,我们使用 add_executable() 来创建一个名为 tutorial1 的可执行程序目标, 它所依赖的就是 tutorial1_SRCS 变量中列出的源代码文件。 再然后,我们使用 target_link_libraries() 函数来指 令将 可执行程序链接到必要的库文件。 install 开头的那一行,会向Makefile 中写入一个默认的"install"目标。

编译及运行

要想编译、链接及安装这个程序,妳需要先安装多个软件,包括: cmake make gcc-c++ Qt 5 KDE Frameworks 的开发库文件。最好 是按照 安装指南 的说明来做,以确保各个必要的软件都被正确安装了。

尽管妳可以在源代码所在的目录中直接运行cmake,但是,最佳实践是,使用一个独立的构建目录,并在那个目录中运行cmake。事实上,某些KDE 软件会强制要求妳这么做:

mkdir build && cd build

然后,手动执行CMake 和make:

cmake .. && make

使用以下命令来启动这个程序:

./tutorial1

下一篇

现在, 可以学习下一篇了, 使用KXmlGuiWindow

未知美人

Your opinions
Your name:Email:Website url:Opinion content:
- no title specified

HxLauncher: Launch Android applications by voice commands