我正在爲一些計算密集型任務(機器視覺)開發C++類庫。如何從非Qt C++庫類向Qt GUI提供反饋?
// I am a part of a Qt-agnostic library
class Cruncher
{
/* ... */
public:
void doStuff();
};
然後有一個使用該庫的Qt GUI。我創建一個工作線程從庫中調用繁重工作程序:
// I am a part of a Qt-based GUI which utilizes the library
class Worker : public QThread
{
/* ... */
protected:
virtual void run()
{
/* ... */
Cruncher c;
for (int i = 0; i < count; ++i)
c.doStuff(); // takes some time, and while it's working
// it should communicate status changes which should
// become visible in the GUI
}
};
現在裏面doStuff()很多情況,我想提供一些反饋,對正在發生的事情,而無需等待用戶爲doStuff()返回。首先,可能需要一些更好的進度報告,而不是在每次調用doStuff()之後增加一個步驟。此外,doStuff()可能會遇到非關鍵性故障,因此它可以繼續執行部分工作,但是當Cruncher正在工作時(並且Worker正在忙於進行調用),我希望在GUI中出現一條消息做東西())。
我想庫保持Qt獨立,所以我不願意爲Cruncher添加信號和插槽。任何其他方式使它能夠向GUI提供反饋,以在其不是Qt類時報告其工作?
我正在考慮創建一個QTimer,它會在Worker正在運行時以固定的時間間隔輪詢Cruncher的某些「狀態」和「errorMsg」成員,但這看起來非常不理想。
你已經擁有的QThread那裏,所以它不是很Qt的獨立... – hyde
的QThread的是GUI,而不是在圖書館。我希望圖書館(一個可以用於其他非互動,非GUI程序的獨立項目)保持Qt獨立。 – neuviemeporte