指向 QMainWindow 更改的指针
Pointer to QMainWindow Changing
我正在使用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
之前需要停止它。
相关文章:
- 1d 智能指针不适用于语法 (*)++
- 在C#中处理C++指针而不使用unsafe的最佳方法
- 为什么使用 "this" 指针调用派生成员函数?
- 函数向量_指针有不同的原型,我可以构建一个吗
- 使用指针从C++中的数组中获取最大值
- 助记符和指向成员语法的指针
- 嵌入方指针压缩已禁用
- 数组的指针从不分段故障
- C++ 指针的内存地址和指向数组的内存地址如何相同?
- 何时在引用或唯一指针上使用移动语义
- QMetaObject invokeMethod的基于函数指针的语法
- 如何从 std::atomic 中提取指针 T<T>?
- 如何在 C# 中映射双 C 结构指针?
- C++将浮点指针值舍入为小数位数
- 为什么++(*p)更改指针值
- 调整大小后指向元素值的指针unordered_map有效?
- 正在将指针转换为范围
- 使用指向成员的指针将成员函数作为参数传递
- 初始化从 QMainWindow 类到 QDialog 类的 UI 指针
- 指向 QMainWindow 更改的指针