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