Qt - 重写ResizeEvent在显示时给出多个调用

时间:2015-05-13 19:44:43

标签: qt events resize

我通过从标准Widget重新实现ResizeEvent来获得这种奇怪的行为。调用show后,调用resize事件2次。我用断点跟踪行为(参见下面的"< - - - - ")我得到了这个:

  • 第一个电话:
    • event-> oldSize =( - 1,-1)
    • event-> size =(5,13)
  • 第二个电话:
    • event-> oldSize =(640,480)
    • event-> size =(640,480)

第一个电话看起来很连贯。但是,是否有人可以向我解释为什么我的第二次调用具有不一致的值以及如何摆脱第二次调整大小事件?

class MyClass : public QLabel
{
    Q_OBJECT

public:
    MyClass(QWidget *parent = 0, Qt::WindowFlags f = 0);
   ~MyClass();

protected:
    void resizeEvent(QResizeEvent *event);
};

MyClass::MyClass(QWidget *parent, Qt::WindowFlags f)
: QLabel(parent, f)
{
}

MyClass::~MyClass()
{
}

void MyClass::resizeEvent(QResizeEvent *event)
{
    int a = 0;  //   <- - - - use break point here
}

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyClass w;
    w.show();
    return a.exec();
}

1 个答案:

答案 0 :(得分:0)

你的上一个问题让我做了一些测试,我找到了解决方案。

我只是添加构造函数:

this->setGeometry(...)  

有了这个,我只得到一个resizeEvent调用(第一个)。

我不知道为什么Qt会进行第二次调用,但我可以猜测是设置初始几何。

但是,谢谢你的时间。它对我帮助很大! : - )