QDocker is a small qt library to dock a widget object to another 'anchor' widget object.
- Uses only QWidget class
- Available for all classes which inherits form QWidget
- Can be used for dynamic allocated and stack objects
Docking all UI elements which are inheriting form QWidget to each other:
- Above
- Below
- Left
- Right
Align the widgets in connection with docking to the following positions:
On docking below/above
- Horizontal:
- Left
- Right
- Center
 
On docking left/right
- Vertical:
- Top
- Bottom
- Center
 
Check if the widgets have the same horizontal or vertical state
Add qdocker.h and qdocker.cpp to your project and #include "qdocker.h"
I also recommend to add the project's license to your source code to  avoid copyright problems.
QDocker qd; // create default QDocker object with docking distance of 20 
QDocker qd(40); // QDocker object has default distance of 40
qd.getDistance(); // get the current distance
qd.setDistance(); // set another default distance
qd.dockBelow(widget1, widget2, qd.AlignLeft); // docks widget1 left-aligned below widget2  
qd.dockAbove(widget1, widget2, qd.AlignRight); // docks widget1 right-aligned above widget2  
qd.dockLeft(widget1, widget2, qd.AlignTop); // docks widget1 left from widget2 (top edge)
qd.dockRight(widget1, widget2, qd.AlignBottom, 30); // docks widget1 right from widget2 (lower edge) with distance 30
// check if the widgets start at the same horizontal X-Position (left aligned)
bool status = qd.isDocked(widget1, widget2, qd.AlignLeft); 
- Adding docking on parent-widget Corner
Example (not implmented yet):
QDocker qd;
// adds the item on the top left corner of its parent widget
qd.dockCorner(ui->itm, Corner.TL(5, 5));#include "testwindow.h"
#include "ui_testwindow.h"
#include "qdocker.h"
#include <QLineEdit>
#include <QLabel>
#include <QMessageBox>
#include <QTextEdit>
#include <QCheckBox>
TestWindow::TestWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::TestWindow)
{
    ui->setupUi(this);
    this->resize(400,400);
    QDocker qd; // QDocker with standard distance of 20
    QLineEdit* le1 = new QLineEdit(ui->centralWidget);
    le1->move(20,30);
    le1->resize(150, 20);
    QLabel* desc = new QLabel(ui->centralWidget);
    desc->resize(200,20);
    desc->setText("UI setup with QDocker:");
    qd.dockAbove(desc, le1, qd.AlignLeft, 10);
    QLineEdit* le2 = new QLineEdit(ui->centralWidget);
    le2->resize(100, 20);
    qd.dockBelow(le2, le1, qd.AlignLeft);
    QLineEdit* le3 = new QLineEdit(ui->centralWidget);
    le3->resize(150,20);
    qd.dockRight(le3, le1, qd.AlignTop);
    QTextEdit* te = new QTextEdit(ui->centralWidget);
    te->resize(200, 200);
    qd.setDistance(40);
    qd.dockBelow(te, le2, qd.AlignLeft);
    QLabel *lbl = new QLabel(ui->centralWidget);
    lbl->resize(100, 20);
    lbl->setText("Example:");
    lbl->setAlignment(Qt::AlignRight);
    qd.setDistance(20);
    qd.dockRight(lbl, te, qd.AlignTop);
    QLineEdit* le4 = new QLineEdit(ui->centralWidget);
    le4->resize(100, 20);
    qd.dockBelow(le4, lbl, qd.AlignRight);
    QCheckBox* cb = new QCheckBox(ui->centralWidget);
    cb->setText("Checkbox:");
    cb->resize(100,20);
    qd.dockRight(cb, te, qd.AlignVCenter);
}- If a new instance of a widget object has not get a value for width/height QDocker has strange behaviors
- to much values that I have not used
- HorizontalPos and VerticalPos in QDocker class capsules it better for the situtation
- incorrect input can be checked by IDE linters
- to keep the Qt coding standards as good as possible the alignment flags have the same name as in Qt::AlignmentFlag
LGPL
For commecial use and incompatible open-source licenses I recommend to use the library only with dynamic linking.
