使用FixedSize的小部件可以随意更改其大小

时间:2016-07-30 07:39:07

标签: c++ qt

我在中心窗口小部件中有一个QGridLayout,其中包含一个固定大小的小部件(称为内部窗口小部件),它还有一个填充了按钮的QGridLayout。内部窗口小部件的大小取决于网格中有多少个按钮,并且应该是完全匹配的(按钮之间没有间距,按钮'构造函数中应用了FixedSize策略),以及所有按钮的大小和策略都在构造函数中设置。现在,如果我不将内部窗口小部件放入任何类型的布局中,它可以正常工作,我会得到漂亮的方形按钮。但是如果我将内部窗口小部件放入网格布局中,所有按钮都会突然改变它们的大小,并且窗口小部件似乎也不会保持其大小。为什么呢?

编辑:MyButtonTable:

MyButtonTable::MyButtonTable(QWidget *parent) : QWidget(parent), array()
{
    size_x = 2;
    size_y = 2;
    QGridLayout* layout = new QGridLayout();
    for(size_t x = 0; x < size_x; x++) {
        this->array.push_back(std::vector<MyRightClickButton*>());
    }
    for(size_t x = 0; x < size_x; x++) {
        for(size_t y = 0; y < size_y; y++) {
            this->array[x].push_back(new button_t());
            QObject::connect(array[x][y], SIGNAL(rightClicked()), this, SLOT(internalRightClick()));
            QObject::connect(array[x][y], SIGNAL(clicked()), this, SLOT(internalClick()));
            layout->addWidget(array[x][y], x, y);
        }
    }
    layout->setSpacing(0);
    layout->setContentsMargins(0,0,0,0);
    this->setLayout(layout);
    this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
    this->setMinimumSize(QSize(0,0));
    this->resize(QSize(10*size_y,10*size_x));
}

MyRightClickButton(QWidget *parent = 0):QPushButton(parent) {
        marked = false;
        this->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
        this->setMinimumSize(QSize(0,0));
        this->resize(QSize(10,10));
    }

1 个答案:

答案 0 :(得分:0)

布局管理器用于在其中排列子窗口小部件。该安排指定每个布局管理器。布局管理器根据调整大小策略调整子窗口小部件的大小。即使您使用resize()或setGeometry()为子窗口小部件设置固定大小,如果您没有设置子窗口小部件的调整大小策略,它们也会由布局管理器调整大小。

例如

widget->setFixedSize (100, 100);
widget->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);

这是应该如何做的。