罗列学习过程中的一些布局管理相关操作函数
// 引入头文件
#include
#include
#include
// 新建了一个分割窗口,并设定此分割窗口为水平分割窗口
// Qt::Horizontal 水平分割窗口
// Qt::Vertical 垂直分割窗口
QSplitter* splitterMain = new QSplitter(Qt::Horizontal,0);
// 新建一个文本框,并插入到主分割窗口中
QTextEdit* textLeft = new QTextEdit(QObject::tr("Left Widget"),splitterMain);
// 设置文本框文字对齐方式,居中
textLeft->setAlignment(Qt::AlignCenter);
// 新建一个分割窗口,作为右分割窗口,设置此分割窗口为垂直分割窗口,并以主分割窗口为父窗口
// Qt::Horizontal 水平分割窗口
// Qt::Vertical 垂直分割窗口
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);
// 设定可伸缩控件
//参数1指定设置的控件序号,按插入的先后次序从0起依次编号
// 参数2表示此控件是可伸缩控件
splitterMain->setStretchFactor(1,1);
// 显示窗口
splitterMain->show();
// 头文件引用
#include
#include
// 设置主窗口的标题栏文字
setWindowTitle("DockWindows");
// 在窗口中添加一个QTextEdit对象
QTextEdit *te = new QTextEdit(this);
// 设置文本框内容
te->setText("Main Window");
// 设置文本框内容居中
te->setAlignment(Qt::AlignCenter);
// 将此文本框设置为主窗口的中央窗体
setCentralWidget(te);
/* --------------- 停靠窗口1:只可在主窗口左右停靠 --------------- */
// 创建停靠窗口类,并设置标题
QDockWidget *dock = new QDockWidget("DockWindow1",this);
// 设置停靠窗口特性:可移动
dock->setFeatures(QDockWidget::DockWidgetMovable);
// 设置停靠窗口可停靠的区域:左侧或右侧
dock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea);
// 新建一个文本框
QTextEdit *te1 = new QTextEdit();
// 设置文本框内容
te1->setText("窗口1,只可左右停靠");
// 文本框添加到停靠窗口中
dock->setWidget(te1);
/* --------------- 停靠窗口2:在浮动和右停靠两者切换,不可移动 --------------- */
dock = new QDockWidget("DockWindow2",this);
// 设置可关闭,可浮动
dock->setFeatures(QDockWidget::DockWidgetClosable | QDockWidget::DockWidgetFloatable);
// 新建一个文本框
QTextEdit *te2 = new QTextEdit();
// 设置文本框内容
te2->setText("在浮动和右停靠两者切换,不可移动");
// 文本框添加到停靠窗口中
dock->setWidget(te2);
// 将给定的dockwidget添加到指定的区域
addDockWidget(Qt::RightDockWidgetArea,dock);
/* --------------- 停靠窗口3:全状态 --------------- */
dock = new QDockWidget("DockWindow3",this);
// 设置全部特性
dock->setFeatures(QDockWidget::AllDockWidgetFeatures);
// 新建一个文本框
QTextEdit *te3 = new QTextEdit();
// 设置文本框内容
te3->setText("全状态停靠窗口");
// 文本框添加到停靠窗口中
dock->setWidget(te3);
// 将给定的dockwidget添加到指定的区域
addDockWidget(Qt::RightDockWidgetArea,dock);
setFeatures()函数用于设置停靠窗口类的相关特性,具体特性如下
属性 | 说明 |
---|---|
QDockWidget::DockWidgetClosable | 停靠窗口可关闭 |
QDockWidget::DockWidgetMovable | 停开窗框可移动 |
QDockWidget::DockWidgetFloatable | 停靠窗口可浮动 |
QDockWidget::DockWidgetVerticalTitleBar | 停靠窗口标题栏移至左侧(默认标题栏在停靠窗口顶部) |
QDockWidget::AllDockWidgetFeatures | 拥有停靠窗口的所有特性 |
QDockWidget::NoDockWidgetFeatures | 不可移动、不可关闭、不可浮动 |
setAllowedAreas()函数用于设置停靠窗口可停靠的区域,参数如下
属性 | 说明 |
---|---|
Qt::LeftDockWidgetArea | 可在主窗口左侧停靠 |
Qt::RightDockWidgetArea | 可在主窗口右侧停靠 |
Qt::TopDockWidgetArea | 可在主窗口顶部停靠 |
Qt::BottomDockWidgetArea | 可在主窗口底部停靠 |
Qt::AllDockWidgetAreas | 可在主窗口以上四个任意部位停靠 |
Qt::NoDockWidgetArea | 只可停靠在插入处 |
#include
#include
#include
#include
// 加入私有变量
class StackDlg : public QDialog
{
Q_OBJECT
public:
StackDlg(QWidget *parent = nullptr);
~StackDlg();
private:
QListWidget *list;
QStackedWidget *stack;
QLabel *label1;
QLabel *label2;
QLabel *label3;
};
// 新建一个QListWidget控件对象(基于项目的列表控件)
list = new QListWidget(this);
// 在新建的QListWidget控件中插入三个条目,作为选择项
list->insertItem(0,"Window1");
list->insertItem(1,"Window2");
list->insertItem(2,"Window3");
// 创建三个QLabel标签控件对象,作为堆栈窗口需要显示的三层窗体
label1 = new QLabel("WindowTest1");
label2 = new QLabel("WindowTest2");
label3 = new QLabel("WindowTest3");
// 新建一个QStackedWidget堆栈窗体
stack = new QStackedWidget(this);
// 将创建的三个QLabel标签控件依次插入到堆栈窗体中
stack->addWidget(label1);
stack->addWidget(label2);
stack->addWidget(label3);
// 对整个对话框进行布局(水平排列布局)
QHBoxLayout * mainLayout = new QHBoxLayout(this);
// 设定窗体边距为5
mainLayout->setContentsMargins(5,5,5,5);
// 设定布局内部各控件之间的间距为5
mainLayout->setSpacing(5);
// 将布局属性添加到QListWidget控件
mainLayout->addWidget(list);
// 将布局属性添加到堆栈窗体
mainLayout->addWidget(stack,0,Qt::AlignHCenter);
// 设定可伸缩控件
mainLayout->setStretchFactor(list,1);
// 设定可伸缩控件
mainLayout->setStretchFactor(stack,3);
// 将QListWidget的currentRowChanged信号和堆栈窗体的setCurrentIndex槽函数连接
// 实现按选择显示窗体,此处的堆栈窗体index按插入的顺序从0依次排序,与QListWidget的条目排序一致
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
QHBoxLayout:水平排列布局
QVBoxLayout:垂直排列布局
QGridLayout:网格排列布局
void addWidget
(
QWidget *widget, // 需要插入的控件对象
int fromRow, // 插入的行
int fromColumn, // 插入的列
int rowSpan, // 占用的行数
int columnSpan, // 占用的列数
Qt::Alignment alignment=0 // 描述各个控件的对齐方式
)
void addLayout
(
QLayout *laout, // 表示需要插入的子布局对象
int fromRow, // 插入的起始行
int fromColumn, // 插入的起始列
int rowSpan, // 占用的行数
int columnSpan, // 占用的列数
Qt::Alignment alignment=0 // 指定的对齐方式
)
// 设定窗体边距10
setContentsMargins(10,10,10,10);
// 设置布局内控件间隔6
setSpacing(6);