【问题标题】:Qt Signal is emitter but signal seems not triggeredQt Signal 是发射器,但信号似乎没有被触发
【发布时间】:2015-04-01 15:01:30
【问题描述】:

全部,

我正在开发一个应用程序,在应用程序内部,我需要在值更改时生成一个信号。为此,我更新了 MyDevice 类以在值数据更改时添加 CumulChanged 插槽。

我的设备.cpp

void MyDevice::IncreaseSize(uint64_t size) {
    Device->cumulsizeoperation += size;
    emit CumulChanged();
}

void MyDevice::CumulChanged(){
    qDebug() << "test";
}

我正在输入 increaseSize 并发出 CumulChanged。

我在我的 UI 视图中使用此信号来获取更新进度条的信息。

我在 UI.cpp 中做了什么

connect(this, SIGNAL(MyDevice::CumulChanged()),
        this, SLOT(onUpdateProgress()));

onUpdateProgress 也在 UI 类中定义

void UI::onUpdateProgress(){
    Box->ProgressUpdate();
}

我的 UI 类定义如下:

UI.cpp

UI::UI(DeviceMngr& device) :
    m_device(device)

和 UI.h

class UI : public QTreeWidget
{
    Q_OBJECT
public:
    UI(DeviceMngr& device);
    ~ UI();

private:
    DeviceMngr& m_device;
}

知道为什么没有触发 onUpdateProgress 吗?

谢谢

【问题讨论】:

  • connect 的第一个参数应该指向有信号的类,在你的情况下它应该是MyDevice 类型的指针,而不是UI。另外MyDevice:: 可能是不允许的,当然也不需要,所以你最好删除它。
  • 您的信号中有代码。它不应该。您的连接语法看起来也很奇怪,使用旧的或新的 (qt5) 语法。看起来你没有得到正确的信号和槽。
  • @ddriver。我看不出有什么奇怪的。我总是像这样使用连接,但它只在同一个类中。这是第一次,我期待来自另一个班级的信号
  • @Predelink 谢谢我将删除“this”以避免调用同一类中的方法

标签: c++ qt signals-slots


【解决方案1】:

我假设您在 MyDevice.h 中有类似的内容:

signals:
    void CumulChanged();

然后删除:

void MyDevice::CumulChanged(){
    qDebug() << "test";
}

并将以下行添加到 UI 构造函数:

connect(&device, &MyDevice::CumulChanged, this, &UI::onUpdateProgress);

【讨论】:

  • 谢谢,但你确定我们必须使用这么多 '&' 以及为什么 SIGNAL/SLOT 不在连接命令中
  • Google Qt 新的信号槽语法
  • 我已经尝试了所有建议的解决方案,但没有一个有效。这是错误:错误:没有匹配的成员函数调用'connect'connect(&device, SIGNAL(CumulChanged()), ^~~~~~~
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多