Qt跨类访问GUI界面或用connect更新UI元素的实现问题
如何从其他类/文件访问Qt GUI的UI界面
背景
我在一个控制USRP收发数据的多文件项目中工作,项目包含多种参数(起始频率、步长、接收时长等)。原本需要手动修改多个cpp文件的参数值,重新编译后运行可执行文件。现在我在main.cpp中编写了一个简单的Qt GUI界面,用户可在GUI中输入USRP接收基础参数,界面能将这些值传入执行USRP功能的函数,这部分已正常运行。
我希望在主GUI窗口通过LCDNumber部件显示当前频率,该频率由另一个cpp文件中的类管理。
我的尝试
尝试1:直接在频率类中访问MainWindow的UI
在freq_transmit.cpp中引入相关头文件后,尝试直接操作UI组件:
// freq_transmit.cpp ...... #include "mainwindow.hpp" #include "ui_mainwindow.hpp" ..... void Receiver::run() { // 大量USRP相关代码 ..... rxCenterFreq; // <--- 存储当前频率的变量(每秒变化) ui->lcdnumber->display(rxCenterFreq); // <--- 编译错误:ui未在此作用域中声明 ............
mainwindow.h代码未修改,编译报错:ui not declared in this scope。
尝试2:使用Qt信号槽机制
步骤1:在freq_transmit.hpp头文件中定义信号
// freq_transmit.hpp .... signals: void sendTXFreq(double a);
步骤2:在freq_transmit.cpp中发射信号
// freq_transmit.cpp ...... #include "mainwindow.hpp" #include "ui_mainwindow.hpp" ..... void Receiver::run() { // 大量USRP相关代码 ..... emit sendTXFreq(rxCenterFreq); // 向QT发射信号 ....
步骤3:在mainwindow.h中声明接收信号的槽函数
// mainwindow.h ... public slots: void updateTXFreq(double a);
步骤4:实现槽函数并建立信号槽连接
// mainwindow.cpp .... void MainWindow::updateTXFreq(double a) { ui->lcdnumber->display(a); } connect(&Receiver, &Receiver::sendTXFreq, this, &MainWindow::updateTXFreq); // <--- 编译错误:','前需要主表达式
编译错误出在&Receiver处,Receiver是包含run()函数的类。
核心需求
将动态生成的频率值关联到LCDNumber部件,使其在USRP代码运行时实时在GUI上显示频率值。
注:我是C++和Qt GUI的初学者,有人建议在freq_transmit.cpp中创建MainWindow的指针以直接访问UI元素,但尝试后并未成功,希望得到指导。
内容的提问来源于stack exchange,提问作者NoRainDropsInTheSky
相关产品推荐
相关产品推荐

