亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Qt中布局管理的使用小結(jié)

 更新時(shí)間:2023年09月06日 09:44:35   作者:hsy12342611  
Qt的布局管理系統(tǒng)提供了簡單而強(qiáng)大的機(jī)制,確保它們有效地使用空間,本文就介紹了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)文章

最新評(píng)論