我使用Qt來創建一個窗口,我有以下代碼(這多少有些僞代碼):指向的QMainWindow更改
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
的引用,但獲得相同的結果。
任何想法?
'the_int'應該被稱爲'the_iface'或其他東西,因爲在一個C++問題中,我們通常假設'the_int'是一個整數。但無論如何......這是否只發生在與線程交互(例如可以在InterfaceHandler構造函數中調用'doupdate()',但以後變壞?) – HostileFork
如何分配控制檯對象?這不是在堆棧上嗎? –
'the_int'就在這個例子中。是的,這似乎是線程問題。當我在構造函數中調用它時,我沒有任何問題。我在創建它之後(在構造函數中)打印出指針的位置,然後在我調用'mainloop()'時再次打印指針的位置,但它們不同。上面已經添加了我的'console'分配。 – zsalzbank