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.

所以任何人都可以解决这个问题。

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

2 回答 2

2

首先,您的类必须(不一定直接)从QObject类继承(参见文档)。
此外,在您main()show()小部件
中,您的connect()调用将在运行时失败,因为Q_SIGNAL并且Q_SLOT必须具有相同的参数集。如果您需要区分信号(添加附加参数),请考虑使用QSignalMapperclass. 查看文档

于 2012-07-24T09:07:52.033 回答
0

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

于 2012-07-24T08:16:59.660 回答