gpt4 book ai didi

c++ - 指向 QMainWindow 改变的指针

转载 作者:行者123 更新时间:2023-11-28 08:04:18 25 4
gpt4 key购买 nike

我正在使用 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 被销毁之前停止。

关于c++ - 指向 QMainWindow 改变的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10605714/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com