看板 C_and_CPP 關於我們 聯絡資訊
※ 引述《stanely321 (沒有心情的心情)》之銘言: : 當我接收到來自internet的訊息時會有一個function被執行,這個function我稱它 : calldraw() : calldraw做的事很容易,就是使用一個mainwindows *p,去呼叫 _draw(),所以就是 : p->_draw(); 其中p是一個global 的point,它在mainwindows的建構子中用p=this; : 儲存了物件位址。 : _draw()內容如下 : { : psubwindows = new subwindows; : psubwindows->show(); : } : 這樣的寫法compile可以過,所以此程式可執行,但執行的結果是 : QPixmap: It is not to use pixmaps outside the GUI thread : test: Fatal IO error: client killed 因為 GUI 的操作只能在 main-loop (也就是它說的 GUI thread) 派發 但是你可以利用 signal/slot 來通知 GUI thread 比較簡單的方法可能是 void calldraw() { QTimer::singleShot( 0, p, SLOT( somethingYouWant() ) ); } 建立一個立即觸發的 timer 去觸發 slots 然後所有 GUI 的操作都由 mainwindow 的 slots 完成 可以試試看還會不會有錯誤 -- 自High筆記(半荒廢) http://legnaleurc.blogspot.com/ -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 112.104.49.238
stanely321:試過了、不過有錯誤訊息,然後程式沒當掉可是也沒劃出 11/23 19:04
stanely321:我想要的視窗,錯誤訊息如下: 11/23 19:04
stanely321:QObject::startTimer: QTimer can only be used with 11/23 19:04
stanely321:threads started with QThread 11/23 19:05
stanely321:很謝謝你的幫忙,如果有新的想法、還請不吝提供。 11/23 19:06
stanely321:更正一下、因為我在第一個para中填了數字,才會這樣 11/23 19:20
stanely321:若按照您的方式填入0,則一樣不成功,但錯誤訊息是 11/23 19:20
stanely321:QMetaObject::invokeMethod: No such method obj:: 11/23 19:21
stanely321:member function 11/23 19:21
legnaleurc:well, 那就從 QApplication 下手吧 ... 11/23 19:30
legnaleurc:繼承它,把 calldraw() 宣告為 static member 11/23 19:31
legnaleurc:在裡面 emit qApp->yourSignal(); 11/23 19:32
stanely321:請問是誰繼承誰? 11/24 00:07
stanely321:題外話、今天找書、天瓏沒有QT的書,其它也都沒有... 11/24 00:08
legnaleurc:class MyApp : public QApplication {}; 11/24 00:09
hilorrk:英文書可以嗎? 11/24 01:57
stanely321:我有電子書、不過我的問題是QT經驗問題,所以想找實戰 11/24 09:14
stanely321:類的書。可以汲取一些經驗,不用自己花時間累積。 11/24 09:14
uranusjr:官方推薦的那本還滿實戰的 (我覺得啦) 11/24 15:50
stanely321:這個問題解掉了,晚一點下班後再來PO解法。 11/24 15:56