QSplitter分割部件使用

QSplitter类是一个控件类,继承于QFQSrame,而QFrame又继承于QWidget类,所以QSplitter实例化后也是显示的控件或者窗口。

QSplitter的主要目的是用于处理多个控件之间的宽度或高度变化。如下QTcreator界面的例子:
在这里插入图片描述
控件1和2之间可以上下拉动,控件3和1、2组成的控件又可以左右拉动,这就是QSplitter实现的效果。下面展示一个简单的demo,6个控件的组合显示。在这里插入图片描述
demo代码,直接将下面的代码加入到你的mainwindow的构造函数中即可:

#include <QSplitter>
		//未指定父对象,所以为独立弹窗
        QSplitter* vSplitter = new QSplitter(Qt::Vertical);	//垂直(上下)类型
        QSplitter* hSplitter = new QSplitter(Qt::Horizontal,vSplitter);//水平(左右)类型
        vSplitter->setFixedSize(1000,500);

        QTextEdit* textEdit1 = new QTextEdit(hSplitter);
        QTextEdit* textEdit2 = new QTextEdit(hSplitter);
        QTextEdit* textEdit3 = new QTextEdit(vSplitter);
        QWidget *widget1 = new QWidget();
        QWidget *widget2 = new QWidget();
        QWidget *widget3 = new QWidget();
        QPalette pal;

        //设置背景黑色
        pal.setColor(QPalette::Background, Qt::darkGray);
        widget1->setAutoFillBackground(true);
        widget1->setPalette(pal);
        widget2->setAutoFillBackground(true);
        widget2->setPalette(pal);
        widget3->setAutoFillBackground(true);
        widget3->setPalette(pal);

        hSplitter->addWidget(textEdit1);
        hSplitter->addWidget(textEdit2);
        hSplitter->addWidget(widget1);
        hSplitter->addWidget(widget2);
        
        vSplitter->addWidget(hSplitter);
        vSplitter->addWidget(textEdit3);
        vSplitter->addWidget(widget3);

        textEdit1->setText("Edit1");
        textEdit1->setAlignment(Qt::AlignCenter);

        textEdit2->setText("Edit2");
        textEdit2->setAlignment(Qt::AlignCenter);

        textEdit3->setText("Edit3");
        textEdit3->setAlignment(Qt::AlignCenter);
        vSplitter->setHandleWidth(0);
        vSplitter->setOpaqueResize(1);
        vSplitter->show();

上述代码使用两个QSplitter实例化实现,用法有点类似于水平、垂直布局。
上述代码中的QSplitter,未指定父对象,所以为独立弹窗,不需要担心会覆盖主窗口中的其他控件。

Qt::Vertical属性的QSplitter,他里面的控件可以上下拉动;Qt::Horizontal属性的,控件可以左右拉动。

下面展示QSplitter的一些其他操作:

1、设置默认宽度、高度比例

        hSplitter->setStretchFactor(0,10);      //设置默认宽度(高度)比例
        hSplitter->setStretchFactor(1,10);
        hSplitter->setStretchFactor(2,1);
        hSplitter->setStretchFactor(3,1);

2、设置控件过窄不隐藏
默认情况下,拉动分界线,使得一个控件宽度很小后,会自动隐藏该控件

        hSplitter->setChildrenCollapsible(0);   //过窄不可隐藏

3、设置分界线宽度
默认挺宽的,不好看,所以可以设置的比较窄,就是鼠标拉动的时候定位麻烦点。

        hSplitter->setHandleWidth(1);           //设置分界线(拖动线)宽度

4、设置分界线不可拉动

        vSplitter->handle(2)->setDisabled(1);   //禁用分界线(拖动线),不可拖动

5、设置控件最小宽度
有时候不希望拉动分界线使得某个控件宽度或者高度特别小,可直接设置控件的最小宽度、高度。

        widget2->setMaximumWidth(50);
        widget2->setMinimumWidth(50);

相反,不想被拉的太大,可设置最大值。

        widget2->setMaximumSize(QSize(300,200));

おすすめ

転載: blog.csdn.net/weixin_42887343/article/details/121610210