Archive:Development/Tutorials/First program (zh CN): Difference between revisions
(initial translation) |
m (AnneW moved page Development/Tutorials/First program (zh CN) to Archive:Development/Tutorials/First program (zh CN) without leaving a redirect: Obsolete) |
||
(16 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
{{Template:I18n/Language Navigation Bar (zh_CN)|Development/Tutorials/First_program}} | {{Template:I18n/Language Navigation Bar (zh_CN)|Development/Tutorials/First_program}} | ||
{{TutorialBrowser| | {{TutorialBrowser (zh_CN)| | ||
series=初学者教程| | series=初学者教程| | ||
Line 6: | Line 6: | ||
name=Hello World| | name=Hello World| | ||
pre=[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html C++], [http:// | pre=[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html C++], [http://qt.nokia.com Qt], [[Getting_Started/Build/KDE4 (zh_CN)|KDE4 开发环境]]| | ||
next=[[Development/Tutorials/Using_KXmlGuiWindow|教程2 - 创建主窗口]]| | next=[[Development/Tutorials/Using_KXmlGuiWindow (zh_CN)|教程2 - 创建主窗口]]| | ||
reading=[[Development/Tutorials/ | reading=[[Development/Tutorials/CMake_(zh_CN)|CMake]] | ||
}} | }} | ||
== 摘要 == | == 摘要 == | ||
你的第一个程序将会用一句"Hello World"来向这个世界问好。为了实现它,我们将使用{{class|KMessageBox}},并定制其中的一个按钮。 | |||
[[image:introtokdetutorial1.png|frame|center]] | [[image:introtokdetutorial1.png|frame|center]] | ||
{{ | {{tip_(zh_CN)|Konqueror提供了一个快捷方式,让你可以快速获取关于任何一个KDE类的信息。如果我们需要查看KMessageBox的相关信息,只需要在Konqueror的地址栏中输入"kde:kmessagebox"并回车,它就会自动显示KMessageBox的文档。}} | ||
{{ | {{tip_(zh_CN)|你或许想使用KDevelop来开发你的项目,因为它提供了很多优秀的功能,如代码补全、方便的访问API文档以及集成调试支持等。 | ||
阅读[[Getting_Started/Set_up_KDE_4_for_development_(zh_CN)#KDevelop|此教程]]以正确设置KDevelop。你可以通过先用KDevelop试验打开一个已存在的KDE4应用程序来检验设置是否正确。 | |||
不过,你仍然需要手动编辑CMake文件。 | |||
}} | }} | ||
== 代码 == | == 代码 == | ||
我们需要的全部代码都在一个文件<tt>main.cpp</tt>中。使用下列代码创建该文件: | |||
< | <syntaxhighlight lang="cpp-qt"> | ||
#include <QString> | #include <QString> | ||
#include <KApplication> | #include <KApplication> | ||
Line 39: | Line 39: | ||
int main (int argc, char *argv[]) | int main (int argc, char *argv[]) | ||
{ | { | ||
KAboutData aboutData("tutorial1", // | KAboutData aboutData("tutorial1", // 内部使用的程序名 | ||
0, // | 0, // 消息编目名。如果为null,则使用程序名 | ||
ki18n("Tutorial 1"), // | ki18n("Tutorial 1"), // 显示用的程序名称字符串 | ||
"1.0", // | "1.0", // 程序版本号字符串 | ||
ki18n("KMessageBox popup"), // | ki18n("KMessageBox popup"), // 对程序实现功能的简要描述 | ||
KAboutData::License_GPL, // | KAboutData::License_GPL, // 授权标识符 | ||
ki18n("(c) 2007"), // | ki18n("(c) 2007"), // 版权声明 | ||
ki18n("Some text..."), // | ki18n("Some text..."), // 任意格式的文本,可以包含任意类型的信息 | ||
"http://tutorial.com", // | "http://tutorial.com", // 程序主页字符串 | ||
"[email protected]"); // | "[email protected]"); // 报告bug用的邮件地址字符串 | ||
KCmdLineArgs::init( argc, argv, &aboutData ); | KCmdLineArgs::init( argc, argv, &aboutData ); | ||
Line 57: | Line 57: | ||
KMessageBox::questionYesNo( 0, "Hello World", "Hello", guiItem ); | KMessageBox::questionYesNo( 0, "Hello World", "Hello", guiItem ); | ||
} | } | ||
</ | </syntaxhighlight> | ||
我们在此程序中遇到的第一个KDE类是{{class|KAboutData}}。这个类被用来保存关于程序的各种信息,如功能的简单描述、作者和版权信息等。几乎所有的KDE应用程序都会使用该类。 | |||
然后我们遇到了{{class|KCmdLineArgs}}。这个类可以用来处理命令行开关。例如,可以让某个开关指定使用一个特定的文件来打开程序。在本例中,我们只使用之前创建的{{class|KAboutData}}对象来初始化它,这使我们在运行程序时可以使用<tt>--version</tt>或<tt>--author</tt>开关。 | |||
接下来我们创建了一个{{class|KApplication}}对象。这在每个程序中都必须做一次,因为KDE中的很多功能都依赖于该对象,如[[Development/Tutorials/Localization/i18n|i18n]]等。 | |||
现在我们已经完成了全部必须的KDE设置工作,接下来就可以让我们的程序做一些有趣的事情了。我们将要创建一个弹出框,并将定制其中的一个按钮。要实现该定制,我们需要一个{{class|KGuiItem}}对象。{{class|KGuiItem}}构造函数的第一个参数是要显示在该item(在本例中,是一个按钮)中的文字。接下来的参数让我们可以为该按钮设定一个图标,但这里我们并不需要图标,因此只需要将<tt>QString()</tt>传递给它就行。最后,我们设定tooltip(当鼠标在一个item上徘徊时显示的文字)和“这是什么?”(用鼠标右击item或按下Shift+F1时显示)文本。 | |||
现在有了需要的item,我们就可以创建弹出框了。在这里我们调用<tt>KMessageBox::questionYesNo()</tt>函数,它在缺省参数的条件下会创建一个有"Yes"和"No"按钮的消息框。函数的第二个参数是将要显示栽弹出框中间的文字。第三个参数是窗口的标题。最后,我们使用我们创建的<tt>KGuiItem</tt>对象来设定(通常情况下将会是)"Yes"按钮的KGuiItem。 | |||
现在,代码相关的工作我们已经全部完成了。接下来我们要构建并尝试运行它。 | |||
== 构建 == | == 构建 == | ||
如果你已经按照[[Getting_Started/Build/KDE4 (zh_CN)|从源代码构建KDE4]]中的说明设置好了你的环境,你就可以用下面的命令编译代码: | |||
g++ main.cpp -o tutorial1 \ | g++ main.cpp -o tutorial1 \ | ||
-I$QTDIR/include/Qt \ | -I$QTDIR/include/Qt \ | ||
Line 81: | Line 81: | ||
-L$KDEDIR/lib \ | -L$KDEDIR/lib \ | ||
-L$QTDIR/lib -lQtCore -lQtGui -lkdeui -lkdecore | -L$QTDIR/lib -lQtCore -lQtGui -lkdeui -lkdecore | ||
然后,使用下面的命令运行它: | |||
dbus-launch ./tutorial1 | dbus-launch ./tutorial1 | ||
=== 使用CMake === | === 使用CMake === | ||
如果它能够正常运行,你也许会进一步希望使用[[Development/Tutorials/CMake_(zh_CN)|CMake]]来构建来,就像其它的KDE程序一样。CMake会自动找出KDE、Qt等的头文件和库,并让你能够轻松在其它机器上编译你的程序。 | |||
==== CMakeLists.txt ==== | ==== CMakeLists.txt ==== | ||
在main.cpp所在的目录中创建一个名为CMakeLists.txt的文件,其内容如下: | |||
< | <syntaxhighlight lang="text"> | ||
project (tutorial1) | project (tutorial1) | ||
Line 98: | Line 99: | ||
kde4_add_executable(tutorial1 ${tutorial1_SRCS}) | kde4_add_executable(tutorial1 ${tutorial1_SRCS}) | ||
target_link_libraries(tutorial1 ${KDE4_KDEUI_LIBS}) | target_link_libraries(tutorial1 ${KDE4_KDEUI_LIBS}) | ||
</ | </syntaxhighlight> | ||
在这段代码中,<tt>find_package()</tt>函数找出你让它找的软件包(在这里是KDE4),并且自动设置一些描述包的库文件和头文件所在路径的变量。在这里,我们将使用<tt>KDE4_INCLUDES</tt>变量,它包含了KDE4头文件所在的路径。 | |||
为了让编译器能找到这些头文件,我们将该变量传递给<tt>include_directories()</tt>函数,它会将KDE4头文件列入编译时查找头文件的搜索路径中。 | |||
接下来我们使用<tt>set()</tt> 函数创建了一个叫<tt>tutorial1_SRCS</tt>的变量。在这里,我们只是简单的将它设成我们唯一源代码文件的文件名。 | |||
然后我们使用<tt>kde4_add_executable()</tt>函数,将<tt>tutorial1_SRCS</tt>变量中列出的源文件创建为一个叫<tt>tutorial1</tt>的可执行文件。 | |||
最终我们使用<tt>target_link_libraries()</tt>函数,以及之前<tt>find_package()</tt>设定的变量<tt>KDE4_KDEUI_LIBS</tt>,将我们的可执行程序链接到KDE4的kdeui库。 | |||
==== Make与运行 ==== | ==== Make与运行 ==== | ||
如果你已经按照[[Getting_Started/Build/KDE4 (zh_CN)|构建KDE4]]中的说明设置好了环境,你就可以使用下面的命令来编译你的程序: | |||
cmakekde | cmakekde | ||
否则,你也可以这样编译: | |||
mkdir build && cd build | |||
cmake .. # 注意,这两个点代表父目录。 | |||
make | |||
然后使用下面的命令来运行它: | |||
./tutorial1.shell | ./tutorial1.shell | ||
== 继续前进 == | == 继续前进 == | ||
接下来你可以开始学习下一课:[[Development/Tutorials/Using_KXmlGuiWindow (zh_CN)|创建主窗口]]. | |||
[[Category:C++]] | [[Category:C++]] |
Latest revision as of 12:33, 23 June 2013
Template:I18n/Language Navigation Bar (zh CN) Template:TutorialBrowser (zh CN)
摘要
你的第一个程序将会用一句"Hello World"来向这个世界问好。为了实现它,我们将使用KMessageBox,并定制其中的一个按钮。
代码
我们需要的全部代码都在一个文件main.cpp中。使用下列代码创建该文件:
#include <QString>
#include <KApplication>
#include <KAboutData>
#include <KMessageBox>
#include <KCmdLineArgs>
#include <KLocalizedString>
int main (int argc, char *argv[])
{
KAboutData aboutData("tutorial1", // 内部使用的程序名
0, // 消息编目名。如果为null,则使用程序名
ki18n("Tutorial 1"), // 显示用的程序名称字符串
"1.0", // 程序版本号字符串
ki18n("KMessageBox popup"), // 对程序实现功能的简要描述
KAboutData::License_GPL, // 授权标识符
ki18n("(c) 2007"), // 版权声明
ki18n("Some text..."), // 任意格式的文本,可以包含任意类型的信息
"http://tutorial.com", // 程序主页字符串
"[email protected]"); // 报告bug用的邮件地址字符串
KCmdLineArgs::init( argc, argv, &aboutData );
KApplication app;
KGuiItem guiItem( QString( "Hello" ), QString(),
QString( "this is a tooltip" ),
QString( "this is a whatsthis" ) );
KMessageBox::questionYesNo( 0, "Hello World", "Hello", guiItem );
}
我们在此程序中遇到的第一个KDE类是KAboutData。这个类被用来保存关于程序的各种信息,如功能的简单描述、作者和版权信息等。几乎所有的KDE应用程序都会使用该类。
然后我们遇到了KCmdLineArgs。这个类可以用来处理命令行开关。例如,可以让某个开关指定使用一个特定的文件来打开程序。在本例中,我们只使用之前创建的KAboutData对象来初始化它,这使我们在运行程序时可以使用--version或--author开关。
接下来我们创建了一个KApplication对象。这在每个程序中都必须做一次,因为KDE中的很多功能都依赖于该对象,如i18n等。
现在我们已经完成了全部必须的KDE设置工作,接下来就可以让我们的程序做一些有趣的事情了。我们将要创建一个弹出框,并将定制其中的一个按钮。要实现该定制,我们需要一个KGuiItem对象。KGuiItem构造函数的第一个参数是要显示在该item(在本例中,是一个按钮)中的文字。接下来的参数让我们可以为该按钮设定一个图标,但这里我们并不需要图标,因此只需要将QString()传递给它就行。最后,我们设定tooltip(当鼠标在一个item上徘徊时显示的文字)和“这是什么?”(用鼠标右击item或按下Shift+F1时显示)文本。
现在有了需要的item,我们就可以创建弹出框了。在这里我们调用KMessageBox::questionYesNo()函数,它在缺省参数的条件下会创建一个有"Yes"和"No"按钮的消息框。函数的第二个参数是将要显示栽弹出框中间的文字。第三个参数是窗口的标题。最后,我们使用我们创建的KGuiItem对象来设定(通常情况下将会是)"Yes"按钮的KGuiItem。
现在,代码相关的工作我们已经全部完成了。接下来我们要构建并尝试运行它。
构建
如果你已经按照从源代码构建KDE4中的说明设置好了你的环境,你就可以用下面的命令编译代码:
g++ main.cpp -o tutorial1 \ -I$QTDIR/include/Qt \ -I$QTDIR/include/QtCore \ -I$QTDIR/include \ -I$KDEDIR/include/KDE \ -I$KDEDIR/include \ -L$KDEDIR/lib \ -L$QTDIR/lib -lQtCore -lQtGui -lkdeui -lkdecore
然后,使用下面的命令运行它:
dbus-launch ./tutorial1
使用CMake
如果它能够正常运行,你也许会进一步希望使用CMake来构建来,就像其它的KDE程序一样。CMake会自动找出KDE、Qt等的头文件和库,并让你能够轻松在其它机器上编译你的程序。
CMakeLists.txt
在main.cpp所在的目录中创建一个名为CMakeLists.txt的文件,其内容如下:
project (tutorial1)
find_package(KDE4 REQUIRED)
include_directories( ${KDE4_INCLUDES} )
set(tutorial1_SRCS main.cpp)
kde4_add_executable(tutorial1 ${tutorial1_SRCS})
target_link_libraries(tutorial1 ${KDE4_KDEUI_LIBS})
在这段代码中,find_package()函数找出你让它找的软件包(在这里是KDE4),并且自动设置一些描述包的库文件和头文件所在路径的变量。在这里,我们将使用KDE4_INCLUDES变量,它包含了KDE4头文件所在的路径。
为了让编译器能找到这些头文件,我们将该变量传递给include_directories()函数,它会将KDE4头文件列入编译时查找头文件的搜索路径中。
接下来我们使用set() 函数创建了一个叫tutorial1_SRCS的变量。在这里,我们只是简单的将它设成我们唯一源代码文件的文件名。
然后我们使用kde4_add_executable()函数,将tutorial1_SRCS变量中列出的源文件创建为一个叫tutorial1的可执行文件。
最终我们使用target_link_libraries()函数,以及之前find_package()设定的变量KDE4_KDEUI_LIBS,将我们的可执行程序链接到KDE4的kdeui库。
Make与运行
如果你已经按照构建KDE4中的说明设置好了环境,你就可以使用下面的命令来编译你的程序:
cmakekde
否则,你也可以这样编译:
mkdir build && cd build cmake .. # 注意,这两个点代表父目录。 make
然后使用下面的命令来运行它:
./tutorial1.shell
继续前进
接下来你可以开始学习下一课:创建主窗口.