zoukankan      html  css  js  c++  java
  • Qt QSplitter任意拆分窗口

    Qt拆分窗口可以使用QSplitter,也可以使用比较容易使用布局控件来完成,本文章给出使用QSplitter分割窗口的例子。

    QSplitter 继承自QFrame,而QFrame又继承自QWidget,这点很重要。

    对于使用QSplitter拆分窗口:

    1. 新建一个QSplitter,就意味着新建了一个QWidget
    2. 不同的QSplitter对象通过指定父子关系来完成嵌套(划分窗口)
    3. QSplitter可以放置到你指定的任何窗口内
    样例1

    在这里插入图片描述
    核心代码如下:

    qDebug("Mainframe start...
    ");
    
    QSplitter *pSpliter = new QSplitter(Qt::Horizontal);
    //此注释指定父窗口,打开后,后面的pSpliter->addWidget(pLeftEdt); 可以注释掉
    //QTextEdit* pLeftEdt = new QTextEdit(pSpliter); 
    
    QTextEdit* pLeftEdt = new QTextEdit;
    pLeftEdt->setText(QObject::tr("LeftWindow"));
    //此注释指定父窗口,打开后,后面的pSpliter->addWidget(pRightEdt); 可以注释掉
    //QTextEdit* pRightEdt = new QTextEdit(pSpliter); 
    QTextEdit* pRightEdt = new QTextEdit;
    pRightEdt->setText(QObject::tr("RightWindow"));
    pSpliter->addWidget(pLeftEdt);
    pSpliter->addWidget(pRightEdt);
    pSpliter->setStretchFactor(0, 1);//下面两句设置左右两列的宽度比为1:4
    
    pSpliter->setStretchFactor(1, 4);
    
    pSpliter->setWindowTitle(QObject::tr("Split-Wnd Demo1"));
    pSpliter->show();
    

    需要添加的头文件如下:

    #include <QSplitter>
    #include <QTextEdit>
    
    样例2

    在这里插入图片描述
    核心代码如下:

    qDebug("Mainframe start...
    ");
    
    QSplitter *pSpliter = new QSplitter(Qt::Horizontal);
    QTextEdit* pLeftEdt = new QTextEdit(pSpliter);
    pLeftEdt->setText(QObject::tr("LeftWindow"));
    
    QSplitter *pRightSpliter = new QSplitter(Qt::Vertical, pSpliter);
    QTextEdit* pRightTopEdt = new QTextEdit(pRightSpliter);
    pRightTopEdt->setText(QObject::tr("Right Top Window"));
    QTextEdit* pRightBtmEdt = new QTextEdit(pRightSpliter);
    pRightBtmEdt->setText(QObject::tr("Left Bottom Window"));
    // 设置左右比为1:4
    pSpliter->setStretchFactor(0, 1);
    pSpliter->setStretchFactor(1, 4);
    
    pRightSpliter->setStretchFactor(0, 1);//右面窗口上下窗口高度比为1:4
    pRightSpliter->setStretchFactor(1, 4);
    pSpliter->setWindowTitle(QObject::tr("Split-Wnd Demo2"));
    
    pSpliter->show();
    

    需要添加的头文件如下:

    #include <QSplitter>
    #include <QTextEdit>
    
    样列3

    在这里插入图片描述
    核心代码:

    qDebug("Mainframe start...
    ");
    
    // 1. 设置一个总的Splitter
    QSplitter *pSpliter = new QSplitter(Qt::Horizontal);
    
    //2. 设置 左边的Splitter
    QSplitter *pLeftSpliter = new QSplitter(Qt::Vertical);
    QTextEdit* pLeftTopEdt = new QTextEdit(pLeftSpliter);
    pLeftTopEdt->setText(QObject::tr("Left Top Window"));
    QTextEdit* pLeftBtmEdt = new QTextEdit(pLeftSpliter);
    pLeftBtmEdt->setText(QObject::tr("Left Bottom Window"));
    
    //3. 设置右边的东西wiget
    QTextEdit* pRightEdt = new QTextEdit;
    pRightEdt->setText(QObject::tr("Left Window"));
    
    //4. 左右的wiget加入总的Splitter
    pSpliter->addWidget(pLeftSpliter);
    pSpliter->addWidget(pRightEdt);
    
    // 其他设置
    pSpliter->setStretchFactor(0, 4);
    pSpliter->setStretchFactor(1, 1);//左右宽度比为4:1
    
    pLeftSpliter->setStretchFactor(0, 4);//左面窗口上下窗口高度比为4:1
    pLeftSpliter->setStretchFactor(1, 1);
    
    pSpliter->setWindowTitle(QObject::tr("Split-Wnd Demo3"));
    
    pSpliter->show();
    

    需要添加的头文件如下:

    #include <QSplitter>
    #include <QTextEdit>
    
  • 相关阅读:
    推荐书单
    图解Android
    图解Android
    图解Android
    图解Android
    图解Android
    图解Android
    个人博客平台 http://craft6.cn 上线
    数据库设计教程系列——相关知识点整理
    O2O研究系列——O2O知识思维导图整理
  • 原文地址:https://www.cnblogs.com/laohaozi/p/12537563.html
Copyright © 2011-2022 走看看