我试图将传递给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 (更新为包括为信号/时隙连接发射信号)信号/时隙连接在构造函数中设置如下行
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;我错过了什么/做错了什么?
发布于 2016-11-04 17:22:31
在Qt中的某个地方,gui鼠标单击生成的事件和代码生成的事件之间有一个区别,而这种caues行为随代码行的不同而有所不同。我将在这个主题上重新发布一个更多的“根级”问题。
https://stackoverflow.com/questions/40408166
复制相似问题