0

Error is: 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.

So can anyone please solve the problem.

#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_SIGNALQ_SLOTQSignalMapper

于 2012-07-24T09:07:52.033 に答える
0

QObject が提供するクラスから継承しませんでした。MainWindow は QMainWindow 配信クラスでなければならないと思います

于 2012-07-24T08:16:59.660 に答える