KF5开发文档翻译:开发/教程/第一个程序/KF5,Development/Tutorials/First program/KF5
世界妳好
教程系列 |
入门级教程 |
前置知识 |
|
下一篇教程 |
教程 2 - KXmlGuiWindow |
进一步阅读 |
妳的第一个程序中,会以一句经典的"Hello World"来向世界问好 ,这就够了 。 为了实现这个功能, 我们会用上一个 KMessageBox ,并且对其中的某个按钮进行自定义。
小提示 |
对于妳在教程中遇到的任何一个类,都可以使用“kde ” 搜索引擎来获取它的信息。例如,要查找关于 KMessageBox 的信息,则在Konqueror、Rekonq 或KRunner 中输入"kde:kmessagebox",就会跳转到对应的文档。 |
小提示 |
所有 的代码都在 同 一个文件中, 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文件。
在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 opinionsHxLauncher: Launch Android applications by voice commands