2015-03-31 101 views
0

所有,Qt的信号是发射器,但信号似乎没有触发

我开发一个应用程序,该应用程序里面,我需要当值变为产生的信号。为此,我更新了班级MyDevice,以在值数据更改时添加CumulChanged插槽。

MyDevice.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没有触发?

感谢

+1

'connect'的第一个参数应该指向有信号的类,在你的情况下,它应该是一个'MyDevice'类型的指针而不是'UI'。另外'MyDevice ::'可能不被允许,当然也不需要,所以你最好删除它。 – Predelnik 2015-03-31 20:51:23

+0

你的信号有代码。它不应该。你的连接语法看起来很奇怪,要么使用旧的或新的(qt5)语法。看起来你一般没有得到信号和插槽。 – dtech 2015-03-31 21:43:12

+0

@ddriver。我看不出有什么奇怪的。我总是使用这样的连接,但它只在相同的类。这是第一次,我希望的信号从其它类 – Seb 2015-03-31 22:08:47

回答

1

我假设你有MyDevice.h是这样的:

signals: 
    void CumulChanged(); 

然后取出:

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

,并添加下面一行到UI构造:

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

感谢,但你确定我们要使用这么多的“&”和为什么信号/槽是不是在连接命令 – Seb 2015-04-01 01:27:43

+0

谷歌Qt的新的信号插槽语法 – 2015-04-01 01:38:35

+0

我已经尝试了所有提出的解决方案,但没有一个人的作品。这里是错误: 错误:没有匹配的成员函数调用'connect' connect(&device,SIGNAL(CumulChanged()), ^ ~~~~~~ – Seb 2015-04-01 09:40:39