2013-04-02 89 views
1

我正在使用QT框架。我一直在使用SIGNAL-SLOT。我喜歡。 :-) 但是當我使用QThread時,我無法使它工作。我總是使用「moveToThread(QThread ...)」函數創建新線程。 有什麼建議嗎? :-)信號插槽無法使用QThread

的錯誤信息是:

對象::連接:沒有這樣的槽連接:: acceptNewConnection(QString的,INT)在.. \ MultiMITU600 \ mainwindow.cpp:14 對象::連接: (發件人名稱:'MainWindow')

我已閱讀有關類似問題的消息,但這些問題沒有連接到QThread。

謝謝,大衛

編輯:你問源代碼 這裏是一個:

下面是代碼:

,它包含信號和新線程的主類:

mainwindow header:

class MainWindow : public QMainWindow 
{ 

    … 
    QThread cThread;    
    MyClass Connect; 
    ... 
    signals: 

      void NewConnection(QString port,int current); 
    … 
}; 

上述類的構造函數:的.cpp

{ 
    … 
     Connect.moveToThread(&cThread1); 
      cThread.start(); // start new thread 
    …. 
connect(this,SIGNAL(NewConnection(QString,int)), 
      &Connect,SLOT(acceptNewConnection(QString,int))); //start measuring 
… 
} 

包含新的線程和SLOT 標題的類:

class MyClass: public QObject 
{ 
      Q_OBJECT 
…. 
    public slots: 
      void acceptNewConnection(QString port, int current); 
} 

而且上面的類的.cpp文件:

void MyClass::acceptNewConnection(QString port, int current){ 
    qDebug() << "This part is not be reached"; 

} 

最後我在連接的類中使用發射:

void MainWindow::on_pushButton_3_clicked() 
{ 
    … 
emit NewConnection(port, 1); 
} 
+0

可能是一個想法,實際顯示代碼 – paulm

+0

「我總是使用moveToThread(QThread ...)」函數「創建新線程沒有任何意義,這不是如何創建線程。 – hyde

回答

2
class MyClass : public QObject 
{ 
    Q_OBJECT 
public: 
    explicit MyClass(QObject *parent = 0); 

public slots: 
    void acceptConnection(QString port, int current) { 
     qDebug() << "received data for port " << port; 
    }  
}; 

class MainWindow : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    MainWindow(QWidget *parent = 0) : QMainWindow(parent) { 
     myClass.moveToThread(&thread); 
     thread.start(); 
     connect(this, SIGNAL(newConnection(QString,int)), &myClass, SLOT(acceptConnection(QString,int))); 
     emit newConnection("test", 1234); 
    } 

signals: 
    void newConnection(QString, int); 

private: 
    QThread thread; 
    MyClass myClass; 
}; 

輸出: received data for port "test"

是您void MainWindow::on_pushButton_3_clicked()插槽連接到信號?

此外,爲了清晰和易讀的代碼,請保留已建立的命名約定,並使用小寫字母表示對象實例和成員對象和方法。

+0

我的帖子效果很好。 「 - > start()」之後; doWork完美運作。 我只能做SIGNAL-SLOT連接。 我的意思是其他信號插槽。 – Jack

+0

我在示例中添加了一行來顯示我的問題。 我的意思是我想寫在這裏。但它太長了,不能寫在這裏。我如何添加更長的評論? – Jack

+0

我不知道爲什麼你沒有得到連接,再次檢查我的答案,我修改了與你的代碼相同的示例代碼,它的工作原理。 – dtech