2013-04-02 95 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