Development/Tutorials/KDE3/KDockWidget

Dock Widget Tutorial

This tutorial shows examples on how to create docking widgets that dock to your main application.

The first confusing part about making docking windows is that you need to subclass KDockMainWindow rather KMainWindow for KDE application. In addition to converting over to KDockMainWindow, you will need to create two dock widgets in order to notice any docking windows. In the example you will notice that one dock widget becomes the station for the other docking widget.

Note: If you find this explanation incorrect please let me know.

Start a new project using kdevelop

1. First start Kdevelop.

2. Select New Project from the project menu

3. Select Simple KDE application located under C++ -> KDE

4. Name the Application tutKDockWidget

5. Copy and paste the following files over tutKDockWidget.cpp and tutKDockWidget.h

//This can be any widget control
QLabel* cw = new QLabel("label1",mainDock,"label1");
mainDock->setWidget( cw);

//This informs how docking will take place
//KDockWidget::DockCorner = dock to all sides
//KDockWidget::DockFullSite = dock to all sides + center
//KDockWidget::DockFullDocking = KDockWidget::DockFullSite
mainDock->setDockSite(KDockWidget::DockFullSite);

//Prevent docking station from being able to dock
mainDock->setEnableDocking(KDockWidget::DockNone);

setView( mainDock);

//this tells the kDockMainWindow what control to use as its master dock control
setMainDockWidget( mainDock);

//Here is really where the window that docks/undocked is defined
KDockWidget* dockLeft;
dockLeft = createDockWidget( "Intially left one", 0, 0L, i18n("The left dockwidget"));

//Again this can be any control
QLabel* aw = new QLabel("label2",dockLeft,"label2");
dockLeft->setWidget( aw);

//Dock the control to the left side with 20 width
dockLeft->manualDock( mainDock,KDockWidget::DockLeft,20);
}

tutKDockWidget::~tutKDockWidget()
{
}

include "tutkdockwidget.moc"

kdockwidget.h

ifndef _TUTKDOCKWIDGET_H_

define _TUTKDOCKWIDGET_H_

ifdef HAVE_CONFIG_H

include <config.h>

endif

include <kdockwidget.h>

//Important: notice that its KDockMainWindow rather than KMainWindow
class tutKDockWidget : public KDockMainWindow
{