2012-07-24 20 views
0

错误是:error: no matching function for call to 'QObject::connect(MainWindow*, const char*, MainWindow*, const char*)' In second() member function the slot progress() is not matching with the definition.在使用信号和槽Qt中的错误来了

所以,任何人都可以请解决问题。

#include <QtCore/QCoreApplication> 
#include<QFuture> 
#include<QtConcurrentMap> 
#include<QtCore> 
#include<QString> 
int i =0; 

namespace Ui { 
    class MainWindow; 
} 

class MainWindow 
{ 
    Q_OBJECT 
public: 
    explicit MainWindow(QWidget *parent = 0); 
    ~MainWindow(); 

signals: 
    void finished(); 

public slots: 
    void progress(const QString& status); 

public: 
    void search(); 
    void second(); 

}; 

void MainWindow::progress(const QString& status) 
{ 
    printf("progress bar %d is finished", i); 
    i++; 
} 
void MainWindow::search() 
{ 
    QFuture<void> future=QtConcurrent::run(this,&MainWindow::second); 
} 
void MainWindow::finished() 
{ 
    printf("signal got finished"); 
} 

void MainWindow::second() 
{ 
    MainWindow n,o; 
    QObject::connect(&n,SIGNAL(finished()),&o, 
        SLOT(progress(const QString&))); 
    o.progress("hello"); 
} 

int main(int argc, char *argv[]) 
{ 
    QCoreApplication a(argc, argv); 
    MainWindow mi; 
    mi.search(); 
    return a.exec(); 
} 

回答

2

首先,你的类必须(不一定直接)从QObject类继承(见documentation)。
此外,在您的main()你应该show()小部件
此外,您的通话connect()将在运行时失败,因为Q_SIGNALQ_SLOT必须具有相同的参数集。如果您需要区分信号(添加附加参数),请考虑使用QSignalMapper类。见documentation

0

您没有从QObject交付的类继承。我觉得你的MainWindow必须是QMainWindow交付类