Bootstrap

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的一个重要意义,在很多地方都需要用到这样的功能的时候,一个信号函数就显得简单方便多了。

;