网格布局内的qt垂直和水平布局?

标签 qt

Actual One
Desired One

我是 Qt 应用程序开发的新手。我附上了两个屏幕截图,一个是所需的用户界面,另一个是使用代码创建的。
我相信我的代码会解释一些事情,而不是我在这里打字并在这里混淆我所有的 friend 。什么需要改变/更新?

    /*    HEADER FILE    */

    #ifndef WIDGET_H
    #define WIDGET_H

    #include <QWidget>

    namespace Ui {
    class Widget;
    }

    class Widget : public QWidget
    {
        Q_OBJECT

    public:
        explicit Widget(QWidget *parent = 0);
        ~Widget();

    private:
       // Ui::Widget *ui;
    };

    #endif // WIDGET_H

    /*Implementation  Code */

    #include "widget.h"
    #include "ui_widget.h"
    #include<QGridLayout>
    #include<QVBoxLayout>
    #include<QHBoxLayout>

    Widget::Widget(QWidget *parent) :
        QWidget(parent)//,
        //ui(new Ui::Widget)
    {
        this->setGeometry(50,50,850,650);
        QGridLayout *gridLayout= new QGridLayout(this);
        setLayout(gridLayout);
        QVBoxLayout *vLayout =  new QVBoxLayout(this);
        QHBoxLayout *hLayout =  new QHBoxLayout(this);
        //QWidget *tmp1 = new QWidget(this);
        //QWidget *tmp2 = new QWidget(this);
       // tmp1->setLayout(vLayout);
       // tmp2->setLayout(hLayout);

        gridLayout->addLayout(vLayout,0,3);
        gridLayout->addLayout(hLayout,3,0);
        //gridLayout->addWidget(tmp1,0,3,1,1);
        //gridLayout->addWidget(tmp2,3,0,1,1);

        QWidget *w =  new QWidget(this);

        QWidget *w1 =  new QWidget(this);
        QWidget *w2 =  new QWidget(this);
        QWidget *w3 =  new QWidget(this);

        QWidget *w11 =  new QWidget(this);
        QWidget *w22 =  new QWidget(this);
        QWidget *w33 =  new QWidget(this);


        QWidget *w4 =  new QWidget(this);
        QWidget *w5 =  new QWidget(this);

        w->setStyleSheet("background-color:rgb(0,0,0);");

        w1->setStyleSheet("background-color:rgb(255,0,0);");
        w2->setStyleSheet("background-color:rgb(255,0,255);");
        w3->setStyleSheet("background-color:rgb(0,255,0);");

        w11->setStyleSheet("background-color:rgb(255,0,0);");
        w22->setStyleSheet("background-color:rgb(255,0,255);");
        w33->setStyleSheet("background-color:rgb(0,255,0);");

        w4->setStyleSheet("background-color:rgb(0,0,255);");
        w5->setStyleSheet("background-color:rgb(255,255,0);");

        vLayout->addWidget(w1);
        vLayout->addWidget(w2);
        vLayout->addWidget(w3);

        vLayout->addWidget(w11);
        vLayout->addWidget(w22);
        vLayout->addWidget(w33);

        hLayout->addWidget(w4);
        hLayout->addWidget(w5);

        gridLayout->addWidget(w,0,0,2,2);
        show();
    }

    Widget::~Widget()
    {
        //delete ui;
    }

最佳答案

代码看起来并不那么糟糕。在我看来,您只需要调整 addWidget/addLayout 调用的参数即可。想想你的网格布局应该是什么样子,然后相应地选择参数。

我会像这样尝试:

// Desired grid layout is of size 2x2:
// .................
// . row0  . row0  .
// . col0  . col1  .
// .................
// . row1  . row1  .
// . col0  . col1  .
// .................

// Big widget at row 0, column 0
gridLayout->addWidget (w, 0, 0);

// "Horizontal group" at row 1, column 0
gridLayout->addLayout (hLayout, 1, 0);

// "Vertical group" at rows 0+1 (i.e. rowspan 2), column 1
gridLayout->addLayout (vLayout, 0, 1, 2, 1);

这样做会更好吗(我自己还没有尝试过)?

关于网格布局内的qt垂直和水平布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34658172/

相关文章:

c++ - 常量类成员、赋值运算符和 QList

c++ - QTreeWidgetItem 更改 - 检测 Enter/ESC

python - 如何在 Qt 中使用间隔符

c++ - Qt 上的滚动标签列表

c++ - 为什么 Qt 在信号和槽中抛出 lambda 表达式错误?

c++ - 无法使用 QProcess 在 cmd.exe 中执行复制命令

c++ - 无法使用 QProcess 运行简单的控制台程序

c++ - Qt 渲染的几种方式

c++ - Visual Studio 2012 错误 LNK2019 : unresolved external symbol, 链接正在运行的静态库

c++ - QT中使用QjsonDocument解析api数据