【发布时间】:2020-11-10 13:01:21
【问题描述】:
我正在使用 Qt 5.15.1 和 C++ 创建一个简单的应用程序,它处理来自硬件的信号并显示图像和驱动程序状态。当另一个类中定义的 int 值发生更改时,我想更新状态栏消息。我希望每次这个值发生变化时自动发生这种情况。我知道我需要信号和插槽来实现这一点。到目前为止,我已经完成了以下工作:
信号处理.h
class SignalProcessing: public QObject
{
Q_OBJECT
public:
SignalProcessing(QObject *parent = nullptr);
private:
int status;
public slots:
int GetStatus();
signals:
void StatusChanged();
}
信号处理.cpp
SignalProcessing::SignalProcessing(QObject *parent)
: QObject(parent)
{
}
int SignalProcessing::GetStatus()
{
emit(StatusChanged());
return status;
}
主窗口.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
MainWindow(QWidget *parent = nullptr);
virtual ~MainWindow();
SignalProcessing *signalProcessing;
}
主窗口.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
signalProcessing= new SignalProcessing(this);
ui->statusbar->showMessage(QString::number(signalProcessing->GetStatus()));
}
问题是状态栏消息目前没有自动更新,而是设置为给定值。
如何确保它始终显示当前状态?
【问题讨论】:
-
确实,这可以使用signals and slots 来实现。您必须将
StatusChanged信号连接到更新状态栏的插槽。 -
这是否意味着来自 SignalProcessing 类的信号和 MainWindow 类中的插槽?我知道 QStatusBar 有一个名为“showMessage”的公共插槽,它适合这个目的。但是,我如何确保该值是由信号传递的?
-
SignalProcessing和MainWindow之间的连接是最简单的解决方案。如果参数类型匹配,则可以直接连接到showMessage。