QT5布局管理

简介: 分割窗口 QSplitter类在应用程序中经常用到,它可以灵活分布窗口的布局,经常用 在类似文件资源管理器的窗口设计中。

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 ();
}


效果展示:

f473cb256cc04159af02083955e59d4a.png


停靠窗口 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 ();
}


效果展示:

7f5ea17792884036bb4bf8809f07d877.png


堆栈窗体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 ();
}


效果展示:

a85a206688ee45c6a78aca925c645524.png


基本布局(QLayout)

Qt 提供了 QHBoxLayout 类、QVBoxLayout 类及 QGridLayout 类等的基本布局 管理,分别是水平排列布局、垂直排列布局和网格排列布局。它们之间的继承关系

b2bdef9e938c4e6caef12aeec0e298de.png

布局中常用的方法有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代码。此处不再做详细展示了。

目录
相关文章
|
7月前
Qt 布局管理之 堆栈窗体
Qt 布局管理之 堆栈窗体
78 5
|
7月前
Qt 布局管理之 停靠窗口QDockWidget
Qt 布局管理之 停靠窗口QDockWidget
196 0
|
7月前
Qt 布局管理之分割窗口
Qt 布局管理之分割窗口
97 0
|
4月前
【qt】 QGridLayout布局管理器怎么用?
【qt】 QGridLayout布局管理器怎么用?
182 0
|
4月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 空白项Spacer
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 空白项Spacer
204 2
|
4月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 表单布局Form Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 表单布局Form Layout
123 2
|
4月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 网格布局Grid Layout
440 2
|
4月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 水平布局Horizontal Layout
272 2
|
4月前
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 垂直布局Vertical Layout
【Qt 学习笔记】Qt常用控件 | 布局管理器 | 垂直布局Vertical Layout
321 2