我在中心窗口小部件中有一个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));
}
答案 0 :(得分:0)
布局管理器用于在其中排列子窗口小部件。该安排指定每个布局管理器。布局管理器根据调整大小策略调整子窗口小部件的大小。即使您使用resize()或setGeometry()为子窗口小部件设置固定大小,如果您没有设置子窗口小部件的调整大小策略,它们也会由布局管理器调整大小。
例如
widget->setFixedSize (100, 100);
widget->setSizePolicy (QSizePolicy::Fixed, QSizePolicy::Fixed);
这是应该如何做的。