| 
				     | 
				
| (62 intermediate revisions by 18 users not shown) | 
| Line 1: | 
Line 1: | 
 | {{TutorialBrowser|
  |  | This page was moved [https://develop.kde.org/docs/getting-started/main_window/ here]  | 
 |    |  | 
 | series=Beginner Tutorial|
  |  | 
 |    |  | 
 | name=How To Use KMainWindow|
  |  | 
 |    |  | 
 | pre=[[Development/Tutorials/Programming_Tutorial_KDE_4/First_program|Tutorial 1 - Hello World]]|
  |  | 
 |    |  | 
 | next=[[Development/Tutorials/Programming_Tutorial_KDE_4/Using_KActions|Tutorial 3 - KActions and XmlGui]]| 
  |  | 
 |    |  | 
 | reading={{class|KMainWindow}}
  |  | 
 | }}
  |  | 
 |    |  | 
 | ==Abstract==
  |  | 
 | This tutorial carries on from [[Development/Tutorials/Programming_Tutorial_KDE_4/First_program|First Program Tutorial]] and will introduce the {{class|KXmlGuiWindow}} class.  |  | 
 |    |  | 
 | In the previous tutorial, the program caused a dialog box to pop up but we're going to take steps towards a functioning application.
  |  | 
 |    |  | 
 | [[image:introtokdetutorial2.png|frame|center]]  |  | 
 |    |  | 
 | ==Using KXmlGuiWindow==
  |  | 
 |    |  | 
 | In order to have a useful KXmlGuiWindow, we must subclass it. So we create two files, a <tt>mainwindow.cpp</tt> and a <tt>mainwindow.h</tt> which will contain our code.
  |  | 
 |    |  | 
 | ===mainwindow.h===
  |  | 
 | <code cppqt>
  |  | 
 | #ifndef MAINWINDOW_H
  |  | 
 | #define MAINWINDOW_H
  |  | 
 |    |  | 
 | #include <KXmlGuiWindow>
  |  | 
 | #include <KTextEdit>
  |  | 
 |    |  | 
 | class MainWindow : public KXmlGuiWindow
  |  | 
 | {
  |  | 
 |   public:
  |  | 
 |     MainWindow(QWidget *parent=0);
  |  | 
 | 		
  |  | 
 |   private:
  |  | 
 |     KTextEdit* textArea;
  |  | 
 | };
  |  | 
 |    |  | 
 | #endif
  |  | 
 | </code>
  |  | 
 | First we Subclass KXmlGuiWindow on line 7 with with <tt>class MainWindow : public KXmlGuiWindow</tt>.
  |  | 
 |    |  | 
 | Then we declare the constructor with <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.
  |  | 
 |    |  | 
 | ===mainwindow.cpp===
  |  | 
 | <code cppqt>
  |  | 
 | #include "mainwindow.h"
  |  | 
 |    |  | 
 | MainWindow::MainWindow(QWidget *parent) : KXmlGuiWindow(parent)
  |  | 
 | {
  |  | 
 |   textArea = new KTextEdit;
  |  | 
 |   setCentralWidget(textArea);
  |  | 
 |   setupGUI();
  |  | 
 | }
  |  | 
 | </code>
  |  | 
 | First, of course, on line 1 we have to include the header file containing the class declaration.
  |  | 
 |    |  | 
 | On line 5, we initialise our text editor with an object. Then on line 6 we use the built-in setCentralWidget() function which tells the KXmlGuiWindow what should appear in the central section of the window.
  |  | 
 |    |  | 
 | Finally, KXmlGuiWindow::setupGUI() is called which does a lot of behind-the-scenes stuff and creates the default menu bars (Settings, Help).
  |  | 
 |    |  | 
 | ==Back to main.cpp==
  |  | 
 | In order to actually run this window, we need to add a few lines in main.cpp:
  |  | 
 | ===main.cpp===
  |  | 
 | <code cppqt>
  |  | 
 | #include <KApplication>
  |  | 
 | #include <KAboutData>
  |  | 
 | #include <KCmdLineArgs>
  |  | 
 |    |  | 
 | #include "mainwindow.h"
  |  | 
 |    |  | 
 | int main (int argc, char *argv[])
  |  | 
 | {
  |  | 
 |   KAboutData aboutData( "tutorial2", 
  |  | 
 |       "Tutorial2", "1.0", "A simple text area",
  |  | 
 |       KAboutData::License_GPL, "(c) 2006" );
  |  | 
 |   KCmdLineArgs::init( argc, argv, &aboutData );
  |  | 
 |   
  |  | 
 |   KApplication app;
  |  | 
 |  
  |  | 
 |   MainWindow* window = new MainWindow();
  |  | 
 |   window->show();
  |  | 
 |    |  | 
 |   return app.exec();
  |  | 
 | }
  |  | 
 | </code>
  |  | 
 | The only new lines here (compared to Tutorial 1) are 16 and 17. On line 16, we create our MainWindow object and then on line 17, we display it.
  |  | 
 |    |  | 
 | ==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>.
  |  | 
 | ===CMakeLists.txt===
  |  | 
 | <code ini n>
  |  | 
 | 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})
  |  | 
 | </code>
  |  | 
 |    |  | 
 | ==Moving On==
  |  | 
 | Now you can move on to [[Development/Tutorials/Programming_Tutorial_KDE_4/Using_KActions|using KActions]].
  |  | 
 |    |  | 
 | [[Category:C++]]
  |  |