1

我正在使用 QT 框架。我一直在使用 SIGNAL-SLOT 一段时间。我喜欢。:-) 但是当我使用 QThread 时我无法让它工作。我总是使用“moveToThread(QThread ...)”函数创建新线程。有什么建议吗?:-)

错误信息是:

Object::connect: No such slot connection::acceptNewConnection(QString,int) in ..\MultiMITU600\mainwindow.cpp:14 Object::connect: (sender name: 'MainWindow')

我读过类似的问题,但这些问题没有连接到 QThread。

谢谢,大卫

已编辑:您要求提供源代码这是一个:

这是代码:

包含信号和新线程的主类:

主窗口标题:

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 Header 的类:

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); 
} 
4

1 回答 1

3
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()插槽是否连接到信号?

此外,为了代码的清晰和可读性,请保持既定的命名约定,并为对象实例和成员对象和方法使用小写字母。

于 2013-04-02T13:32:16.350 回答