布局管理
分割窗口QSplitter类
QSplitter *splitterMain = new QSplitter(Qt::Horizontal,0);
QTextEdit *textLeft = new QTextEdit(QObject::tr("Left Widget"),splitterMain);
QTextEdit *textRight = new QTextEdit(QObject::tr("Right Widget"),splitterMain);
其中,QSplitter是用来分割窗口,里面的参数Qt::Horizontal表示竖着切,第2和3行是给切开的两个窗口命名:
如果想再切,只需要改变QSplitter的对象:
QSplitter *splitterRight = new QSplitter(Qt::Vertical,splitterMain);
Qt::Vertical表示横着切,切割的结果如图:
具体代码如下:
QSplitter *splitterMain = new QSplitter(Qt::Horizontal,0);
QTextEdit *textLeft = new QTextEdit(QObject::tr("Left Widget"),splitterMain);
textLeft->setAlignment(Qt::AlignCenter);
QSplitter *splitterRight = new QSplitter(Qt::Vertical,splitterMain);
splitterRight->setOpaqueResize(false);
QTextEdit *textUp = new QTextEdit(QObject::tr("Top Widget"),splitterRight);
textUp->setAlignment(Qt::AlignCenter);
QTextEdit *textBottomtop = new QTextEdit(QObject::tr("Bootomtop Widget"));
textBottomtop->setAlignment(Qt::AlignCenter);
splitterRight->addWidget(textBottomtop);
停靠窗口QDockWidget类
QDockWidget类可以令子窗口停靠,拖动。
setWindowTitle(tr("DockWindows"));
QTextEdit *te=new QTextEdit(this);
te->setText(tr("Main window"));
te->setAlignment(Qt::AlignCenter);
setCentralWidget(te);
QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this);
dock->setFeatures(QDockWidget::DockWidgetMovable);
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
QTextEdit *tel = new QTextEdit();
tel->setText(tr("Window1,The dock"));
dock->setWidget(tel);
addDockWidget(Qt::RightDockWidgetArea,dock);
- 创建QDockWidget对象的停靠窗体
- 设置窗体属性,通常setFeatures()和setAllowedArea()
- 新建一个要插入停靠窗体的控件,有QListWidget和QTextEdit
- 将控件插入停靠窗体,调用QDockWidget的setWidget()方法
- 使用addDockWidget()方法在MainWindow中加入次停靠窗体。
不同的窗口类型只是setFeatures的不同。
堆栈窗口QStackedWidget类
堆栈窗口的作用是增加界面显示能力,不同的选项可以对应不同的窗口。
setWindowTitle(tr("StackedWidget"));
list = new QListWidget(this);
list->insertItem(0,tr("Window1"));
list->insertItem(1,tr("Window2"));
list->insertItem(2,tr("Window3"));
label1 = new QLabel(tr("WindowTest1"));
label2 = new QLabel(tr("WindowTest2"));
label3 = new QLabel(tr("WindowTest3"));
stack = new QStackedWidget(this);
stack->addWidget(label1);
stack->addWidget(label2);
stack->addWidget(label3);
不同的list对应不同的窗口。
基本布局QLayout
可以通过UI直接整理布局,不需要太过了解。
综合示例
代码太多,就不附了。