QT界面布局——停靠窗口QDockWidget +分割窗口QSplitter +堆叠窗口QStackedWidget

窗口的基本布局如下

1、分割窗口 QSplitter

//分割窗口使用QSplitter类
QSplitter *splitterMain =new QSplitter(Qt::Horizontal,0);                     // 对窗口进行水平分割,0代表有分割的窗口为主窗口,也可以选择要分割的窗口
QTextEdit *textLeft =new QTextEdit(QObject::tr("Left Widget"), splitterMain); // 将控件插入主分割窗口中,注意如果这样插入每个控件都会是一个窗口
textLeft->setAlignment(Qt::AlignCenter);                                      // 设置文本的对齐方式
//右部分分割窗口                                           
QSplitter *splitterRight =new QSplitter(Qt::Vertical,splitterMain);           // 对分割窗口再进行分割
splitterRight->setOpaqueResize(false);                                        // 分割条是否实时更新,false为拖拽完更新,true为实时更新
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);                                         // 设定可伸缩控件,第一个参数是指定设置第几个控件,从0开始,第二个参数感觉是伸缩幅度吧(为大于0的值),总体感觉没什么卵用
splitterMain->setWindowTitle(QObject::tr("Splitter"));
splitterMain->show();

文本对齐方式

Qt::AlignLeft    // 左对齐
Qt::AlignRight   // 右对齐
Qt::AlignCenter  // 文字居中
Qt::AlignUp      // 文字与顶端对齐


2、堆叠窗口 QStackedWidget 

方式一:QStackedWidget 类

setWindowTitle(tr("StackedWidget"));          // 设置窗口标题
list =new QListWidget(this);                  // 新建一个QListWidget控件对象
//在新建的QListWidget控件中插入三个条目,作为选择项
list->insertItem(0,tr("Window1"));
list->insertItem(1,tr("Window2"));
list->insertItem(2,tr("Window3"));
//创建三个QLabel标签控件对象,作为堆栈窗口需要显示的三层窗体
label1 =new QLabel(tr("WindowTest1"));
label2 =new QLabel(tr("WindowTest2"));
label3 =new QLabel(tr("WindowTest3"));
stack =new QStackedWidget(this);
//新建一个QStackedWidget堆栈窗体对象
//将创建的三个QLabel标签控件依次插入堆栈窗体中
stack->addWidget(label1);
stack->addWidget(label2);
stack->addWidget(label3);
QHBoxLayout *mainLayout =new QHBoxLayout(this);
//对整个对话框进行布局
mainLayout->setMargin(5);                    // 设定对话框(或窗体)的边距为5
mainLayout->setSpacing(5);                   // 设定各个控件之间的间距为5
mainLayout->addWidget(list);
mainLayout->addWidget(stack,0,Qt::AlignHCenter);
mainLayout->setStretchFactor(list,1);        // 测试后感觉, 第二个参数大于0为可伸缩控件,1表示比例为1份,对于stack为1/3宽度
mainLayout->setStretchFactor(stack,3);
connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));
// 将QListWidget的currentRowChanged信号与QStackedWidget的setCurrentIndex槽函数相连,setCurrentIndex的index按插入顺序从0开始,与QListWidget的条目顺序一致。即关联关系

方式二:QMidArea类和QMdiSubWindow类 多重文档界面设置堆叠 cascadeSubWindows()

详细请看 本博主其他文章 QMidArea类和QMdiSubWindow类的用法

3、停靠窗口

QTextEdit *te=new QTextEdit(this);  //定义一个QTextEdit对象作为主窗口
te->setText(tr("Main Window"));
te->setAlignment(Qt::AlignCenter);
setCentralWidget(te);               //将此编辑框设为主窗口的中央窗体
//停靠窗口1
QDockWidget *dock=new QDockWidget(tr("DockWindow1"),this);
//可移动
dock->setFeatures(QDockWidget::DockWidgetMovable);    
dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
QTextEdit *te1 =new QTextEdit();
te1->setText(tr("Window1"));
dock->setWidget(te1);
addDockWidget(Qt::RightDockWidgetArea,dock);
//停靠窗口2
dock=new QDockWidget(tr("DockWindow2"),this);
dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable); //可关闭、可浮动
QTextEdit *te2 =new QTextEdit();
te2->setText(tr("Window2"));
dock->setWidget(te2);
addDockWidget(Qt::RightDockWidgetArea,dock);
//停靠窗口3
dock=new QDockWidget(tr("DockWindow3"),this);
dock->setFeatures(QDockWidget::AllDockWidgetFeatures);   //全部特性
QTextEdit *te3 =new QTextEdit();
te3->setText(tr("Window3"));
dock->setWidget(te3);
addDockWidget(Qt::RightDockWidgetArea,dock);

停靠窗口主要有两大属性:

1、setFeatures()方法设置停靠特性Qt::DockWidgetFeatures

QDockWidget::DockWidgetClosable        // 可关闭
QDockWidget::DockWidgetMovable         // 可移动
QDockWidget::DockWidgetFloatable       // 可浮动
QDockWidget::AllDockWidgetFeatures     // 拥有以上所有特性
QDockWidget::NoDockWidgetFeatures      // 不可关闭、不可移动、不可浮动

2、setAllowedAreas()方法设置停靠区域

Qt::LeftDockWidgetArea     // 可在左边停靠
Qt::RightDockWidgetArea    // 可在右边停靠
Qt::TopDockWidgetArea      // 可在上边停靠
Qt::BottomDockWidgetArea   // 可在下边停靠
Qt::AllDockWidgetArea      // 可在以上四个部位停靠
Qt::NoDockWidgetArea       // 只可停靠在插入处
发布了127 篇原创文章 · 获赞 3 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_37631516/article/details/105407683
今日推荐