我试图将传递给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);
}
我错过了什么/做错了什么?
答案 0 :(得分:0)
深深嵌入Qt的某个地方,gui鼠标点击生成的事件和代码生成的事件之间存在差异,这不知道Qt行为会因同一行代码而变化。我将在这个主题上重新提出一个更“根本级”的问题。