Re: [問題] Qt使用signal與slot

作者: peder (嗶一聲之後)   2015-05-08 13:22:42
推 DIE755127: 你說的部分是我另外確認連線用的 05/08 12:27
→ DIE755127: 因為我是希望用可以直接在button click內就檢查出是否 05/08 12:29
→ DIE755127: 連線完成 然後再依序做其它事
如果要在 button click 內就檢查完成,可以用 QEventLoop
http://doc.qt.io/qt-4.8/qeventloop.html
t->connectToHost("ptt.cc", 23);
QEventLoop loop;
connect(t, SIGNAL(sockConnected()), &loop, SLOT(quit()));
loop.exec(QEventLoop::AllEvents); // wait here...
// connected
// do what you want here
連線尚未完前都會停在 loop.exec 這行
QEventLoop::AllEvents 是為了不讓 UI 凍結
避免讓使用者以為當掉了
完成後,會呼叫 loop quit() 繼續往下執行
作者: uranusjr (←這人是超級笨蛋)   2015-05-08 18:02:00
如果你上面寫在 UI thread 還是會 freeze, 請盡量不要
作者: peder (嗶一聲之後)   2015-05-08 20:06:00
那可以請問一下 有沒有其它較好的做法?我有試過這個方法,並不會讓 UI 凍結啊?
作者: uranusjr (←這人是超級笨蛋)   2015-05-08 23:06:00
感覺沒有 freeze, 但你在 UI 做很多事情都不會有反應總之有 async API 就用, 不要硬把它搞成 synchronous這裡有一些討論 https://forum.qt.io/topic/20002

Links booklink

Contact Us: admin [ a t ] ucptt.com