Development/Tutorials/Using KXmlGuiWindow: Difference between revisions

From KDE TechBase
m (→‎Kompile it: Spelling)
(Replaced content with "This page was moved [https://develop.kde.org/docs/getting-started/main_window/ here]")
Tag: Replaced
 
(57 intermediate revisions by 17 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. Our class inherits from KXmlGuiWindow because it uses XML e.g. to define the application's menu structure.
 
===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>
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>
 
===Compile it===
To compile, link and run it, use:
cmake . && make && ./tutorial2
 
==Moving On==
Now you can move on to [[Development/Tutorials/Programming_Tutorial_KDE_4/Using_KActions|using KActions]].
 
[[Category:C++]]

Latest revision as of 14:32, 8 September 2020

This page was moved here