QT-显示时覆盖resizeevent发出多个呼叫



我得到了这种奇怪的行为,并从标准小部件中简单地重新实现了resizeevent。通话节目后,调整大小事件被称为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();
}

您的最后一个问题使我做了一些测试,我找到了一个解决方案。

我只是添加构造函数:

this->setGeometry(...)  

这样,我只接到一个resizeevent呼叫(第一个电话)。

我不知道为什么QT进行第二个呼叫,但我可以猜想是设置初始几何。

但是,谢谢您的宝贵时间。它对我有很大帮助!: - )

最新更新