2010-02-26 304 views
2

我已經爲VS插件安裝了Qt和Qt。一切工作正常,UI應用程序編譯和運行沒問題,但連接信號和插槽不。我有Q_OBJECT在我的課,以及用於連接我在構造函數中使用此代碼:Visual Studio中的Qt:連接插槽和信號不起作用

connect(ui.mainTableView, SIGNAL(activated(const QModelIndex &)), 
     this, SLOT(showDetail(const QModelIndex &))); 

編輯:

showDetail方法:

void MyClass::showDetail(const QModelIndex &index) 
{ 
    this->setWindowTitle("it works"); 
} 

窗口標題不會改變,沒有達到斷點。

生成文件目錄中生成moc文件,但該類的moc文件是空的(其他沒有),我認爲這是因爲類沒有信號,但只有一個插槽。

即使由Designer生成的連接不起作用,connect方法的調用返回true

+0

錯誤列表應該有所幫助。發表它。 – Mike 2010-02-26 11:57:09

+0

你應該發佈你的結果作爲答案,而不是問題的一部分。 – 2010-02-26 16:43:57

+0

Caleb Huitt - cjhuitt:done。 – Steve 2010-02-27 17:35:06

回答

0

結果:

哦,不,它原來是一個愚蠢的問題,謝謝大家,所有的答案把我推向瞭解決方案,但最後一步就是找出我的平臺項目通過雙擊才能激活單擊,而不是單個。對不起

2

你有沒有moc正常工作?這可以解釋爲什麼connect沒有做它的事,但一切是...

+0

moc文件在'Generated Files'目錄中生成,但該類的moc文件是空的(其他不是),我認爲這是因爲該類沒有信號,但只有一個插槽。 – Steve 2010-02-26 12:16:03

+0

即使您的類是空的,moc_MyClass.cpp也不應該爲空,您是否從'QObject'繼承了'MyClass'? – Paul 2010-02-26 12:37:59

+0

是的,它從QMainWindow繼承。 (這真的很奇怪。) – Steve 2010-02-26 12:42:18

3

SIGNALSLOT宏刪除變量名:

connect(ui.mainTableView, SIGNAL(activated(const QModelIndex &)), 
    this, SLOT(showDetail(const QModelIndex &))); 

有關詳細信息,請仔細閱讀文件上QObject::connect

+0

這看起來對我來說是正確的答案。 – Skilldrick 2010-02-26 12:19:42

+0

不幸的是,它不適用於我:-( – Steve 2010-02-26 12:25:07

+0

您是否將'MyClass :: showDetail'標記爲'MyClass'類定義中的插槽? – Paul 2010-02-26 12:32:28

0

在Visual Studio 2012,當試圖使用

connect(plot->xAxis, SIGNAL(rangeChanged(QCPRange)), plot->xAxis2, SLOT(setRange(QCPRange))); 

我得到plotSIGNAL錯誤。

這是因爲Visual Studio發現了不正確的連接。它在winsock.h中找到了connect

要解決這個錯誤,我用了QObject命名空間如下:

QObject::connect(plot->xAxis, SIGNAL(rangeChanged(QCPRange)), plot->xAxis2, SLOT(setRange(QCPRange))); 

僅供參考,這裏是錯誤的信息。

對於第一plot參數中的錯誤是:

ERROR: argument of type "QCPAxis*" is incompatible with parameter of type "Socket". 

對於第一SIGNAL誤差爲:

ERROR: argument of type "cosnt Char*" is incompatible with parameter of type "const sockaddr*". 

對於第二plot參數中的錯誤是:

ERROR: argument of type "QCPAxis*" is incompatible with parameter of type "int". 

對於第二個SIGNAL t他的錯誤是:

ERROR: too many arguments in function call.