QSplitter分割窗口類


 

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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM