zoukankan      html  css  js  c++  java
  • [Qt] 布局管理:分割窗口QSplitter类

    最近,在学习Qt编写界面的时候遇到一个问题,但网上没有看到讲解的。记录一下,以防下次在遇到这种问题。

    首先,介绍一个QSplitter类,参考的是陆文周主编的《Qt 5开发及实例》

    实例效果:

    代码:

     1 #include <QApplication>
     2 #include <QSplitter>
     3 #include <QTextEdit>
     4 #include <QTextCodec>
     5 int main(int argc, char *argv[])
     6 {
     7     QApplication a(argc, argv);
     8     //ont::QFont(const QString & family, int pointSize = -1, int weight = -1, bool italic = false)
     9     //第一个参数是字体族,第二个是字体尺寸,第三个是加粗系数,第四个是斜体设置
    10     QFont font("ZYSong18030",12);//指定显示字体
    11     a.setFont(font);
    12 
    13     QSplitter *splitterMain;
    14     QTextEdit *textleft;
    15     QSplitter *splitterRight;
    16     QTextEdit *textUp;
    17     QTextEdit *textBottom;
    18     splitterMain=new QSplitter(Qt::Horizontal,0);                   //Horizontal:水平的
    19     textleft=new QTextEdit(QObject::tr("Left Widget"),splitterMain);
    20     textleft->setAlignment(Qt::AlignCenter);
    21     //右部分分割窗口
    22     splitterRight=new QSplitter(Qt::Vertical,splitterMain);        //Vertical:垂直的
    23     splitterRight->setOpaqueResize(false);                                    //Opaque:不透明的
    24     textUp =new QTextEdit(QObject::tr("Top Widget"),splitterRight);
    25     textUp->setAlignment(Qt::AlignCenter);
    26     textBottom=new QTextEdit(QObject::tr("Bottom Widget"),splitterRight);
    27     textBottom->setAlignment(Qt::AlignCenter);
    28     splitterMain->setStretchFactor(0,1);                                      //Stretch Factor:拉伸系数
    29     splitterMain->setWindowTitle(QObject::tr("Splitter"));
    30     splitterMain->show();
    31 
    32     return a.exec();
    33 }
    View Code

    字体设置:

    QFont::QFont(const QString & family, int pointSize = -1, int weight = -1, bool italic = false)

    这是QFont对象的构造函数之一,第一个参数是字体族,第二个是字体尺寸,第三个是加粗系数,第四个是斜体设置。

    设置QTextEdit控件的父对象和段落对齐方式:

    textleft=new QTextEdit(QObject::tr("LeftWidget"),splitterMain);
    textleft->setAlignment(Qt::AlignCenter);

    对于每个控件的构造函数,都会有一个默认为0的参数设置其父对象。
    而QTextEdit::setAlignment函数设置其段落对齐方式。

    初始化QSplitter控件的分割方向和其缩放风格

    splitterRight=new QSplitter(Qt::Vertical,splitterMain);
    splitterRight->setOpaqueResize(true)

    QSplitter类的构造函数第一个参数表示该分割窗口是水平分割还是垂直分割,第二个参数是其父对象。
    QSplitter的setOpaqueResize设置了分割窗口在缩放时的风格。

    设置QSplitter的伸缩因子

    splitterMain->setStretchFactor(1,0); 

    setStretchFactor( int index, int stretch )用于设定可伸缩控件。

    第一个参数指定要设置控件的序号(按插入顺序从0依次编号);第二个参数大于0时表示此控件为可伸缩控件。
    在上面的实例中,splitterMain对象中,共有两个控件:一个是左边的textleft控件,另一个是右边的splitterRight对象。那么上面的这行代码就表明,在整个窗口也就是splitterMain在缩放时,splitterRight对象会保持不伸缩状态。但是当我们去缩放的时候,发现两个分割窗口都发生了伸缩。我猜测是因为所有的控件都是默认伸缩的。

    小注:

    如果parent=0 ( 默认值),则新建的窗口部件一定将是一个窗口;

    至此,主要是书中给出的代码及实例,但在使用时,可能是在一个widget类中,那么一定会认为只需要把上面代码放置自定义的窗口类中,并将parent = 0 变成 parent = this。

    但是我这样修改后,会出现这样的错误

    分割窗口都缩到了左上角,那么如何解决呢

    this->setCentralWidget(splitterMain);

    在下面加一句设置中心窗口就可以了。

    当然这只是我找到的解决方法,不知道是否正确,如有大佬指点感激不尽。

  • 相关阅读:
    Cocos2dx开发游戏移植到Android平台
    cocos2dx创建sprite的多种方法
    C++实现大数据乘法
    使用detours实现劫持
    使用C与C++混合编程封装UDP协议
    C++实现大数据乘法
    使用C与C++混合编程封装UDP协议
    python字符串类型
    python数字类型
    python数据类型
  • 原文地址:https://www.cnblogs.com/SoulSecret/p/15062335.html
Copyright © 2011-2022 走看看