QTextEdit实时显示运行结果

    xiaoxiao2026-08-25  0

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

    转载请注明原文地址: https://ju.6miu.com/read-1311553.html
    最新回复(0)