我正在使用QT框架。我一直在使用SIGNAL-SLOT。我喜欢。 :-) 但是当我使用QThread时,我无法使其工作。我总是使用“moveToThread(QThread ...)”函数创建新线程。 有什么建议吗? : - )
错误消息是:
Object :: connect:.. \ MultiMITU600 \ mainwindow.cpp中没有这样的插槽连接:: acceptNewConnection(QString,int):14 Object :: connect :(发件人姓名:'MainWindow')
我已经阅读了类似的问题,但这些问题与QThread无关。
谢谢大卫
编辑:您要求提供源代码 这是一个:
以下是代码:
包含信号和新线程的主类:
mainwindow标题:
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";
}
最后,我在连接的类中使用emit:
void MainWindow::on_pushButton_3_clicked()
{
…
emit NewConnection(port, 1);
}
答案 0 :(得分: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()
插槽是否已连接到信号?
此外,为了代码的清晰性和可读性,请保留已建立的命名约定,并对对象实例和成员对象及方法使用小写。