3
我的GUI中有一個插槽功能需要時間來完成(10-15秒)。 我想灰色的佈局,並顯示一個「Please wait ...」,當插槽功能完成後將消失。在插槽功能運行時顯示「Please wait ...」框
我需要它是異步的,因爲我想在「Please wait ...」窗口中使用QProgressBar
小部件。
這怎麼辦?
我的GUI中有一個插槽功能需要時間來完成(10-15秒)。 我想灰色的佈局,並顯示一個「Please wait ...」,當插槽功能完成後將消失。在插槽功能運行時顯示「Please wait ...」框
我需要它是異步的,因爲我想在「Please wait ...」窗口中使用QProgressBar
小部件。
這怎麼辦?
您的長時間運行的插槽應該在QThread中運行,而您的「Please wait ...」小部件應該在主GUI線程中模態化。
你可以使用QProgressDialog也許choose a windowflag適合您的顯示器的需求,或自定義窗口小部件。但長時間運行的操作應該在模態阻止對話框完成時發出信號,導致對話框隱藏。
如果您的插槽是重複的很多循環,您可以在不創建新線程的情況下執行此操作。簡單地說,每一步調用QCoreApplication :: processEvents() – 2012-03-12 08:24:22
我會採取一點鹽的建議。是的,你可以在主線程中做這樣的操作。你不會在每個循環中調用processEvents,但是會間隔。我仍然認爲它不是最好的設計,因爲某些事情會在一段時間內阻塞。 Ita真的更好地把你的非gui工作放到一個線程中。它易於操作並且易於發射信號。 – jdi 2012-03-12 15:00:48
當然這不適合每一個操作,但如果你的「阻塞過程」只包含輕量級操作(但其中很多),那麼我認爲把QThread放在那個地方並不是最好的設計。 – 2012-03-12 17:10:39