无法使用ui-> control-> setText(message)写入Qt5 textEdit框

时间:2016-11-03 17:51:10

标签: qt qt5

我试图将传递给mainwindow.cpp函数的数据放在屏幕上,使用典型的控件 - > gt; setText(消息),但没有成功。如果它在定时器循环或按钮功能中但不是来自display_that_data函数

,则同一行有效

从myudp.cpp调用“MainWindow :: display_that_data()”并使用以下行

dd1

mainwindow.cpp(已更新,包括为SIGNAL / SLOT连接发出信号) SIGNAL / SLOT连接在构造函数中设置,并带有以下行

    MainWindow show_tlm;
    show_tlm.display_that_data(data_source, buf_copy);

运行时调试消息显示代码正在进入showdata_slot,但它仍未写入ui-> tlm_vals

“在display_that_data”中 “showdata_slot称为” “在发出showdata_signal()之后的display_that_data中”

但.... ui> tlm_vals-> setText(msg)行中没有一行将文字放在ui上

“MainWindow :: realtimeDataSlot()”由定时器输出信号调用,如下所示:

    connect (this, SIGNAL (showdata_signal()), this, SLOT(showdata_slot()));



    void MainWindow::display_that_data(QByteArray data_source, QByteArray tlmBuf){
        QString msg ;
        msg = " in display_that_data";
        qDebug() << msg  ;
        ui->tlm_vals->setText(msg);
        //generate a signal which will trigger showdata_slot
        emit showdata_signal();
        msg = " in display_that_data after  emit showdata_signal()";
        qDebug() << msg  ;
    }

    void MainWindow::showdata_slot() {
        QString msg = "showdata_slot called";
        qDebug() << msg ;
        ui->tlm_vals->setText(msg);
    }

这完全有效(当然我必须禁用它以查看showdata_slot是否正在写入ui)

我认为问题是需要SIGNAL和SLOT连接来触发对ui的写入,但生成SIGNAL / SLOT连接(调试显示为工作)仍然不会从插槽函数写入ui。

为了完整性,mainwindow.h包含以下内容

    void MainWindow::setupRealtimeDataDemo(QCustomPlot *customPlot) {
        // setup a timer that repeatedly calls MainWindow::realtimeDataSlot
        connect(&dataTimer, SIGNAL(timeout()), this, SLOT(realtimeDataSlot()));
        dataTimer.start(1000); 
    }

    void MainWindow::realtimeDataSlot(){
        QString temp = QString("%1").arg(epochTime, 10,  10, QChar('0'));
        ui->tlm_vals->setText(temp);
    }

我错过了什么/做错了什么?

1 个答案:

答案 0 :(得分:0)

深深嵌入Qt的某个地方,gui鼠标点击生成的事件和代码生成的事件之间存在差异,这不知道Qt行为会因同一行代码而变化。我将在这个主题上重新提出一个更“根本级”的问题。