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