• 1.Basic Layouts


      使用过mfc编程,就知道控件需要自己拖放。当一个界面有很多小控件时,摆放这些控件特别麻烦。

      但是qt编程中有布局(Layout),让系统来摆放控件。使整个控件有一致的外观和感觉,特别方便。

    1.水平方向的布局 QHBoxLayout

          

    思考:

    简单的把控件添加到布局里面就ok了。

        horizontalGroupbox = new QGroupBox("Horizontal Layout");
        hlayout = new QHBoxLayout;
    
        QPushButton *button1 = new QPushButton("Button1");
        QPushButton *button2 = new QPushButton("Button2");
        QPushButton *button3 = new QPushButton("Button3");
        QPushButton *button4 = new QPushButton("Button4");
    
        hlayout->addWidget(button1);
        hlayout->addWidget(button2);
        hlayout->addWidget(button3);
        hlayout->addWidget(button4);
    
        horizontalGroupbox->setLayout(hlayout);

    2.栅格布局。QGridLayout

          

    思考:

    1.grid layout是按行列来进行布局的。

    2.这个布局有4行,3列。

    3.第一行只有一个QTextEdit,但是它横跨4行。

    4.第二列比第一列长,第三列比第二列长。原因是调用了 setRowStretch()函数。

        gridGroupbox = new QGroupBox("Grid Layout");
        gridLayout = new QGridLayout;
    
        label1 = new QLabel("Line1");
        label2 = new QLabel("Line2");
        label3 = new QLabel("Line3");
    
        lineEdit1 = new QLineEdit;
        lineEdit2 = new QLineEdit;
        lineEdit3 = new QLineEdit;
        textEdit = new QTextEdit;
    
        textEdit->setPlainText(tr("This widget takes up two thirds of grid layout"));
    
        gridLayout->addWidget(textEdit, 0, 2, 4, 1);
        gridLayout->addWidget(label1, 1, 0);
        gridLayout->addWidget(label2, 2, 0);
        gridLayout->addWidget(label3, 3, 0);
        gridLayout->addWidget(lineEdit1, 1, 1);
        gridLayout->addWidget(lineEdit2, 2, 1);
        gridLayout->addWidget(lineEdit3, 3, 1);
    
        gridLayout->setRowStretch(1, 10);
        gridLayout->setRowStretch(2, 20);
    
        gridGroupbox->setLayout(gridLayout);

    3.表单布局 QFormLayout

        

    思考:

    1.表单布局是一种只有2列的布局。

    2.表单布局可以用gridlayout实现,但是表单布局简单一些。

    3.addRow方法,直接添加label 和 widget。

        formGroupBox = new QGroupBox("Form Layout");
        formLayout = new QFormLayout;
    
        formLineEdit = new QLineEdit;
        comboBox = new QComboBox;
        spinBOx = new QSpinBox;
    
        formLayout->addRow(tr("Line1"),  formLineEdit);
        formLayout->addRow(tr("Line2,Long Text:"),  comboBox);
        formLayout->addRow(tr("Line3"),  spinBOx);
    
        formGroupBox->setLayout(formLayout);

    4.竖直方向布局。

    把刚才布局都添加到竖直布局,就是我们整个程序

        mainLayout = new QVBoxLayout;
        mainLayout->addWidget(horizontalGroupbox);
        mainLayout->addWidget(gridGroupbox);
        mainLayout->addWidget(formGroupBox);
        mainLayout->addWidget(bigTextEdit);
        mainLayout->addWidget(buttonBox, 0, Qt::AlignRight);

      

  • 相关阅读:
    多线程环境下调用 HttpWebRequest 并发连接限制
    i—比 i++ 快?
    文件在不同文件系统间拷贝文件时间改变的问题
    Go websocket 聊天室demo2
    Go websocket 聊天室demo以及k8s 部署
    AcWing 1077. 皇宫看守
    AcWing 1073. 树的中心
    AcWing 1085. 不要62
    AcWing 1081 度的数量
    AcWing 1082. 数字游戏
  • 原文地址:https://www.cnblogs.com/billxyd/p/6919454.html
Copyright © 2020-2023  润新知