Usare QSplitter in Qt

Mattepuffo's logo
Usare QSplitter in Qt

Usare QSplitter in Qt

In pratica la mia finestra Qt deve essere divisa in due parti, di cui la sinistra grande il 20% della finestra; la destra il restante.

Mi hanno suggerito di usare il componente QSplitter, ed è quello che ho fatto.

Vediamo il codice di esempio partendo dall'intestazione:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QScreen>
#include <QGuiApplication>
#include <QStyle>
#include <QPushButton>
#include <QSplitter>

#include <QDebug>

class MainWindow : public QMainWindow {
    Q_OBJECT

public:
    MainWindow(QWidget *parent = nullptr);
    virtual ~MainWindow();

private:
    // METODI
    void createMainLayout();
};

#endif // MAINWINDOW_H

Questo invece il file di implementazione:

#include "mainwindow.h"

MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) {
    QScreen *screen = QGuiApplication::primaryScreen();
    QSize size = screen->availableGeometry().size() * 0.8;
    setGeometry(
                QStyle::alignedRect(
                    Qt::LeftToRight,
                    Qt::AlignCenter,
                    size,
                    QGuiApplication::primaryScreen()->availableGeometry()
                    )
                );
    this->setMinimumWidth(800);
    this->setMinimumHeight(600);

    createMainLayout();
}

void MainWindow::createMainLayout() {
    QSplitter *splitter = new QSplitter(Qt::Horizontal);

    QWidget *left = new QWidget;
    left->setGeometry(0, 0, splitter->width() * 0.2, splitter->height());
    QPushButton *a = new QPushButton(left);
    a->setText("SX");

    QWidget *right = new QWidget;
    QPalette pal = palette();
    pal.setColor(QPalette::Background, Qt::white);
    right->setAutoFillBackground(true);
    right->setPalette(pal);
    right->setGeometry(0, 0, splitter->width() * 0.8, splitter->height());
    QPushButton *b = new QPushButton(right);
    b->setText("DX");

    splitter->addWidget(left);
    splitter->addWidget(right);
    this->setCentralWidget(splitter);
}

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

In sostanza impostiamo il QSplitter come il widget principale.

Poi creiamo altri due QWidget generici, impostando la larghezza come il 20 e l'80% dello splitter.

Poi aggiungo due bottoni giusto per visualizzare qualcosa.

Enjoy!


Condividi

Commentami!