Advanced Docking System for Qt
Go to file
Joel Bodenmann fe64f407c0
Merge pull request #3 from XenotriX/bugfix/cmake_static_lib
Partially reverse previous change
2019-10-22 13:57:56 +02:00
.settings Changes in eclipse project file 2019-07-12 10:51:21 +02:00
demo Fixed broken CMake build 2019-08-29 08:16:19 +02:00
doc Added linux screenshot 2019-05-14 15:42:47 +02:00
example Fixed broken CMake build 2019-08-29 08:16:19 +02:00
src Replace deprecated function call 2019-09-09 14:05:37 +01:00
.appveyor.yml added travis configuration 2019-01-17 09:00:41 +00:00
.cproject Changes in eclipse project file 2019-07-12 10:51:21 +02:00
.gitignore Add .idea folders to .gitignore 2019-07-25 14:24:00 +02:00
.project Implemented proper hiding and showing of dock widgets 2017-03-23 10:23:53 +01:00
.travis.yml Various fixes after code review 2019-01-25 16:28:36 +00:00
ads.pro Fix subdirs handling 2019-01-15 17:17:45 +01:00
CMakeLists.txt Partially reverse previous change 2019-10-22 13:47:07 +01:00
gnu-lgpl-v2.1.md Changed license to LGPL v2.1 2017-06-09 22:04:02 +02:00
LICENSE.md Changed license to LGPL v2.1 2017-06-09 22:04:02 +02:00
README.md Update README.md 2019-08-30 21:15:39 +02:00

Advanced Docking System for Qt

Build Status Build status License: LGPL v2.1

Qt Advanced Docking System lets you create customizable layouts using a full featured window docking system similar to what is found in many popular integrated development environements (IDEs) such as Visual Studio. Everything is implemented with standard Qt functionality without any platform specific code. Basic usage of QWidgets and QLayouts and using basic styles as much as possible.

This work is based on and inspired by the Advanced Docking System for Qt from Manuel Freiholz. I did an almost complete rewrite of his code to improve code quality, readibility and to fix all issues from the issue tracker of his docking system project.

The following video gives a first impression what is possible with the Advanced Docking System for Qt.

Video Advanced Docking

Features

Docking everywhere - no central widget

There is no central widget like in the Qt docking system. You can dock on every border of the main window or you can dock into each dock area - so you are free to dock almost everywhere.

Dropping widgets

Dropping widgets

Docking inside floating windows

There is no difference between the main window and a floating window. Docking into floating windows is supported.

Docking inside floating windows

Docking inside floating windows

Grouped dragging

When dragging the titlebar of a dock, all the tabs that are tabbed with it are going to be dragged. So you can move complete groups of tabbed widgets into a floating widget or from one dock area to another one.

Grouped dragging

Grouped dragging

Perspectives for fast switching of the complete main window layout

A perspective defines the set and layout of dock windows in the main window. You can save the current layout of the dockmanager into a named perspective to make your own custom perspective. Later you can simply select a perspective from the perspective list to quickly switch the complete main window layout.

Perspective

Perspective

Tested Compatible Environments

Windows

Windows 10 Build status

The library was developed on and for Windows. It is used in a commercial Windows application and is therefore constantly tested.

macOS

macOS Build Status

The application can be compiled for macOS. A user reported, that the library works on macOS. If have not tested it.

Linux

Ubuntu Build Status

The application can be compiled for Linux and has been developed and tested with Kubuntu 18.04.

Advanced Docking on Linux

Build

Open the ads.pro with QtCreator and start the build, that's it. You can run the demo project and test it yourself.

Getting started / Example

The following example shows the minimum code required to use the advanced Qt docking system.

MainWindow.h

#include <QMainWindow>
#include "DockManager.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    
    // The main container for docking
    ads::CDockManager* m_DockManager;
};

MainWindow.cpp

#include "MainWindow.h"
#include "ui_MainWindow.h"

#include <QLabel>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    // Create the dock manager. Because the parent parameter is a QMainWindow
    // the dock manager registers itself as the central widget.
    m_DockManager = new ads::CDockManager(this);

    // Create example content label - this can be any application specific
    // widget
    QLabel* l = new QLabel();
    l->setWordWrap(true);
    l->setAlignment(Qt::AlignTop | Qt::AlignLeft);
    l->setText("Lorem ipsum dolor sit amet, consectetuer adipiscing elit. ");

    // Create a dock widget with the title Label 1 and set the created label
    // as the dock widget content
    ads::CDockWidget* DockWidget = new ads::CDockWidget("Label 1");
    DockWidget->setWidget(l);

    // Add the toggleViewAction of the dock widget to the menu to give
    // the user the possibility to show the dock widget if it has been closed
    ui->menuView->addAction(DockWidget->toggleViewAction());

    // Add the dock widget to the top dock widget area
    m_DockManager->addDockWidget(ads::TopDockWidgetArea, DockWidget);
}

MainWindow::~MainWindow()
{
    delete ui;
}

Developers

  • Uwe Kindler, Project Maintainer
  • Manuel Freiholz

License information

License: LGPL v2.1 This project uses the LGPLv2.1 license