Qt中布局管理的使用小結(jié)
1. 五大布局
1.1 QVBoxLayout垂直布局
#include <QApplication> #include <QWidget> #include <QLabel> #include <QVBoxLayout> int main(int argc, char *argv[]) { QApplication a(argc, argv); //MainWindow w; //w.show(); //創(chuàng)建主窗口 QWidget widget; widget.setWindowTitle("QVBoxLayout垂直布局"); //創(chuàng)建垂直布局管理器 QVBoxLayout *layout=new QVBoxLayout; //設(shè)置布局管理器中所有控件從下往上依次排列 layout->setDirection(QBoxLayout::BottomToTop); //連續(xù)創(chuàng)建 3 個(gè)文本框,并設(shè)置它們的背景和字體大小 QLabel lab1("Label1"); lab1.setStyleSheet("QLabel{background:#dddddd;font:20px;}"); lab1.setAlignment(Qt::AlignCenter); QLabel lab2("Label2"); lab2.setStyleSheet("QLabel{background:#cccccc;font:20px;}"); lab2.setAlignment(Qt::AlignCenter); QLabel lab3("Label3"); lab3.setStyleSheet("QLabel{background:#ffffff;font:20px;}"); lab3.setAlignment(Qt::AlignCenter); //將 3 個(gè)文本框和 2 個(gè)空白行添加到管理器中,它們的伸縮系數(shù)比是 2:1:2:3:3 layout->addStretch(2); layout->addWidget(&lab1,1); layout->addWidget(&lab2,2); layout->addWidget(&lab3,3); layout->addStretch(3); //將布局管理器添加到 widget 窗口中 widget.setLayout(layout); widget.show(); return a.exec(); }
1.2 QHBoxLayout水平布局
#include <QApplication> #include <QWidget> #include <QLabel> #include <QHBoxLayout> int main(int argc, char *argv[]) { QApplication a(argc, argv); //創(chuàng)建主窗口 QWidget widget; widget.setWindowTitle("QHBoxLayout水平布局"); //創(chuàng)建水平布局管理器 QHBoxLayout *layout=new QHBoxLayout; //設(shè)置布局管理器中所有控件的布局方向?yàn)閺挠彝笠来闻帕? layout->setDirection(QBoxLayout::RightToLeft); //連續(xù)創(chuàng)建 3 個(gè)文本框,并設(shè)置它們的背景和字體大小 QLabel lab1("Label1"); lab1.setStyleSheet("QLabel{background:#dddddd;font:20px;}"); lab1.setAlignment(Qt::AlignCenter); QLabel lab2("Label2"); lab2.setStyleSheet("QLabel{background:#cccccc;font:20px;}"); lab2.setAlignment(Qt::AlignCenter); QLabel lab3("Label3"); lab3.setStyleSheet("QLabel{background:#ffffff;font:20px;}"); lab3.setAlignment(Qt::AlignCenter); //將 3 個(gè)文本框和 2 個(gè)空白列添加到管理器中,它們的拉伸系數(shù)比是 2:1:2:3:3 layout->addStretch(2); layout->addWidget(&lab1,1); layout->addWidget(&lab2,2); layout->addWidget(&lab3,3); layout->addStretch(3); //將布局管理器添加到 widget 窗口中 widget.setLayout(layout); widget.show(); return a.exec(); }
1.3 QGridLayout網(wǎng)格布局
#include <QApplication> #include <QWidget> #include <QLabel> #include <QGridLayout> #include <QPushButton> int main(int argc, char *argv[]) { QApplication a(argc, argv); //創(chuàng)建主窗口 QWidget widget; widget.setWindowTitle("QGridLayout網(wǎng)格布局"); //創(chuàng)建 4 個(gè)按鈕和 1 個(gè)文本框 QPushButton *but1 = new QPushButton("but1"); QPushButton *but2 = new QPushButton("but2"); QLabel *lab3 = new QLabel("lab"); lab3->setStyleSheet("QLabel{background:#dddddd;font:20px;}"); lab3->setAlignment(Qt::AlignCenter); QPushButton *but3 = new QPushButton("but3"); QPushButton *but4 = new QPushButton("but4"); //創(chuàng)建網(wǎng)格布局控件 QGridLayout *layout = new QGridLayout; //向 layout 中添加控件,并指定各個(gè)控件的位置 layout->addWidget(but1, 0, 0); layout->addWidget(but2, 0, 2); layout->addWidget(lab3, 1, 0, 3, 3); // 從第1行第0列開始占據(jù)3行3列 layout->addWidget(but3, 4, 0); layout->addWidget(but4, 4, 2); //將 layout 添加到 widget 窗口中 widget.setLayout(layout); widget.show(); return a.exec(); }
1.4 QFormLayout表單布局
#include <QApplication> #include <QWidget> #include <QLineEdit> #include <QFormLayout> int main(int argc, char *argv[]) { QApplication a(argc, argv); //創(chuàng)建主窗口 QWidget widget; widget.setWindowTitle("QFormLayout表單布局"); //創(chuàng)建 4 個(gè)按鈕和 1 個(gè)文本框 QFormLayout* layout = new QFormLayout(); //設(shè)置表單中的標(biāo)簽都位于控件的上方 //layout->setRowWrapPolicy(QFormLayout::WrapAllRows); //添加 3 行輸入框和標(biāo)簽 layout->addRow("Name:", new QLineEdit()); layout->addRow("Email:", new QLineEdit()); layout->addRow("Adress:", new QLineEdit()); //設(shè)置行間距和列間距為 10 layout->setSpacing(10); //將 layout 表單添加到 widget 窗口中 widget.setLayout(layout); widget.show(); return a.exec(); }
1.5 QStackedLayout分組布局
#include <QApplication> #include <QWidget> #include <QPushButton> #include <QLabel> #include <QLineEdit> #include <QStackedLayout> #include <QListWidget> #include <QHBoxLayout> int main(int argc, char *argv[]) { QApplication a(argc, argv); //創(chuàng)建主窗口 QWidget widget; widget.setWindowTitle("QStackedLayout分組布局"); widget.resize(600,400); //向主窗口中添加一個(gè)水平布局控件 QHBoxLayout *layout=new QHBoxLayout; //創(chuàng)建一個(gè)列表 QListWidget listWidget(&widget); listWidget.setMinimumWidth(150); listWidget.setFont(QFont("宋體", 14)); listWidget.addItem("QPushButton"); listWidget.addItem("QLabel"); listWidget.addItem("QLineEdit"); //新建 3 個(gè)窗口,分別放置文本框、按鈕和單行輸入框 QWidget widget1; widget1.setMinimumSize(400,400); QPushButton but1("這是一個(gè)按鈕", &widget1); QWidget widget2; widget2.setMinimumSize(400, 400); QLabel lab1("這是一個(gè)文本框", &widget2); QWidget widget3; widget3.setMinimumSize(400,400); QLineEdit edit("這是一個(gè)單行輸入框", &widget3); //創(chuàng)建一個(gè)分組布局,將 3 個(gè)窗口添加到分組控件中 QStackedLayout *stackedLayout = new QStackedLayout; stackedLayout->addWidget(&widget1); stackedLayout->addWidget(&widget2); stackedLayout->addWidget(&widget3); //layout 第一列添加 QListWidget 控件,第二列添加分組布局控件,設(shè)置它們的伸縮系數(shù)比為 1:4 layout->addWidget(&listWidget, 1); layout->addLayout(stackedLayout, 4); //將 layout 水平布局控件添加到 widget 窗口中 widget.setLayout(layout); widget.show(); //連接信號(hào)和槽,實(shí)現(xiàn)當(dāng)點(diǎn)擊列表中的某一項(xiàng),切換分組布局管理器顯示的控件 QObject::connect(&listWidget, &QListWidget::currentRowChanged, stackedLayout, &QStackedLayout::setCurrentIndex); return a.exec(); }
1.6 五大布局綜合應(yīng)用
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QWidget> #include <QMainWindow> #include <QPushButton> // 用于創(chuàng)建按鈕的類 #include <QHBoxLayout> // 用于水平布局的類 #include <QTextEdit> // 用于創(chuàng)建文本框的類 #include <QGridLayout> // 用于柵格布局的類 #include <QLineEdit> // 用于創(chuàng)建行文本框的類 #include <QFormLayout> // 用于表單布局的類 #include <QStackedLayout> // 用于分頁布局的類 #include <QComboBox> // 用于下拉框的類 namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; private: QWidget *m_widget; private: //演示表單布局 QLineEdit *nameLineEdit; // 聲明 name 文本框 QLineEdit *emailLineEdit; // 聲明 email 文本框 //演示水平布局 QPushButton *button1; // 聲明按鈕1 QPushButton *button2; // 聲明按鈕2 QPushButton *button3; // 聲明按鈕3 QPushButton *button4; // 聲明按鈕4 QPushButton *button5; // 聲明按鈕5 // 演示垂直布局 QPushButton *button6; // 聲明按鈕6 QPushButton *button7; // 聲明按鈕7 QPushButton *button8; // 聲明按鈕8 QPushButton *button9; // 聲明按鈕9 QPushButton *button10; // 聲明按鈕10 // 演示網(wǎng)格布局 QPushButton *button11; // 聲明按鈕11 QPushButton *button12; // 聲明按鈕12 QTextEdit *gridTextEdit; // 聲明文本框 // 演示分組布局 QPushButton *button13; // 聲明按鈕13 QPushButton *button14; // 聲明按鈕14 QPushButton *button15; // 聲明按鈕15 QPushButton *button16; // 聲明按鈕16 QPushButton *button17; // 聲明按鈕17 QPushButton *button18; // 聲明按鈕18 }; #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" /* //比較常用的布局微調(diào)整接口 QBoxLayout::setSpacing(int spacing); 設(shè)置組件之間的間隔, QBoxLayout::addStretch(int stretch = 0); 設(shè)置一個(gè)占位空間, QLayout::setContentsMargins(int left, int top, int right, int bottom); 設(shè)置布局管理器到邊界的距離。 */ MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 設(shè)置后頁面大小不可調(diào)整,一直處于系統(tǒng)推薦大小的狀態(tài) //this->setFixedSize(sizeHint()); // 首先創(chuàng)建一個(gè)QWidget并設(shè)置給QMainWindow,否則布局看不見 m_widget = new QWidget(this); this->setCentralWidget(m_widget); // 演示布局管理器到邊界的距離 左 上 右 下 m_widget->setContentsMargins(50, 100, 50, 100); // 設(shè)置固定大小 /* this->setFixedHeight(400); this->setFixedWidth(600); */ // 創(chuàng)建按鈕1 button1 = new QPushButton("One"); // 創(chuàng)建按鈕2 button2 = new QPushButton("Two"); // 創(chuàng)建按鈕3 button3 = new QPushButton("Three"); // 創(chuàng)建按鈕4 button4 = new QPushButton("Four"); // 創(chuàng)建按鈕5 button5 = new QPushButton("Five"); // [1]創(chuàng)建水平頁面布局管理對(duì)象 QHBoxLayout *hlayout = new QHBoxLayout; // 向水平布局增加 按鈕1 hlayout->addWidget(button1); // 向水平布局增加 按鈕2 hlayout->addWidget(button2); // 向水平布局增加 按鈕3 hlayout->addWidget(button3); // 向水平布局增加 按鈕4 hlayout->addWidget(button4); // 向水平布局增加 按鈕5 hlayout->addWidget(button5); // 設(shè)置水平頁面布局是窗口布局 //m_widget->setLayout(hlayout); // 演示水平布局之間增加間隔 hlayout->setSpacing(200); // 創(chuàng)建按鈕6 button6 = new QPushButton("Six"); // 創(chuàng)建按鈕7 button7 = new QPushButton("Seven"); // 創(chuàng)建按鈕8 button8 = new QPushButton("Eight"); // 創(chuàng)建按鈕9 button9 = new QPushButton("Nine"); // 創(chuàng)建按鈕10 button10 = new QPushButton("Ten"); // [2]創(chuàng)建垂直頁面布局管理對(duì)象 QVBoxLayout *vlayout = new QVBoxLayout; // 向水平布局增加 按鈕6 vlayout->addWidget(button6); // 向水平布局增加 按鈕7 vlayout->addWidget(button7); // 演示在按鈕之間增加一個(gè)占位(彈簧) vlayout->addStretch(1); // 向水平布局增加 按鈕8 vlayout->addWidget(button8); // 向水平布局增加 按鈕9 vlayout->addWidget(button9); // 向水平布局增加 按鈕10 vlayout->addWidget(button10); // 創(chuàng)建按鈕11 button11 = new QPushButton("Eleven"); // 創(chuàng)建按鈕12 button12 = new QPushButton("Twelve"); // 創(chuàng)建文本框 gridTextEdit = new QTextEdit(); // [4]創(chuàng)建柵格頁面布局管理對(duì)象 QGridLayout *gridLayout = new QGridLayout; gridLayout->addWidget(button11,0,0,1,1); gridLayout->addWidget(button12,0,1,1,1); gridLayout->addWidget(gridTextEdit,2,0,4,2); // 創(chuàng)建行文本框 nameLineEdit = new QLineEdit(); emailLineEdit = new QLineEdit(); // [6]創(chuàng)建表單頁面布局管理對(duì)象 QFormLayout *formLayout = new QFormLayout; formLayout->addRow(tr("&Name:"), nameLineEdit); formLayout->addRow(tr("&Email:"), emailLineEdit); // [5]創(chuàng)建水平頁面布局管理 QHBoxLayout *gridhlayout = new QHBoxLayout; gridhlayout->addLayout(vlayout); gridhlayout->addLayout(gridLayout); // [3]創(chuàng)建垂直頁面布局管理對(duì)象 QVBoxLayout *layout = new QVBoxLayout; m_widget->setLayout(layout); layout->addLayout(formLayout); layout->addLayout(hlayout); layout->addLayout(gridhlayout); // 分頁布局 // [7.1]第一步:準(zhǔn)備3個(gè)頁面,每個(gè)頁面放置一些組件 QWidget *firstPageWidget = new QWidget; QWidget *secondPageWidget = new QWidget; QWidget *thirdPageWidget = new QWidget; // 準(zhǔn)備頁面組件:創(chuàng)建6個(gè)按鈕,每個(gè)頁面放置一個(gè)按鈕 button13 = new QPushButton("Page 1 button13"); button14 = new QPushButton("Page 1 button14"); button15 = new QPushButton("Page 2 button15"); button16 = new QPushButton("Page 2 button16"); button17 = new QPushButton("Page 3 button17"); button18 = new QPushButton("Page 3 button18"); // 創(chuàng)建3個(gè)頁面布局,每個(gè)頁面一個(gè)布局 QVBoxLayout *page1layout = new QVBoxLayout; QHBoxLayout *page2layout = new QHBoxLayout; QVBoxLayout *page3layout = new QVBoxLayout; // 給分頁布局添加組件 page1layout->addWidget(button13); page1layout->addWidget(button14); page2layout->addWidget(button15); page2layout->addWidget(button16); page3layout->addWidget(button17); page3layout->addWidget(button18); // 設(shè)置分頁布局 firstPageWidget->setLayout(page1layout); secondPageWidget->setLayout(page2layout); thirdPageWidget->setLayout(page3layout); // [7.2]第二步:創(chuàng)建 QStackedLayout 頁面布局管理對(duì)象,把分頁添加到這個(gè)對(duì)象上 QStackedLayout *stackedLayout = new QStackedLayout; // 向分頁布局對(duì)象添加頁面 stackedLayout->addWidget(firstPageWidget); stackedLayout->addWidget(secondPageWidget); stackedLayout->addWidget(thirdPageWidget); // [7.3]第三步:設(shè)置分頁切換方法,使用 QComboBox或QListWidget 實(shí)現(xiàn) QComboBox *pageComboBox = new QComboBox; pageComboBox->addItem(tr("Page 1")); pageComboBox->addItem(tr("Page 2")); pageComboBox->addItem(tr("Page 3")); connect(pageComboBox, SIGNAL(activated(int)), stackedLayout, SLOT(setCurrentIndex(int))); // [7.4]第四步:將 QStackedLayout 布局添加到主布局上,將分頁切換組件添加到一個(gè)布局上 vlayout->addWidget(pageComboBox); layout->addLayout(stackedLayout); // 向主頁面添加分頁布局 } MainWindow::~MainWindow() { delete ui; }
main.cpp
#include "mainwindow.h" #include <QApplication> #include <QWidget> #include <QPushButton> #include <QLabel> #include <QLineEdit> #include <QStackedLayout> #include <QListWidget> #include <QHBoxLayout> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow wondow; wondow.show(); return a.exec(); }
2. 分割窗口
Qt中提供了 QSplitter 分離器類來實(shí)現(xiàn)窗口的分割,分割的窗口是用分割條隔開的,用戶可以拖動(dòng)分割條調(diào)整窗口的大小。
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QSplitter> #include <QTextEdit> #include <QHBoxLayout> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; private: QWidget *m_widget; private: QTextEdit *textEdit1; // 聲明文本框1 QTextEdit *textEdit2; // 聲明文本框2 QTextEdit *textEdit3; // 聲明文本框3 }; #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); m_widget = new QWidget(this); this->setCentralWidget(m_widget); // [1]創(chuàng)建3個(gè)文本框 textEdit1 = new QTextEdit(); textEdit2 = new QTextEdit(); textEdit3 = new QTextEdit(); // [2]創(chuàng)建分離器對(duì)象 QSplitter* splitter = new QSplitter; // [3]設(shè)置內(nèi)部組件水平方向布局 splitter->setOrientation(Qt::Horizontal); // [4]向分離器中,添加組件 splitter->addWidget(textEdit1); splitter->addWidget(textEdit2); splitter->addWidget(textEdit3); /* * [5]調(diào)整3個(gè)分割窗口的顯示比例 1:1:2 * setStretchFactor函數(shù): * 第一個(gè)參數(shù):窗口索引,從0開始 * 第二個(gè)參數(shù):拉伸比例 * 第一個(gè)窗口索引0,拉伸1 * 第二個(gè)窗口索引1,拉伸1 * 第三個(gè)窗口索引2,拉伸2 */ splitter->setStretchFactor(0, 1); splitter->setStretchFactor(1, 1); splitter->setStretchFactor(2, 2); /* * [6]把分離器添加到窗口上 * 創(chuàng)建一個(gè)layout * 添加組件的方式向layout添加分離器 * 設(shè)置 layout 為程序的layout */ QHBoxLayout *hlayout = new QHBoxLayout; hlayout->addWidget(splitter); m_widget->setContentsMargins(5, 5, 5, 5); m_widget->setLayout(hlayout); // 設(shè)置窗口大小 //m_widget->setFixedSize(800, 200); this->setFixedSize(800, 200); } MainWindow::~MainWindow() { delete ui; }
main.cpp
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
3. 滾動(dòng)區(qū)域
當(dāng)某個(gè)區(qū)域內(nèi)的組件尺寸超過了預(yù)先設(shè)置好的范圍時(shí),可以使用QScrollArea提供的方法,生成滾動(dòng)條,滾動(dòng)顯示組件內(nèi)容。
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QScrollArea> #include <QLabel> #include <QHBoxLayout> namespace Ui { class MainWindow; } class MainWindow : public QWidget { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; private: QLabel *scrollArealabel; // 聲明一個(gè)標(biāo)簽 }; #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QWidget(parent)//, //ui(new Ui::MainWindow) { //ui->setupUi(this); // [1]創(chuàng)建一個(gè)標(biāo)簽 scrollArealabel = new QLabel; // 設(shè)置標(biāo)簽的最小尺寸,非常重要,否則有可能無法正常顯示滾動(dòng)條 scrollArealabel->setMinimumSize(500,500); // 設(shè)置標(biāo)簽顯示的內(nèi)容,隨便寫點(diǎn)東西 scrollArealabel->setText("helo world "); // [2]創(chuàng)建滾動(dòng)區(qū)域,設(shè)置滾動(dòng)區(qū)域關(guān)聯(lián)的對(duì)象 QScrollArea *scrollArea = new QScrollArea; // 把標(biāo)簽加到滾動(dòng)區(qū)域,使用 setWidget() 函數(shù) scrollArea->setWidget(scrollArealabel); // 設(shè)置滾動(dòng)區(qū)域的背景色 scrollArea->setBackgroundRole(QPalette::Dark); // [3]創(chuàng)建一個(gè)布局 QHBoxLayout *hlayout = new QHBoxLayout; // 把滾動(dòng)區(qū)域加到布局上 hlayout->addWidget(scrollArea); // 使布局生效 this->setLayout(hlayout); // 設(shè)置窗口的大小,比標(biāo)簽的最小尺寸小,這樣能顯示滾動(dòng)區(qū)域 this->setFixedSize(400,400); } MainWindow::~MainWindow() { delete ui; }
main.cpp
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
4. 停靠區(qū)域
在Qt中,停靠窗口主要是指可以在QMainWindow中??炕蚩梢愿?dòng)的獨(dú)立窗口。??看翱谟兴膫€(gè)區(qū)域,每個(gè)窗口可以有自己的標(biāo)題欄,用戶可以通過拖拽的方式移動(dòng)窗口。浮動(dòng)窗口可以在下圖中的白色區(qū)域內(nèi)移動(dòng),QDockWidget 這個(gè)類提供了關(guān)于??看翱诘姆椒?。
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QDockWidget> #include <QLabel> #include <QPushButton> #include <QTextEdit> #include <QVBoxLayout> namespace Ui { class MainWindow; } class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = 0); ~MainWindow(); private: Ui::MainWindow *ui; private: QLabel *label; // 設(shè)置一個(gè)標(biāo)簽 QPushButton *button1; // 按鈕1 QPushButton *button2; // 按鈕2 QPushButton *button3; // 按鈕3 QTextEdit *textEdit; // 文本框 }; #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // [1]創(chuàng)建一個(gè)中心區(qū)域顯示的文本框 textEdit = new QTextEdit; textEdit->setText("main widget"); // 設(shè)置文本框的大小 textEdit->setFixedSize(300, 300); // 把文本框設(shè)置為程序中心窗口 this->setCentralWidget(textEdit); // 設(shè)置組件與程序邊框的距離 this->setContentsMargins(15, 15, 15, 15); // 設(shè)置程序界面大小 // this->setFixedSize(450, 330); // [2]創(chuàng)建組件 label = new QLabel; label->setText("widget1"); button1 = new QPushButton("aboutQt"); button2 = new QPushButton("button2"); button3 = new QPushButton("close"); // 給兩個(gè)按鈕綁定槽,實(shí)現(xiàn)簡單的功能 connect(button1, SIGNAL(clicked()), qApp, SLOT(aboutQt()));// 關(guān)于QT connect(button3, SIGNAL(clicked()), this, SLOT(close())); // 關(guān)閉程序 // [3]創(chuàng)建頁面布局,用于標(biāo)簽和按鈕的布局 QVBoxLayout *docklayout_1 = new QVBoxLayout; // 向布局添加組件 docklayout_1->addWidget(label); docklayout_1->addStretch(); docklayout_1->addWidget(button1); QVBoxLayout *docklayout_2 = new QVBoxLayout; // 向布局添加組件 docklayout_2->addStretch(); docklayout_2->addWidget(button2); docklayout_2->addWidget(button3); // [4]創(chuàng)建窗口組件 QWidget *widget1 = new QWidget; QWidget *widget2 = new QWidget; // [5]設(shè)置窗口組件的布局 widget1->setLayout(docklayout_1); widget2->setLayout(docklayout_2); // [6]創(chuàng)建??看翱冢焉厦鎯蓚€(gè)窗口添加到??看翱谥? QDockWidget *dock = new QDockWidget(tr("myDockWindow1"), this); // 設(shè)置??繀^(qū)域 dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); // 設(shè)置停靠窗口的屬性 dock->setFeatures(QDockWidget::DockWidgetMovable); //??看翱诳梢苿?dòng)屬性 // 窗口 widget1 設(shè)置為停靠窗口 dock->setWidget(widget1); // 設(shè)置??看翱诘拇笮? // dock->setFixedSize(100,100); // 設(shè)置邊框顏色 dock->setStyleSheet((QString::fromUtf8("border:1px solid gray"))); // 向程序主界面添加停靠窗口 this->addDockWidget(Qt::RightDockWidgetArea, dock); QDockWidget *dock1 = new QDockWidget(tr("myDockWindow2"), this); // 設(shè)置??繀^(qū)域 dock1->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); // 設(shè)置停靠窗口的屬性 dock1->setFeatures(QDockWidget::AllDockWidgetFeatures); //具有??看翱诘娜刻匦? // 窗口 widget2 設(shè)置為??看翱? dock1->setWidget(widget2); // 設(shè)置??看翱诘拇笮? // dock1->setFixedSize(100,200); // 設(shè)置邊框顏色 dock1->setStyleSheet((QString::fromUtf8("border:1px solid gray"))); // 向程序主界面添加停靠窗口 this->addDockWidget(Qt::RightDockWidgetArea, dock1); // [7]設(shè)置兩個(gè)??看翱诘奈恢茫怪迸帕? splitDockWidget(dock, dock1, Qt::Vertical); } MainWindow::~MainWindow() { delete ui; }
main.cpp
#include "mainwindow.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); MainWindow w; w.show(); return a.exec(); }
備注:參考文章
Qt零基礎(chǔ)系列06:如何進(jìn)行界面布局管理 - 知乎
到此這篇關(guān)于Qt中布局管理的使用小結(jié)的文章就介紹到這了,更多相關(guān)Qt 布局管理內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
C++中關(guān)于[]靜態(tài)數(shù)組和new分配的動(dòng)態(tài)數(shù)組的區(qū)別分析
這篇文章主要介紹了C++中關(guān)于[]靜態(tài)數(shù)組和new分配的動(dòng)態(tài)數(shù)組的區(qū)別分析,很重要的概念,需要的朋友可以參考下2014-08-08用c語言根據(jù)可變參數(shù)合成字符串的實(shí)現(xiàn)代碼
本篇文章是對(duì)用c語言根據(jù)可變參數(shù)合成字符串的方法進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下2013-05-05C++實(shí)現(xiàn)LeetCode(768.可排序的最大塊數(shù)之二)
這篇文章主要介紹了C++實(shí)現(xiàn)LeetCode(768.可排序的最大塊數(shù)之二),本篇文章通過簡要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參考下2021-07-07Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置教程詳解
這篇文章主要介紹了Win10下最新版CLion(2020.1.3)安裝及環(huán)境配置,CLion 是 JetBrains 推出的全新的 C/C++ 跨平臺(tái)集成開發(fā)環(huán)境,本文給大家介紹的非常詳細(xì),需要的朋友可以參考下2020-08-08C++實(shí)現(xiàn)動(dòng)態(tài)規(guī)劃過程詳解
動(dòng)態(tài)規(guī)劃是解決一類最優(yōu)問題的常用方法,它是解決最優(yōu)化問題的一種途徑,在本文中,我們將討論如何使用C++實(shí)現(xiàn)動(dòng)態(tài)規(guī)劃算法,并提供一些示例來幫助您更好地理解該算法2023-05-05