QT5布局管理
分割窗口 QSplitter类
分割窗口 QSplitter类在应用程序中经常用到,它可以灵活分布窗口的布局,经常用 在类似文件资源管理器的窗口设计中。
示例代码:
#include <QApplication> #include <QTextEdit> #include <QPixmap> #include <QSplitter> int main(int argc, char *argv[]) { QApplication a(argc, argv); QFont font("ZYSongl8030",12); a.setFont (font); //主分割窗口 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 *textBottom =new QTextEdit(QObject::tr("Bottom Widget") , splitterRight); textBottom->setAlignment(Qt::AlignCenter); splitterMain->setStretchFactor (1,1); splitterMain->setWindowTitle(QObject::tr("Splitter")); splitterMain->show(); // MainWindow w; // w.show(); return a.exec (); }
效果展示:
停靠窗口 QDockWidget类
停靠窗口 QDockWidget类也是应用程序中经常用到的。
示例代码:
#include <QApplication> #include <QMainWindow> #include <QDockWidget> #include <QTextEdit> int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow *window = new QMainWindow(); window->setWindowTitle (( "DockWindows") ) ;//设置主窗口 的标题栏文字 QTextEdit *te=new QTextEdit (this) ;//定义一个 QTextEdit 对象作为主窗口 te->setText(tr("Main Window")); //停靠窗口 1 QDockWidget *dock=new QDockWidget(("DockWindowl"),window); dock->setFeatures(QDockWidget::DockWidgetMovable); //可移动 dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea); QTextEdit *tel =new QTextEdit(); tel->setText(("Windowl,The dock widget can be moved between docks by the usern n ")); dock->setWidget(tel); window->addDockWidget(Qt::RightDockWidgetArea,dock); //停靠窗口 2 dock=new QDockWidget(("DockWindow2"),window); dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable) ; //可关闭、可浮动 QTextEdit *te2 =new QTextEdit(); te2->setText(("Window2,The dock widget can be detached from the main window,""and floated as an independent window, and can be closed")); dock->setWidget(te2); window->addDockWidget(Qt::RightDockWidgetArea,dock); //停靠窗口 3 dock=new QDockWidget (("DockWinciow3") , window); dock->setFeatures (QDockWidget::AllDockWidgetFeatures) ;//全部特性 QTextEdit *te3 =new QTextEdit(); te3->setText (( "Window3, The dock widget can be closed, moved, and floated")); dock->setWidget(te3); window->addDockWidget(Qt::RightDockWidgetArea,dock); window->show(); return a.exec (); }
效果展示:
堆栈窗体QStackedWidget类
堆栈窗体QStackedWidget类也是应用程序中经常用到的。在实际应用中,堆 栈窗体多与列表框QListWidget及下拉列表框QComboBox配合使用。
示例代码:
#include <QApplication> #include <QMainWindow> #include <QComboBox> #include <QStackedWidget> #include <QPushButton> #include <QVBoxLayout> #include <iostream> int main(int argc, char *argv[]) { QApplication a(argc, argv); QMainWindow *window = new QMainWindow(); QWidget *widget = new QWidget(); QVBoxLayout *layout = new QVBoxLayout(); widget->setLayout(layout); window->setCentralWidget(widget); QComboBox *box = new QComboBox(); QStringList list{"1","2","3"}; box->addItems(list); QStackedWidget *sw = new QStackedWidget(); QPushButton *btn = new QPushButton("1"); QPushButton *btn1 = new QPushButton("2"); QPushButton *btn2 = new QPushButton("3"); sw->addWidget(btn); sw->addWidget(btn1); sw->addWidget(btn2); layout->addWidget(box); layout->addWidget(sw); QObject::connect(box, static_cast<void(QComboBox::*)(int)>(&QComboBox::currentIndexChanged), [sw](int index){ sw->setCurrentIndex(index); }); window->show(); return a.exec (); }
效果展示:
基本布局(QLayout)
Qt 提供了 QHBoxLayout 类、QVBoxLayout 类及 QGridLayout 类等的基本布局 管理,分别是水平排列布局、垂直排列布局和网格排列布局。它们之间的继承关系
布局中常用的方法有addWidget()和addLayout ()。
addWidget()方法用于向布局中加入需要布局的控件,add Widget()的函数原型
void addWidget(QWidget *widget,int fromRow,int fromColumn,int rowSpanfint columnspan,Qt::Alignment alignment=0 )
addLayout ()方法用于向布局中加入需要布局的子布局,addLayout ()的函数原 型如下:
void addLayout (QLayout Payout, //表示需要插入的子布局对象 int row. //插入的起始行 int column. //插入的起始列 int rowSpan, //表示占用的行数 int columnSpan, //表示占用的列数 Qt::Alignment alignment=0 //指定对齐方式 )
上述例子中已经使用了部分的Layout代码。此处不再做详细展示了。