QGridLayout 与 colspan 和 rowspan

Posted

技术标签:

【中文标题】QGridLayout 与 colspan 和 rowspan【英文标题】:QGridLayout with colspan and rowspan 【发布时间】:2014-11-01 11:53:31 【问题描述】:

我无法创建像这样的 QGridLayout。

我试过了,但我失败了

QGridLayout *layout = new QGridLayout;
layout->addWidget(mytableview,0,0,1,3);
layout->addWidget(b1,1,0,1,1,Qt::AlignRight);
layout->addWidget(b2,1,1,1,1,Qt::AlignRight);
layout->addWidget(b3,1,2,1,1);
mainWindow->setLayout(layout);

【问题讨论】:

【参考方案1】:

您不能只使用QGridLayout 来做到这一点。对于底部区域,您需要使用QHBoxLayout 并使用QHBoxLayout::addStretch 添加间距。

这是一个例子:

widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>

class QGridLayout;
class QHBoxLayout;
class QSpacerItem;
class QPushButton;
class QSpacerItem;
class QPushButton;
class QPushButton;
class QTableView;

class Widget : public QWidget

    Q_OBJECT

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

private:
    QGridLayout *gridLayout;
    QHBoxLayout *horizontalLayout;
    QSpacerItem *horizontalSpacerLeft;
    QPushButton *pushButtonB1;
    QSpacerItem *horizontalSpacerRight;
    QPushButton *pushButtonB2;
    QPushButton *pushButtonB3;
    QTableView *tableView;
;

#endif // WIDGET_H

widget.cpp

#include "widget.h"

#include<QGridLayout>
#include<QHBoxLayout>
#include<QSpacerItem>
#include<QPushButton>
#include<QSpacerItem>
#include<QPushButton>
#include<QPushButton>
#include<QTableView>

Widget::Widget(QWidget *parent) :
    QWidget(parent)

    gridLayout = new QGridLayout(this);
    horizontalLayout = new QHBoxLayout();

    horizontalLayout->addStretch(3);

    pushButtonB1 = new QPushButton(this);
    pushButtonB1->setText("B1");

    horizontalLayout->addWidget(pushButtonB1);

    horizontalLayout->addStretch(1);

    pushButtonB2 = new QPushButton(this);
    pushButtonB2->setText("B2");

    horizontalLayout->addWidget(pushButtonB2);

    pushButtonB3 = new QPushButton(this);
    pushButtonB3->setText("B3");

    horizontalLayout->addWidget(pushButtonB3);

    gridLayout->addLayout(horizontalLayout, 1, 0, 1, 1);

    tableView = new QTableView(this);

    gridLayout->addWidget(tableView, 0, 0, 1, 1);


Widget::~Widget()


main.cpp

#include "widget.h"
#include <QApplication>

int main(int argc, char *argv[])

    QApplication a(argc, argv);

    Widget w;
    w.show();

    return a.exec();

结果:

【讨论】:

以上是关于QGridLayout 与 colspan 和 rowspan的主要内容,如果未能解决你的问题,请参考以下文章

布局管理之 QGridLayout (网格布局)

使用与具有不同列数的另一个QGridLayout相同的列间距

html 表 colspan 行跨度 Piet Mondrian

如何在 IE 中选择没有 colspan 的 th

将 DataTables 与 colspan 一起使用时无法读取未定义的属性“mData”

如何停止 QGridLayout 元素的扩展