QSplitter繼承自QFrame,但是無法在ui設計師界面直接拖出來,只能用代碼來寫。
但是我個人喜歡用設計師來拖放控件,所見即所得,不喜歡用代碼來寫界面,那么該怎么用設計師界面來設計分割器窗口呢?
我找了一個笨方法,原理步驟是這樣的:
1、在打算用QSplitter的地方,先用任意一個容器類控件(QFrame、QWidget、QGroupBox等都可以)在ui中把地方占下;
2、把打算要顯示在QSplitter中的各個控件都在這個臨時容器控件中畫好;
3、把這個臨時容器放在一個layout(水平、垂直、網格均可)布局中。
4、在QMainWindow的構造函數中,用QLayout::replaceWidget(QWidget *from, QWidget *to)把臨時控件給換成QSplitter
5、把臨時容器控件中畫好的各個控件都轉到QSplitter里面來
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); QSplitter * mainSplitter = new QSplitter(Qt::Horizontal);//新建水平分割器 // mainSplitter->resize(600,300);//如果把分割器放置在layout中,那么就無需設置size QString style = QString("QSplitter::handle { background-color: rgb(179, 179, 179); }") //分割線的顏色 + QString("QSplitter {border: 2px solid green}"); mainSplitter->setStyleSheet(style); mainSplitter->setHandleWidth(5);//分割線的寬度 mainSplitter->setChildrenCollapsible(false);//不允許把分割出的子窗口拖小到0,最小值被限定為sizeHint或maxSize/minSize mainSplitter->addWidget(ui->calendarWidget);//把ui中拖出的各個控件拿走,放到分割器里面 mainSplitter->addWidget(ui->textEdit); mainSplitter->addWidget(ui->groupBox); // mainSplitter->addWidget(new QLabel("QLabel"));//也可以在分割器里面新建控件 this->centralWidget()->layout()->replaceWidget(ui->widget_1, mainSplitter);//把ui中拖出的容器QWidget換成分割器 ui->widget_1->hide(); }
既然QSplitter繼承自QFrame,那么他就可以直接作為一個獨立窗口顯示出來,我們仍然可以在ui中畫好它的子控件,然后直接在新建的QSplitter中把畫好的子控件拿進來。
上述代碼的最后兩行是把QSplitter替換進MainWindow的布局中的,我們把這兩行注釋掉,改為:
mainSplitter->show();
然后運行,結果如下,可以看到,QSplitter作為一個獨立窗口顯示出來了
原文鏈接:https://blog.csdn.net/qq_31073871/article/details/90288529
https://blog.csdn.net/mmmmmmyy/article/details/82748278