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!
c++ qt qwidget qsplitter
Commentami!