Archive:Development/Tutorials/Using KXmlGuiWindow (zh TW): Difference between revisions

From KDE TechBase
No edit summary
 
(8 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Template:I18n/Language Navigation Bar|Development/Tutorials/Using_KXmlGuiWindow}}
{{Template:I18n/Language Navigation Bar_(zh_TW)|Development/Tutorials/Using_KXmlGuiWindow}}
{{TutorialBrowser (zh TW)|
{{TutorialBrowser (zh TW)|


Line 8: Line 8:
pre=[[Development/Tutorials/First_program (zh TW)|教學1 - Hello World]]|
pre=[[Development/Tutorials/First_program (zh TW)|教學1 - Hello World]]|


next=[[Development/Tutorials/Using_KActions|教學3 - KActions 和 XMLGUI]]|  
next=[[Development/Tutorials/Using_KActions (zh TW)|教學3 - KActions 和 XMLGUI]]|  


reading={{class|KXmlGuiWindow}}
reading={{class|KXmlGuiWindow}}
Line 14: Line 14:


==摘要==
==摘要==
本教學承接上一講[[Development/Tutorials/First_program (zh TW)|第一個程式教學]],進一步介紹 {{class|KXmlGuiWindow}} 類別的使用。
本教學承接上一講[[Development/Tutorials/First_program (zh TW)|第一支程式教學]],進一步介紹 {{class|KXmlGuiWindow}} 類別的使用。


在上一講中,程式只是彈出了一個對話框。在本講中,我們要讓我們的程式具備更加實際功能。
在上一講中,程式只是彈出了一個對話框。在本講中,我們要讓我們的程式具備更加實際功能。
Line 22: Line 22:
==KXmlGuiWindow==
==KXmlGuiWindow==


{{class|KXmlGuiWindow}} 提供完整的主視窗檢視包含選單列、工具列、狀態列和中央的主區域。大多數KDE應用程式會衍生此類別,因為它提供了一個簡單的方法,透過XML檔案定義選單和工具列的排版(這種技術稱為XMLGUI)。雖然我們不會使用 XMLGUI 在''本''教學中,但將來我們會使用到它。
{{class|KXmlGuiWindow}} 提供完整的主視窗檢視包含選單列、工具列、狀態列和中央的主區域。大多數 KDE 應用程式會衍生此類別,因為它提供了一個簡單的方法,透過 XML 檔案定義選單和工具列的排版(這種技術稱為XMLGUI)。雖然我們不會使用 XMLGUI 在''本''教學中,但下一課我們會用到它。


為了使用 KXmlGuiWindow,我們必須對它子類別化。因此,我們創建兩個檔案, <tt>mainwindow.cpp</tt> 和 <tt>mainwindow.h</tt> 放置我們的程式碼。
為了使用 KXmlGuiWindow,我們必須對它子類別化。因此,我們建立兩個檔案, <tt>mainwindow.cpp</tt> 和 <tt>mainwindow.h</tt> 放置我們的程式碼。


===mainwindow.h===
===mainwindow.h===
<code cppqt n>
<syntaxhighlight lang="cpp-qt" line>
#ifndef MAINWINDOW_H
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#define MAINWINDOW_H
Line 44: Line 44:


#endif
#endif
</code>
</syntaxhighlight>
First we Subclass KXmlGuiWindow on line 7 with <tt>class MainWindow : public KXmlGuiWindow</tt>.
首先,我們在第7行宣告 KXmlGuiWindow 的子類別:<tt>class MainWindow : public KXmlGuiWindow</tt>


Then we declare the constructor with <tt>MainWindow(QWidget *parent=0);</tt>.
接下來我們宣告一個建構子 <tt>MainWindow(QWidget *parent=0);</tt>


And finally we declare a pointer to the object that will make up the bulk of our program. {{class|KTextEdit}} is a generic richtext editor with some KDE niceties like cursor auto-hiding.
最後我們宣告了一個指標,它指向構成我們程式主體的物件。{{class|KTextEdit}} 是一個通用的文字編輯器,並具有很多 KDE 特有的優點,如游標自動隱藏等。


===mainwindow.cpp===
===mainwindow.cpp===
<code cppqt n>
<syntaxhighlight lang="cpp-qt" line>
#include "mainwindow.h"
#include "mainwindow.h"


Line 61: Line 61:
   setupGUI();
   setupGUI();
}
}
</code>
</syntaxhighlight>
First, of course, on line 1 we have to include the header file containing the class declaration.
首先,很自然的,我們在第一行含入(include)有類別宣告的標頭檔(header file)。


On line 5, we initialise our text editor with an object. Then on line 6 we use KXmlGuiWindow's built-in setCentralWidget() function which tells the KXmlGuiWindow what should appear in the central section of the window.
在第五行,我們初始化了文字編輯器物件。接下來在第6行,我們使用 KXmlGuiWindow 內建的 setCentralWidget() 函式,它告訴 KXmlGuiWindow 什麼東西應該顯示在視窗的中央。


Finally, KXmlGuiWindow::setupGUI() is called which does a lot of behind-the-scenes stuff and creates the default menu bars (Settings, Help).
最後,呼叫 KXmlGuiWindow::setupGUI(),它會替我們完成很多底層的工作,並建立一個預設的選單列(包含 Settings 和 Help)。


==回到 main.cpp==
==回到 main.cpp==
In order to actually run this window, we need to add a few lines in main.cpp:
為了能夠實際運行前面定義的視窗,我們還需要在 main.cpp 中增加幾行:
===main.cpp===
===main.cpp===
<code cppqt n>
<syntaxhighlight lang="cpp-qt" line>
#include <KApplication>
#include <KApplication>
#include <KAboutData>
#include <KAboutData>
Line 95: Line 95:
   return app.exec();
   return app.exec();
}
}
</code>
</syntaxhighlight>
The only new lines here (compared to Tutorial 1) are 5, 18 and 19. On line 18, we create our MainWindow object and then on line 19, we display it.
與教學1相比,唯一新增的就是第6、18和19行。在第18行,我們生成了一個 MainWindow 物件實例,然後在第19行顯示它。


==CMake==
==CMake==
The best way to build the program is to use CMake. All that's changed since tutorial 1 is that <tt>mainwindow.cpp</tt> has been added to the sources list and any <tt>tutorial1</tt> has become <tt>tutorial2</tt>.
建構此程式的最好方法是使用 CMake。與教學1相比,改變包含增加 <tt>mainwindow.cpp</tt> 到原始碼列表中,以及 <tt>tutorial1</tt> 變成了 <tt>tutorial2</tt>
===CMakeLists.txt===
===CMakeLists.txt===
<code ini n>
<syntaxhighlight lang="make" line>
project (tutorial2)
project (tutorial2)


Line 114: Line 114:
kde4_add_executable(tutorial2 ${tutorial2_SRCS})
kde4_add_executable(tutorial2 ${tutorial2_SRCS})
target_link_libraries(tutorial2 ${KDE4_KDEUI_LIBS})
target_link_libraries(tutorial2 ${KDE4_KDEUI_LIBS})
</code>
</syntaxhighlight>


===Compile it===
===編譯===
To compile, link and run it, use:
使用下面的指令編譯、連結以及運行程式:
  mkdir build && cd build
  mkdir build && cd build
  cmake ..
  cmake ..
Line 124: Line 124:


==繼續前進==
==繼續前進==
現在你可以開始學習下一課:[[Development/Tutorials/Using_KActions|使用 KActions]]。
現在你可以開始學習下一課:[[Development/Tutorials/Using_KActions (zh TW)|使用 KActions]]。


[[Category:C++]]
[[Category:C++]]

Latest revision as of 13:25, 23 June 2013

Template:I18n/Language Navigation Bar (zh TW) Template:TutorialBrowser (zh TW)

摘要

本教學承接上一講第一支程式教學,進一步介紹 KXmlGuiWindow 類別的使用。

在上一講中,程式只是彈出了一個對話框。在本講中,我們要讓我們的程式具備更加實際功能。

KXmlGuiWindow

KXmlGuiWindow 提供完整的主視窗檢視包含選單列、工具列、狀態列和中央的主區域。大多數 KDE 應用程式會衍生此類別,因為它提供了一個簡單的方法,透過 XML 檔案定義選單和工具列的排版(這種技術稱為XMLGUI)。雖然我們不會使用 XMLGUI 在教學中,但下一課我們會用到它。

為了使用 KXmlGuiWindow,我們必須對它子類別化。因此,我們建立兩個檔案, mainwindow.cppmainwindow.h 放置我們的程式碼。

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <KXmlGuiWindow>
#include <KTextEdit>

class MainWindow : public KXmlGuiWindow
{
  public:
    MainWindow(QWidget *parent=0);
		
  private:
    KTextEdit* textArea;
};

#endif

首先,我們在第7行宣告 KXmlGuiWindow 的子類別:class MainWindow : public KXmlGuiWindow

接下來我們宣告一個建構子 MainWindow(QWidget *parent=0);

最後我們宣告了一個指標,它指向構成我們程式主體的物件。KTextEdit 是一個通用的文字編輯器,並具有很多 KDE 特有的優點,如游標自動隱藏等。

mainwindow.cpp

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent)
{
  textArea = new KTextEdit();
  setCentralWidget(textArea);
  setupGUI();
}

首先,很自然的,我們在第一行含入(include)有類別宣告的標頭檔(header file)。

在第五行,我們初始化了文字編輯器物件。接下來在第6行,我們使用 KXmlGuiWindow 內建的 setCentralWidget() 函式,它告訴 KXmlGuiWindow 什麼東西應該顯示在視窗的中央。

最後,呼叫 KXmlGuiWindow::setupGUI(),它會替我們完成很多底層的工作,並建立一個預設的選單列(包含 Settings 和 Help)。

回到 main.cpp

為了能夠實際運行前面定義的視窗,我們還需要在 main.cpp 中增加幾行:

main.cpp

#include <KApplication>
#include <KAboutData>
#include <KCmdLineArgs>
#include <KLocale>

#include "mainwindow.h"

int main (int argc, char *argv[])
{
  KAboutData aboutData( "tutorial2", 0,
      ki18n("Tutorial 2"), "1.0",
      ki18n("A simple text area"),
      KAboutData::License_GPL,
      ki18n("Copyright (c) 2007 Developer") );
  KCmdLineArgs::init( argc, argv, &aboutData );
  
  KApplication app;
 
  MainWindow* window = new MainWindow();
  window->show();

  return app.exec();
}

與教學1相比,唯一新增的就是第6、18和19行。在第18行,我們生成了一個 MainWindow 物件實例,然後在第19行顯示它。

CMake

建構此程式的最好方法是使用 CMake。與教學1相比,改變包含增加 mainwindow.cpp 到原始碼列表中,以及 tutorial1 變成了 tutorial2

CMakeLists.txt

project (tutorial2)

find_package(KDE4 REQUIRED)
include_directories(${KDE4_INCLUDES})

set(tutorial2_SRCS 
  main.cpp
  mainwindow.cpp
)

kde4_add_executable(tutorial2 ${tutorial2_SRCS})
target_link_libraries(tutorial2 ${KDE4_KDEUI_LIBS})

編譯

使用下面的指令編譯、連結以及運行程式:

mkdir build && cd build
cmake ..
make
./tutorial2

繼續前進

現在你可以開始學習下一課:使用 KActions