将QPushButton宽度链接到另一个QPushButton

时间:2013-09-27 07:39:34

标签: c++ qt qpushbutton

我创建了一个GUI宽度Qt Creator(Qt 5.0.1),当然也使用了布局。出于美学原因,我希望QPushButton的宽度与放置在GUI的其他角落的另一个QPushButton的宽度相同。更改窗口大小时,此其他按钮会动态更改大小,这是所需的行为。

有没有办法(动态)链接这些按钮的大小而不改变布局?如果可能的话,我想避免固定尺寸。

2 个答案:

答案 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();
    [..]
}