Qt(三)窗口分割、停靠、堆叠


演示实例:
创建QMainWindow应用, 无UI文件

一、窗口分割 QSplitter

单独修改main.cpp即可

//main.cpp
#include "mainwindow.h"
#include <QApplication>

#include <QSplitter>
#include <QTextCodec>
#include <QTextEdit>
#include <QObject>

int main(int argc, char *argv[])
{
    
    
    QApplication a(argc, argv);

    //显示字体
    QFont font("宋体",15);

    //分割窗口
    QSplitter* splitterMain = new QSplitter(Qt::Horizontal,0);//新建水平分割
    QTextEdit* textleft = new QTextEdit(QObject::tr("左边窗口"),splitterMain);
    textleft->setAlignment(Qt::AlignCenter);


    //右边部分分割窗口
    QSplitter * splitterRight = new QSplitter(Qt::Vertical,splitterMain);

    //设定拓展分割条时,是否实时更新(否则显示一条虚线)
    splitterRight->setOpaqueResize(false);

    QTextEdit* textUp = new QTextEdit(QObject::tr("右边上半边窗口"),splitterRight);
    textUp->setAlignment(Qt::AlignCenter);
    QTextEdit* textDown = new QTextEdit(QObject::tr("右边下半边窗口"),splitterRight);
    textDown->setAlignment(Qt::AlignCenter);

    // 第一个参数用于指定控件序号,第二个参数大于0可伸缩,否则不可伸缩,
    splitterMain->setStretchFactor(1,1);
    splitterMain->setWindowTitle("splitter实现窗口分割操作");

    splitterMain->show();
    return a.exec();
}

效果:(可拖拽演示)
在这里插入图片描述

二、窗口停靠 QDockWidget

停靠窗口QDockWidget类也是应用程序中经常用到的,设置停靠窗口的一般流程如下:
1、创建一个QDockWidget对象的停靠窗体
2、设置此停靠窗体的属性,通常调用setFeatures()及setAllowedAreas()两种方法
3、新建一个要插入停靠窗体的控件,常用的有QListWidget和QTextEdit
4、将控件插入停靠窗体,调用QDockWidget的setWidget()方法
5、使用addDockWidget()方法在MainWindow中加入此停靠窗体

示例说明:

通过停靠窗口QDockWdiget类的使用:
窗口1只可在主窗口的左边和右边停靠;
窗口2只可在浮动和右部停靠两种状态之间切换,并且不可移动
窗口3可实现停靠窗口的各种状态。

单独修改mainwindow.cpp即可

#include "mainwindow.h"
#include <QDockWidget>
#include <QObject>
#include <QTextEdit>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    
    
    setWindowTitle("QDockWidget");
    QTextEdit *te = new QTextEdit(this);
    te->setText("main_window");
    te->setAlignment(Qt::AlignCenter);
    setCentralWidget(te);    //将编辑窗口设置为主窗口的中央窗口

    //停靠窗口1
    QDockWidget* dock = new QDockWidget("DockWindows1");
    dock->setFeatures(QDockWidget::DockWidgetMovable);
    dock->setAllowedAreas(Qt::LeftDockWidgetArea|Qt::RightDockWidgetArea);
    QTextEdit *te1 = new QTextEdit();
    te1->setText("拖拽区域文本1");
    dock->setWidget(te1);
    addDockWidget(Qt::RightDockWidgetArea,dock);

    //停靠窗口2
    dock = new QDockWidget("DockWindows1");
    dock->setFeatures(QDockWidget::DockWidgetMovable);
    dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);
    QTextEdit *te2 = new QTextEdit();
    te2->setText("拖拽区域文本2");
    dock->setWidget(te2);
    addDockWidget(Qt::RightDockWidgetArea,dock);

    //停靠窗口3
    dock = new QDockWidget("DockWindows1");
    dock->setFeatures(QDockWidget::DockWidgetMovable);
    dock->setFeatures(QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable);
    QTextEdit *te3 = new QTextEdit();
    te3->setText("拖拽区域文本3");
    dock->setWidget(te3);
    addDockWidget(Qt::RightDockWidgetArea,dock);
}

MainWindow::~MainWindow()
{
    
    
}

演示效果:
在这里插入图片描述

三、窗口堆叠 QStackedWidget

新建【Qt Widgets Application】> 类名【SatckDialog】> 基类【QDialog】> 不选择“创建界面”复选框

#ifndef SATCKDIALOG_H
#define SATCKDIALOG_H

#include <QDialog>
#include <QListWidget>
#include <QLabel>
#include <QStackedWidget>

class SatckDialog : public QDialog
{
    
    
    Q_OBJECT

public:
    SatckDialog(QWidget *parent = nullptr);
    QListWidget* list;
    QLabel* label1;
    QLabel* label2;
    QLabel* label3;
    QStackedWidget* stack;

    ~SatckDialog();
};
#endif // SATCKDIALOG_H
#include "satckdialog.h"
#include <QHBoxLayout>  //添加布局头文件

SatckDialog::SatckDialog(QWidget *parent)
    : QDialog(parent)
{
    
    
    setWindowTitle(tr("StackedWidget"));

    //新建一个QListWidget控件类对象
    list = new QListWidget(this);

    //在新建的QListWidget控件中插入三个条目,作为选择项
    list->insertItem(0,tr("项目1"));
    list->insertItem(1,tr("项目2"));
    list->insertItem(2,tr("项目3"));

    //创建三个标签控件对象,作为堆栈窗口要显示的三层窗体。
    label1 = new QLabel(tr("WindowTest1"));
    label2 = new QLabel(tr("WindowTest22"));
    label3 = new QLabel(tr("WindowTest333"));


    stack = new QStackedWidget(this);//新建QStackedWidget堆栈窗口对象
    //将创建的三个标签控件依次插入堆栈窗体
    stack->addWidget(label1);
    stack->addWidget(label2);
    stack->addWidget(label3);


    QHBoxLayout *mainLayout = new QHBoxLayout(this);  //水平布局
    mainLayout->setMargin(10);   //设定对话框/窗体的边距
    mainLayout->setSpacing(5);   //设定各控件的间距
    mainLayout->addWidget(list);

    mainLayout->addWidget(stack,0,Qt::AlignCenter);//stack添加的label文字居中

    mainLayout->setStretchFactor(list,1);    //第一个参数用于指定设置的控件(控件序号从0开始),第二个参数大于0表示此控件为可伸缩控件
    mainLayout->setStretchFactor(stack,3);   //设定可伸缩控件

    connect(list,SIGNAL(currentRowChanged(int)),stack,SLOT(setCurrentIndex(int)));//按选择显示窗体。堆栈窗体index按插入顺序从0起依次排序,与QListWidget的条目排序一致

}

SatckDialog::~SatckDialog()
{
    
    
}

在这里插入图片描述

https://blog.csdn.net/luyibing2017/article/details/109171634

猜你喜欢

转载自blog.csdn.net/wsp_1138886114/article/details/122728812