指向 QMainWindow 更改的指针

Pointer to QMainWindow Changing

本文关键字:指针 QMainWindow 指向      更新时间:2023-10-16

我正在使用Qt创建一个窗口,我有以下代码(这有点伪代码):

class MyInterface {
    virtual void doupdate() = 0;
}
class InterfaceHandler {
    InterfaceHandler(MyInterface *i) {
      the_int = i;
      start_thread(&mainloop);
    }
    void mainloop() {
        while(1) the_int->doupdate();
    }
    MyInterface *the_int;
}
class console : public QMainWindow, public MyInterface {
    console() {
            InterfaceHandler x(this);
    }
    void doupdate() {
        //code to modify the gui
    }
} 
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    console w(argc, argv);
    w.show();
    return a.exec();
}

我的问题是,当the_int->doupdate()mainloop()中调用时,对the_int的引用是错误的。 我认为这与console继承QMainWindow有关,但我不确定解决方案是什么。

MyInterface并不总是被QObject继承。 我试图将doupdate()console拆分为另一个类,该类在构造函数中传递对console的引用,但得到相同的结果。

有什么想法吗?

假设你的"伪代码"与真实代码足够接近,下面是问题所在:

console() {
  InterfaceHandler x(this);
}

一旦构造函数完成,x,作为一个局部(自动)变量,就会被销毁。构造函数返回后,您创建的InterfaceHandler实例将不再存在。

您需要将x保留为该类的成员变量,或者从其他地方创建和存储它。(但是将其保留为成员是有意义的,因为对象的生存期是绑定的。您还需要非常小心该线程,在销毁console之前需要停止它。