1. 程式人生 > >QTextEdit實時顯示執行結果

QTextEdit實時顯示執行結果

最近用Qt介面程式用來處理序列影象的目標檢測,每次輸入一組序列圖,檢測結果(每一幀影象上目標的個數,對應座標,置信度等)除了以影象形式實時顯示意外,還需要以文字形式顯示在介面上。

我採用了QTextEdit控制元件來顯示文字。實現主要流程如下:

1,每一幀影象檢測完成後,呼叫一個訊息函式,訊息函式的引數為要顯示的QString;

2,收到訊息後槽函式執行文字顯示函式。

示例:

1.h:

Signals:

void sendMessage(QString msg);//訊號函式只有宣告,不需要寫定義

1.cpp:

for(int i=0,i<resultCount;i++)

{

QString  message=QString("第%1 個目標  x=%2 y=%3  width=%4  height=%5  置信度=%6”).arg(i).arg(result[i].x).arg(result[i].y).arg(result[i].w).arg(result[i].h).arg(result[i].v);

sendMessage(message);//傳送訊號

}

2.h:

public slots:

void receiveMeaage(QString msg);//槽函式

2.cpp:

void MyClass::receiveMeaage(QString msg)

{

ui.myTextEdit->append(msg);//新增字串作為一個段落到TextEdit控制元件中

}

以上完成了訊號傳送和字串顯示到控制元件上的部分,完事具備,只欠東風,將訊號函式和槽函式連線起來就好了。

QObject::connect(this,SIGNAL(sendMessage(QString)),this,SLOT(recieveMessage(QString)));//這裡的QString就是QString(有點繞,就是說這裡寫型別名而非變數名)

至此就實現將程式執行中間結果實時傳輸到介面上顯示了。

再說兩個小點:

1,arg()函式是QString的公有函式,可以很方便地替代字串中的變數,用%1,%2,%3.....表示字串中的變數(比如每幀影象的中間結果),arg()是過載函式,還可以控制被替換變數的格式,功能比較實用。

2,其實也可以不用訊號和槽的形式,直接將槽函式的內容加到傳送訊號函式的位置,但這樣不免失去了Qt的一個重要意義,在很多地方都需要用到這樣的功能的時候,一個訊號函式就顯得簡單方便多了。