QtridLayout中的Qt空格列?

时间:2014-02-17 09:06:41

标签: c++ qt layout

我有以下代码,我在QGridLayout中放置了一个按钮和一个文本框。注意我使用第3列和第4列来放置它们。

    QGridLayout *insAddPanel = new QGridLayout();
    {
        QLineEdit* ledInstrumentName = new QLineEdit();
        insAddPanel->addWidget(ledInstrumentName, 0, 3);

        QPushButton* btnAddInstrument = new QPushButton();
        btnAddInstrument->setText("Add");
        insAddPanel->addWidget(btnAddInstrument, 0, 4);
    }
    mainLayout->addLayout(insAddPanel);
    ......

然而,当我运行这个时,我会得到这样的结果:

enter image description here

我希望文本编辑和按钮只占用可用水平空间的2/5。这就是我将它们放在第3和第4列的原因。由于这不起作用,我该如何完成?在Qt中有类似空的空间小部件吗?我搜索但没找到它。

3 个答案:

答案 0 :(得分:8)

使用void QGridLayout::setColumnStretch ( int column, int stretch )

您可以为所有列设置stretch = 1。它会给你想要的视图。

答案 1 :(得分:1)

使用QHBoxLayout,添加一些垫片,并设置正确的拉伸系数。 QSpacerItem - 是关于你原来的问题。

有没有理由使用网格布局?

答案 2 :(得分:0)

您可以使用QGridLayout::setColumnMinumumWidth(int column, int minSize)将列column的宽度设置为minSize像素。这也适用于空列。在你的情况下,你会做这样的事情:

insAddPanel->setColumnMinimumWidth(0, 100);    //Makes the empty column 0 100 pixels wide
insAddPanel->setColumnMinimumWidth(1, 100);    //Makes the empty column 1 100 pixels wide
insAddPanel->setColumnMinimumWidth(2, 100);    //Makes the empty column 2 100 pixels wide

100更改为您希望列宽的像素数。

此外,如果您使用此解决方案,则不需要三列,一列非常大就足够了。

还有一个setRowMinimumHeight方法对行执行相同的操作。