Archive:Development/Tutorials/First program (zh TW): Difference between revisions

From KDE TechBase
No edit summary
 
(13 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Template:I18n/Language Navigation Bar|Development/Tutorials/First_program}}
{{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/products/qt/ Qt]、[[Getting_Started/Build/KDE4|KDE 4 開發環境]]|
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|教學 2 - KXmlGuiWindow]]|  
next=[[Development/Tutorials/Using_KXmlGuiWindow (zh TW)|教學 2 - KXmlGuiWindow]]|  


reading=[[Development/Tutorials/CMake|CMake]]
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/Set_up_KDE_4_for_development#KDevelop|此教學]]以正確設定  KDevelop。你可以先用 KDevelop 打開一個已存在的 KDE 4 應用程式來檢驗設定是否正確。
閱讀[[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> 檔案中。使用下列程式碼建立立檔案:


<code cppqt>
<syntaxhighlight lang="cpp-qt">
#include <KApplication>
#include <KApplication>
#include <KAboutData>
#include <KAboutData>
Line 71: Line 71:
     return 0;
     return 0;
}
}
</code>
</syntaxhighlight>
我們在此程式中遇到的第一個 KDE 類別是 {{class|KAboutData}} 。這個類別用來儲存各種的程式相關資訊,如功能的簡單描述、作者或版權資訊等。幾乎所有的 KDE 應用程式都會使用該類別。
我們在此程式中遇到的第一個 KDE 類別是 {{class|KAboutData}} 。這個類別用來儲存各種的程式相關資訊,如功能的簡單描述、作者或版權資訊等。幾乎所有的 KDE 應用程式都會使用該類別。


然後我們遇到了 {{class|KCmdLineArgs}}。這個類別可以用來處理命令列開關。例如,開啟程式並讀入一個特定的檔案。在本例中,我們只使用之前創建的{{class|KAboutData}}物件來初始化它,因此我們可以使用 <tt>--version</tt> 或 <tt>--author</tt> 開關。
然後我們遇到了 {{class|KCmdLineArgs}}。這個類別可以用來處理命令列開關。例如,開啟程式並讀入一個特定的檔案。在本例中,我們只使用之前建立的{{class|KAboutData}}物件來初始化它,因此我們可以使用 <tt>--version</tt> 或 <tt>--author</tt> 開關。


接下來我們創建 {{class|KApplication}} 和 {{class|KLocale}} 物件。這在每個程式中都必須實作,因為KDE中的很多功能都需要他們,如[[Development/Tutorials/Localization/i18n|i18n]]等。
接下來我們建立 {{class|KApplication}} 和 {{class|KLocale}} 物件。這在每個程式中都必須實作,因為KDE中的很多功能都需要他們,如[[Development/Tutorials/Localization/i18n|i18n]]等。


現在我們已經完成了全部必須的KDE設定,接下來就可以讓我們的程式做一些有趣的事情了。我們將要創建一個彈出框,並將自定其中的一個按鈕。為了實現自定化,我們需要使用 {{class|KGuiItem}} 物件。{{class|KGuiItem}} 建構子的第一個參數是要顯示在 item(在本例中是一個按鈕)中的文字。下一個參數讓我們可以為該按鈕設定一個圖示,但這裡我們並不需要圖示,所以只需要傳遞 <tt>QString()</tt> 給它就行。最後,我們設定工具提示(tooltip)(當游標放在一個 item 上顯示的文字)和「這是什麼?」(用鼠標右擊 item 或按下Shift+F1時顯示)文字。
現在我們已經完成了全部必須的 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(一般情況下是)。
現在我們有了 item,可以開始建立我們的彈出框了。在這裡我們呼叫 <tt>{{class|KMessageBox}}::questionYesNo()</tt> 函式,它在預設的條件下會建立一個有「Yes」和「No」按鈕的消息框。第二個參數是顯示在彈出框中間,按鈕上方的文字。第三個參數是視窗的標題。最後,我們使用我們建立的 <tt>KGuiItem yesButton</tt> 來設定「Yes」按鈕的 KGuiItem(一般情況下是)。


Note that all user-visible text is passed through the i18n() function; this is necessary for the UI to be translatable. More information on localization can be found in the [[Development/Tutorials/Localization/i18n|localization tutorial]].
請注意,所有使用者可見的文字都透過了 i18n() 函式,這對翻譯 UI 是必要的。更多本地化資訊可以在[[Development/Tutorials/Localization/i18n|本地化教學]]找到 。


程式碼相關的工作我們已經全部完成了。現在我們要建構並嘗試運行它。  
程式碼相關的工作我們已經全部完成了。現在我們要建構並嘗試運行它。  


== 建構 ==
== 建構 ==
You want to [[Development/Tutorials/CMake|use CMake]] for your build environment. You provide a file CMakeLists.txt, cmake uses this file to generate all Makefiles out of it.
你需要[[Development/Tutorials/CMake_(zh_TW)|使用 CMake]] 作為您的建構環境。你要提供一個 CMakeLists.txt 檔案,CMake 會使用這個檔案來生成所有的 Makefile 。


=== CMakeLists.txt ===
=== CMakeLists.txt ===
在 main.cpp 所在的目錄中創建一個名為 CMakeLists.txt 的檔案,其內容如下:
在 main.cpp 所在的目錄中建立一個名為 CMakeLists.txt 的檔案,其內容如下:
<code>
 
<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})
</code>
</syntaxhighlight>
The <tt>find_package()</tt> function locates the package that you ask it for (in this case KDE4) and sets some variables describing the location of the package's headers and libraries. In this case we will use the <tt>KDE4_INCLUDES</tt> variable which contains the path to the KDE4 header files.


In order to allow the compiler to find these files, we pass that variable to the <tt>include_directories()</tt> function which adds the KDE4 headers to the header search path.
<tt>find_package()</tt> 函數會定位你所要求的套件(在這裡是 KDE4),並且設定描述套件的函式庫和標頭檔所在路徑的變數。在這裡,我們將使用 <tt>KDE4_INCLUDES</tt> 變數,它包含了KDE4標頭檔所在的路徑。


Next we create a variable called <tt>tutorial1_SRCS</tt> using the <tt>set()</tt> function. In this case we simply set it to the name of our only source file.
為了讓編譯器能找到這些標頭檔,我們將該變數傳遞給 <tt>include_directories()</tt> 函數,它會將KDE4標頭檔列入編譯時的標頭檔搜尋路徑中。


Then we use <tt>kde4_add_executable()</tt> to create an executable called <tt>tutorial1</tt> from the source files listed in our <tt>tutorial1_SRCS</tt> variable. Afterwards, we link our executable to the KDE4 kdeui library using <tt>target_link_libraries()</tt> and the <tt>KDE4_KDEUI_LIBS</tt> variable which was set by the <tt>find_package()</tt> function. The line starting with <tt>install</tt> writes a default "install" target into the Makefile.
接下來我們使用 <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 與執行 ===
You can invoke CMake and make manually:
您可以手動使用 CMake 和 make:


  mkdir build && cd build
  mkdir build && cd build
  cmake .. # 注意有兩個點,這不是省略,而是代表「父目錄」。
  cmake .. # 注意有兩個點。這不是省略,而是代表「父目錄」。
  make
  make


或則,如果你已經按照[[Getting_Started/Build/KDE4|構建 KDE 4]]中的說明設定好你的環境,可以使用下面的指令來編譯程式碼:
或則,如果你已經按照[[Getting_Started/Build/KDE4 (zh TW)|建構 KDE4]] 中的說明設定好你的環境,可以使用下面的指令來編譯程式碼:
 
  cmakekde
  cmakekde


然後使用下面的指令來啟動它:
然後使用下面的指令來啟動它:
Line 124: Line 126:


==繼續前進==
==繼續前進==
 
現在你可以開始學習下一課:[[Development/Tutorials/Using_KXmlGuiWindow (zh TW)|使用 KXmlGuiWindow]]。
現在你可以開始學習下一課[[Development/Tutorials/Using_KXmlGuiWindow|使用 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,並自定其中的一個按鈕。

Template:Tip (zh TW)

Template:Tip (zh TW)

程式碼

我們需要的全部程式碼都放在一個 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 開關。

接下來我們建立 KApplicationKLocale 物件。這在每個程式中都必須實作,因為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