无法使用 ui->control->setText(message) 写入 Qt5 文本编辑框



我试图将数据传递给屏幕上的mainwindow.cpp函数,典型的
ui->control->setText(消息)没有成功。如果它在计时器循环或按钮函数中,但不在display_that_data函数

中,则同一行可以工作

"MainWindow::display_that_data()"从myudp.cpp调用,代码如下

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

mainwindow.cpp(更新为包括为signal/SLOT连接发出信号)SIGNAL/SLOT连接在构造函数中使用以下行

建立
    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->tlm_vals

" in display_that_data"
"showdata_slot叫做"
"在display_that_data后发出showdata_signal()"

但是…ui->tlm_vals->setText(msg)行都没有在ui

上放置文本。

"MainWindow::realtimeDataSlot()"被定时器超时信号调用,如下所示:

    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);
    }

这个工作完美(当然我必须禁用它,看看是否showdata_slot写入ui)

我认为问题是需要一个信号和插槽连接来触发写入ui,但生成一个信号/插槽连接(调试显示为工作)仍然不会从插槽功能写入ui。

为了完整起见,mainwindow.h包含以下

    public:
        explicit MainWindow(QWidget *parent = 0);
        ~MainWindow();
        void setupRealtimeDataDemo(QCustomPlot *customPlot);
        void display_that_data (QByteArray data_source, QByteArray tlmBuf);
    private slots:
        void realtimeDataSlot();
        void showdata_slot();
    private:
        Ui::MainWindow *ui;
        QTimer dataTimer;

我错过/做错了什么?

在Qt中的某个地方,gui鼠标点击生成的事件和代码生成的事件之间存在差异,这在某种程度上导致Qt的行为随着同一行代码而变化。关于这个话题,我会再发一个更"根级"的问题。

相关内容

  • 没有找到相关文章

最新更新