2015-03-31 95 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