Archive:Development/Tutorials/First program (zh TW): Difference between revisions
No edit summary |
m (AnneW moved page Development/Tutorials/First program (zh TW) to Archive:Development/Tutorials/First program (zh TW) without leaving a redirect: Obsolete) |
||
(12 intermediate revisions by 2 users not shown) | |||
Line 1: | Line 1: | ||
{{Template:I18n/Language Navigation | {{Template:I18n/Language Navigation Bar_(zh_TW)|Development/Tutorials/First_program}} | ||
{{TutorialBrowser (zh TW)| | {{TutorialBrowser (zh TW)| | ||
Line 6: | Line 6: | ||
name=Hello World| | name=Hello World| | ||
pre=[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html C++]、[http://www.qt.nokia.com | pre=[http://mindview.net/Books/TICPP/ThinkingInCPP2e.html C++]、[http://www.qt.nokia.com Qt]、[[Getting_Started/Build/KDE4 (zh TW)|KDE 4 開發環境]]| | ||
next=[[Development/Tutorials/Using_KXmlGuiWindow (zh TW)|教學 2 - KXmlGuiWindow]]| | next=[[Development/Tutorials/Using_KXmlGuiWindow (zh TW)|教學 2 - KXmlGuiWindow]]| | ||
reading=[[Development/Tutorials/ | reading=[[Development/Tutorials/CMake_(zh_TW)|CMake]] | ||
}} | }} | ||
Line 17: | Line 17: | ||
[[image:introtokdetutorial1.png|frame|center]] | [[image:introtokdetutorial1.png|frame|center]] | ||
{{tip|Konqueror 提供了一個快捷方式,讓你可以獲取關於任何一個你想使用的類別的資訊。如果我們需要查看 KMessageBox 的相關資訊,只需要在 Konqueror 的位址列中輸入「kde:kmessagebox」,它就會自動顯示 KMessageBox 的文件。}} | {{tip (zh TW)|Konqueror 提供了一個快捷方式,讓你可以獲取關於任何一個你想使用的類別的資訊。如果我們需要查看 KMessageBox 的相關資訊,只需要在 Konqueror 的位址列中輸入「kde:kmessagebox」,它就會自動顯示 KMessageBox 的文件。}} | ||
{{tip|你或許想使用 KDevelop 來開發你的項目,因為它提供了很多優秀的功能,如程式碼補全、方便的訪問 API 文件以及除錯支援等。 | {{tip (zh TW)|你或許想使用 KDevelop 來開發你的項目,因為它提供了很多優秀的功能,如程式碼補全、方便的訪問 API 文件以及除錯支援等。 | ||
閱讀[[Getting_Started/ | 閱讀[[Getting_Started/Set_up_KDE_4_for_development_(zh_TW)#KDevelop|此教學]]以正確設定 KDevelop。你可以先用 KDevelop 打開一個已存在的 KDE 4 應用程式來檢驗設定是否正確。 | ||
不過,你仍然需要手動編輯 CMake 檔案。 | 不過,你仍然需要手動編輯 CMake 檔案。 | ||
Line 27: | Line 27: | ||
==程式碼== | ==程式碼== | ||
我們需要的全部程式碼都放在一個 <tt>main.cpp</tt> | 我們需要的全部程式碼都放在一個 <tt>main.cpp</tt> 檔案中。使用下列程式碼建立立檔案: | ||
< | <syntaxhighlight lang="cpp-qt"> | ||
#include <KApplication> | #include <KApplication> | ||
#include <KAboutData> | #include <KAboutData> | ||
Line 71: | Line 71: | ||
return 0; | return 0; | ||
} | } | ||
</ | </syntaxhighlight> | ||
我們在此程式中遇到的第一個 KDE 類別是 {{class|KAboutData}} 。這個類別用來儲存各種的程式相關資訊,如功能的簡單描述、作者或版權資訊等。幾乎所有的 KDE 應用程式都會使用該類別。 | 我們在此程式中遇到的第一個 KDE 類別是 {{class|KAboutData}} 。這個類別用來儲存各種的程式相關資訊,如功能的簡單描述、作者或版權資訊等。幾乎所有的 KDE 應用程式都會使用該類別。 | ||
然後我們遇到了 {{class|KCmdLineArgs}} | 然後我們遇到了 {{class|KCmdLineArgs}}。這個類別可以用來處理命令列開關。例如,開啟程式並讀入一個特定的檔案。在本例中,我們只使用之前建立的{{class|KAboutData}}物件來初始化它,因此我們可以使用 <tt>--version</tt> 或 <tt>--author</tt> 開關。 | ||
接下來我們建立 {{class|KApplication}} 和 {{class|KLocale}} 物件。這在每個程式中都必須實作,因為KDE中的很多功能都需要他們,如[[Development/Tutorials/Localization/i18n|i18n]]等。 | |||
現在我們已經完成了全部必須的 KDE 設定,接下來就可以讓我們的程式做一些有趣的事情了。我們將要建立一個彈出框,並將自定其中的一個按鈕。為了實現自定化,我們需要使用 {{class|KGuiItem}} 物件。{{class|KGuiItem}} 建構子的第一個參數是要顯示在 item(在本例中是一個按鈕)中的文字。下一個參數讓我們可以為該按鈕設定一個圖示,但這裡我們並不需要圖示,所以只需要傳遞 <tt>QString()</tt> 給它就行。最後,我們設定工具提示(tooltip)(當游標放在一個 item 上顯示的文字)和「這是什麼?」(用滑鼠右鍵按下 item 或按下 Shift+F1 時顯示)文字。 | |||
現在我們有了 | 現在我們有了 item,可以開始建立我們的彈出框了。在這裡我們呼叫 <tt>{{class|KMessageBox}}::questionYesNo()</tt> 函式,它在預設的條件下會建立一個有「Yes」和「No」按鈕的消息框。第二個參數是顯示在彈出框中間,按鈕上方的文字。第三個參數是視窗的標題。最後,我們使用我們建立的 <tt>KGuiItem yesButton</tt> 來設定「Yes」按鈕的 KGuiItem(一般情況下是)。 | ||
請注意,所有使用者可見的文字都透過了 i18n() | 請注意,所有使用者可見的文字都透過了 i18n() 函式,這對翻譯 UI 是必要的。更多本地化資訊可以在[[Development/Tutorials/Localization/i18n|本地化教學]]找到 。 | ||
程式碼相關的工作我們已經全部完成了。現在我們要建構並嘗試運行它。 | 程式碼相關的工作我們已經全部完成了。現在我們要建構並嘗試運行它。 | ||
== 建構 == | == 建構 == | ||
你需要[[Development/Tutorials/ | 你需要[[Development/Tutorials/CMake_(zh_TW)|使用 CMake]] 作為您的建構環境。你要提供一個 CMakeLists.txt 檔案,CMake 會使用這個檔案來生成所有的 Makefile 。 | ||
=== CMakeLists.txt === | === CMakeLists.txt === | ||
在 main.cpp | 在 main.cpp 所在的目錄中建立一個名為 CMakeLists.txt 的檔案,其內容如下: | ||
< | |||
<syntaxhighlight lang="cmake"> | |||
project (tutorial1) | project (tutorial1) | ||
find_package(KDE4 REQUIRED) | find_package(KDE4 REQUIRED) | ||
Line 100: | Line 101: | ||
target_link_libraries(tutorial1 ${KDE4_KDEUI_LIBS}) | target_link_libraries(tutorial1 ${KDE4_KDEUI_LIBS}) | ||
install(TARGETS tutorial1 ${INSTALL_TARGETS_DEFAULT_ARGS}) | install(TARGETS tutorial1 ${INSTALL_TARGETS_DEFAULT_ARGS}) | ||
</ | </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> ,將我們的可執行程式連結到 KDE 4 kdeui 函式庫。<tt>install</tt> 開頭的這行會寫入預設的「安裝」目標到 Makefile。 | |||
=== Make 與執行 === | === Make 與執行 === | ||
Line 113: | Line 115: | ||
mkdir build && cd build | mkdir build && cd build | ||
cmake .. # | cmake .. # 注意有兩個點。這不是省略,而是代表「父目錄」。 | ||
make | make | ||
或則,如果你已經按照[[Getting_Started/Build/KDE4|建構 | 或則,如果你已經按照[[Getting_Started/Build/KDE4 (zh TW)|建構 KDE4]] 中的說明設定好你的環境,可以使用下面的指令來編譯程式碼: | ||
cmakekde | cmakekde | ||
然後使用下面的指令來啟動它: | 然後使用下面的指令來啟動它: | ||
Line 124: | Line 126: | ||
==繼續前進== | ==繼續前進== | ||
現在你可以開始學習下一課:[[Development/Tutorials/Using_KXmlGuiWindow (zh TW)|使用 KXmlGuiWindow]]。 | 現在你可以開始學習下一課:[[Development/Tutorials/Using_KXmlGuiWindow (zh TW)|使用 KXmlGuiWindow]]。 | ||
[[Category:C++]] | [[Category:C++]] |
Latest revision as of 13:22, 23 June 2013
Template:I18n/Language Navigation Bar (zh TW) Template:TutorialBrowser (zh TW)
摘要
你的第一個程式將會用一句 「Hello World」 來向這個世界問好。為了實現它,我們將使用 KMessageBox,並自定其中的一個按鈕。
程式碼
我們需要的全部程式碼都放在一個 main.cpp 檔案中。使用下列程式碼建立立檔案:
#include <KApplication>
#include <KAboutData>
#include <KCmdLineArgs>
#include <KMessageBox>
#include <KLocale>
int main (int argc, char *argv[])
{
KAboutData aboutData(
// 內部使用的程式名稱。
"tutorial1",
// 消息登記名稱
// 如果為 null,則使用程式名稱。
0,
// 顯示使用的程式名稱字串。
ki18n("Tutorial 1"),
// 程式版本號字串。
"1.0",
// 對程式功能的簡要描述。
ki18n("Displays a KMessageBox popup"),
// 程式碼發布授權
KAboutData::License_GPL,
// 版權聲明
ki18n("(c) 2007"),
// 顯示在關於對話框的選擇性文字。
// 可以包含任意要求的資訊。
ki18n("Some text..."),
// 程式首頁字串。
"http://tutorial.com/",
// 回報 bug 的 email 地址
"[email protected]");
KCmdLineArgs::init( argc, argv, &aboutData );
KApplication app;
KGuiItem yesButton( i18n( "Hello" ), QString(),
i18n( "This is a tooltip" ),
i18n( "This is a WhatsThis help text." ) );
KMessageBox::questionYesNo( 0, i18n( "Hello World" ),
i18n( "Hello" ), yesButton );
return 0;
}
我們在此程式中遇到的第一個 KDE 類別是 KAboutData 。這個類別用來儲存各種的程式相關資訊,如功能的簡單描述、作者或版權資訊等。幾乎所有的 KDE 應用程式都會使用該類別。
然後我們遇到了 KCmdLineArgs。這個類別可以用來處理命令列開關。例如,開啟程式並讀入一個特定的檔案。在本例中,我們只使用之前建立的KAboutData物件來初始化它,因此我們可以使用 --version 或 --author 開關。
接下來我們建立 KApplication 和 KLocale 物件。這在每個程式中都必須實作,因為KDE中的很多功能都需要他們,如i18n等。
現在我們已經完成了全部必須的 KDE 設定,接下來就可以讓我們的程式做一些有趣的事情了。我們將要建立一個彈出框,並將自定其中的一個按鈕。為了實現自定化,我們需要使用 KGuiItem 物件。KGuiItem 建構子的第一個參數是要顯示在 item(在本例中是一個按鈕)中的文字。下一個參數讓我們可以為該按鈕設定一個圖示,但這裡我們並不需要圖示,所以只需要傳遞 QString() 給它就行。最後,我們設定工具提示(tooltip)(當游標放在一個 item 上顯示的文字)和「這是什麼?」(用滑鼠右鍵按下 item 或按下 Shift+F1 時顯示)文字。
現在我們有了 item,可以開始建立我們的彈出框了。在這裡我們呼叫 KMessageBox::questionYesNo() 函式,它在預設的條件下會建立一個有「Yes」和「No」按鈕的消息框。第二個參數是顯示在彈出框中間,按鈕上方的文字。第三個參數是視窗的標題。最後,我們使用我們建立的 KGuiItem yesButton 來設定「Yes」按鈕的 KGuiItem(一般情況下是)。
請注意,所有使用者可見的文字都透過了 i18n() 函式,這對翻譯 UI 是必要的。更多本地化資訊可以在本地化教學找到 。
程式碼相關的工作我們已經全部完成了。現在我們要建構並嘗試運行它。
建構
你需要使用 CMake 作為您的建構環境。你要提供一個 CMakeLists.txt 檔案,CMake 會使用這個檔案來生成所有的 Makefile 。
CMakeLists.txt
在 main.cpp 所在的目錄中建立一個名為 CMakeLists.txt 的檔案,其內容如下:
project (tutorial1)
find_package(KDE4 REQUIRED)
include (KDE4Defaults)
include_directories(${KDE4_INCLUDES})
set(tutorial1_SRCS main.cpp)
kde4_add_executable(tutorial1 ${tutorial1_SRCS})
target_link_libraries(tutorial1 ${KDE4_KDEUI_LIBS})
install(TARGETS tutorial1 ${INSTALL_TARGETS_DEFAULT_ARGS})
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 ,將我們的可執行程式連結到 KDE 4 kdeui 函式庫。install 開頭的這行會寫入預設的「安裝」目標到 Makefile。
Make 與執行
您可以手動使用 CMake 和 make:
mkdir build && cd build cmake .. # 注意有兩個點。這不是省略,而是代表「父目錄」。 make
或則,如果你已經按照建構 KDE4 中的說明設定好你的環境,可以使用下面的指令來編譯程式碼:
cmakekde
然後使用下面的指令來啟動它:
./tutorial1
繼續前進
現在你可以開始學習下一課:使用 KXmlGuiWindow。