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

    From KDE TechBase
    (New page: {{Template:I18n/Language Navigation Bar (zh_CN)|Development/Tutorials/创建主窗口}} {{TutorialBrowser| series=初学者教程| name=创建主窗口| pre=[[Development/Tutorials/Firs...)
     
     
    (8 intermediate revisions by 2 users not shown)
    Line 1: Line 1:
    {{Template:I18n/Language Navigation Bar (zh_CN)|Development/Tutorials/创建主窗口}}
    {{Template:I18n/Language Navigation Bar (zh_CN)|Development/Tutorials/Using KXmlGuiWindow}}
    {{TutorialBrowser|
    {{TutorialBrowser (zh_CN)|


    series=初学者教程|
    series=初学者教程|
    Line 8: Line 8:
    pre=[[Development/Tutorials/First_program (zh_CN)|教程1 - Hello World]]|
    pre=[[Development/Tutorials/First_program (zh_CN)|教程1 - Hello World]]|


    next=[[Development/Tutorials/Using_KActions|教程3 - 使用KActions]]|  
    next=[[Development/Tutorials/Using_KActions (zh_CN)|教程3 - 使用KActions]]|  


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


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


    #endif
    #endif
    </code>
    </syntaxhighlight>
    首先,我们在第7行声明了KXmlGuiWindow的一个派生类:<tt>class MainWindow : public KXmlGuiWindow</tt>.
    首先,我们在第7行声明了KXmlGuiWindow的一个派生类:<tt>class MainWindow : public KXmlGuiWindow</tt>.


    Line 50: Line 50:


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


    Line 59: Line 59:
       setupGUI();
       setupGUI();
    }
    }
    </code>
    </syntaxhighlight>
    首先,很自然的,我们在第一行首先声明包含了含有类声明的头文件。
    首先,很自然的,我们在第一行首先声明包含了含有类声明的头文件。


    Line 66: Line 66:
    最终, <tt>KXmlGuiWindow::setupGUI()</tt>被调用,它会替我们完成很多底层的工作,并创建一个缺省的菜单(包含“设置”和“帮助”)。
    最终, <tt>KXmlGuiWindow::setupGUI()</tt>被调用,它会替我们完成很多底层的工作,并创建一个缺省的菜单(包含“设置”和“帮助”)。


    ==Back to main.cpp==
    ==回到main.cpp==
    为了能够实际运行前面定义的窗口, 我们还需要在<tt>main.cpp</tt>中增加一些代码:
    为了能够实际运行前面定义的窗口, 我们还需要在<tt>main.cpp</tt>中增加一些代码:
    ===main.cpp===
    ===main.cpp===
    <code cppqt>
    <syntaxhighlight lang="cpp-qt">
    #include <KApplication>
    #include <KApplication>
    #include <KAboutData>
    #include <KAboutData>
    Line 92: Line 92:
       return app.exec();
       return app.exec();
    }
    }
    </code>
    </syntaxhighlight>
    与第一讲相比,这里唯一新增加的行就是第18和19行。在第18行,我们生成了一个MainWindow类的对象实例,然后在第19行显示它。
    与第一讲相比,这里唯一新增加的行就是第18和19行。在第18行,我们生成了一个MainWindow类的对象实例,然后在第19行显示它。


    Line 98: Line 98:
    构建此程序的最好方法是使用CMake。与第一讲中的CMakeLists.txt文件相比,唯一的改变是<tt>mainwindow.cpp</tt>被增加到了源文件列表中,以及<tt>tutorial1</tt>变成了<tt>tutorial2</tt>。
    构建此程序的最好方法是使用CMake。与第一讲中的CMakeLists.txt文件相比,唯一的改变是<tt>mainwindow.cpp</tt>被增加到了源文件列表中,以及<tt>tutorial1</tt>变成了<tt>tutorial2</tt>。
    ===CMakeLists.txt===
    ===CMakeLists.txt===
    <code ini>
    <syntaxhighlight lang="ini">
    project (tutorial2)
    project (tutorial2)


    Line 111: Line 111:
    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>


    === 编译运行 ===
    === 编译运行 ===
    要编译、链接以及运行该程序,使用下面的命令:
    要编译、链接以及运行该程序,使用下面的命令:
      cmake . && make && ./tutorial2
    mkdir build && cd build
      cmake ..
    make
    ./tutorial2


    == 继续前进 ==
    == 继续前进 ==

    Latest revision as of 12:34, 23 June 2013

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

    摘要

    本教程承接上一讲教程1 - Hello World ,进一步介绍KXmlGuiWindow类的使用。

    在上一讲中,程序只是显示了一个弹出框。在本讲中,我们要让我们的程序具备更加实际功能。

    使用KXmlGuiWindow

    为了得到一个可用的KXmlGuiWindow,我们必须对它子类化。为此,我们创建两个文件:mainwindow.cppmainwindow.h,在其中保存我们的派生类代码。我们的类继承自KXmlGuiWindow,因为它使用XML来定义程序的菜单结构。

    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对象。KTextEdit是一个通用的RichText编辑器,并具有很多KDE特有的优点,如光标自动隐藏等。

    mainwindow.cpp

    #include "mainwindow.h"
    
    MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent)
    {
      textArea = new KTextEdit;
      setCentralWidget(textArea);
      setupGUI();
    }
    

    首先,很自然的,我们在第一行首先声明包含了含有类声明的头文件。

    在第五行,我们初始化了一个KTextEdit对象并将它赋给之前定义的成员变量。接下来在第6行,我们调用KXmlGuiWindow内置的setCentralWidget()函数,它告诉程序应该将什么东西显示在窗口的中央。

    最终, KXmlGuiWindow::setupGUI()被调用,它会替我们完成很多底层的工作,并创建一个缺省的菜单(包含“设置”和“帮助”)。

    回到main.cpp

    为了能够实际运行前面定义的窗口, 我们还需要在main.cpp中增加一些代码:

    main.cpp

    #include <KApplication>
    #include <KAboutData>
    #include <KCmdLineArgs>
    
    #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();
    }
    

    与第一讲相比,这里唯一新增加的行就是第18和19行。在第18行,我们生成了一个MainWindow类的对象实例,然后在第19行显示它。

    CMake

    构建此程序的最好方法是使用CMake。与第一讲中的CMakeLists.txt文件相比,唯一的改变是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.