我创建了一个GUI宽度Qt Creator(Qt 5.0.1),当然也使用了布局。出于美学原因,我希望QPushButton的宽度与放置在GUI的其他角落的另一个QPushButton的宽度相同。更改窗口大小时,此其他按钮会动态更改大小,这是所需的行为。
有没有办法(动态)链接这些按钮的大小而不改变布局?如果可能的话,我想避免固定尺寸。
答案 0 :(得分:2)
您可以覆盖第一个resizeEvent并将信号(带大小)发送到第二个。
答案 1 :(得分:0)
我会提出以下解决方案(没有子类按钮类)。实际上,下面的代码可用于同步任何小部件,而不仅仅是QPushButtons
。
SizeSynchronizer类:
/// Synchronizes the given widget's size with other's - one that the SizeSynchronizer installed on.
class SizeSynchronizer : public QObject
{
public:
SizeSynchronizer(QWidget *w)
:
m_widget(w)
{}
bool eventFilter(QObject *obj, QEvent *ev)
{
if (m_widget) {
if (ev->type() == QEvent::Resize) {
QResizeEvent *resizeEvent = static_cast<QResizeEvent *>(ev);
m_widget->resize(resizeEvent->size());
}
}
return QObject::eventFilter(obj, ev);
}
private:
QWidget *m_widget;
};
简单演示课程用法 - 同步两个按钮:
int main(int argc, char *argv[])
{
[..]
// First button will be synchronized with the second one, i.e. when second
// resized, the first one will resize too.
QPushButton pb1("Button1");
QPushButton pb2("Button2");
// Create synchronizer and define the button that should be synchronized.
SizeSynchronizer sync(&pb1);
pb2.installEventFilter(&sync);
pb2.show();
pb1.show();
[..]
}