2009-05-11 20 views
1

Qtでかなり新しいです。Qt:QWebViewで問題が発生しました:: linkClicked(QUrl) - スロットシグナルの問題

QWebViewで回答したいと思います。

私はこのように接続してみました:

QObject::connect(ui->webView, SIGNAL(linkClicked(QUrl)), 
       MainWindow,SLOT(linkClicked(QUrl))); 

しかし、私はエラーになった:私はこのUIの編集を使用してくださいするスロットを伝えた場合 C:/Documents and Settings/irfan/My Documents/browser1/mainwindow.cpp:9: error: expected primary-expression before ',' token

私はスロットのヘッダファイルの宣言を持っています:

void linkClicked(QUrl &url); 

ソースcppファイル:

void MainWindow::linkClicked(QUrl &url) 
{ 
    QMessageBox b; 
    b.setText(url->toString()); 
    b.exec(); 
} 
は、私はそれが実行コンパイルし、これを実行しますが、警告を得たとき:

Object::connect: No such slot MainWindow::linkClicked(QUrl) 
    in ui_mainwindow.h:100 

取り扱いこのイベントを行うための適切な方法は何ですか?

答えて

1

QObject::connectconnectに変更して動作します。

ので、このコードは動作します:

connect(ui->webView,SIGNAL(linkClicked(const QUrl)),this,SLOT(linkClicked(const QUrl)),Qt::DirectConnection);

をしかし、私はなぜか分からないのですか?

+0

また、スロットの宣言:constで変更されました... linkClicked(const QUrl&url) –

2

QObject::connectconnectに変更したために機能するようになりました。今私はこれで100%ではないが、私はconnectを呼び出すことによって、アプリケーションの一部であるオブジェクトに関連付けられたメソッドを呼び出すことになると考えている。つまり、this->connect(...)のようなものです。この方法では、既存のオブジェクトに関連付けられます。これは、アプリケーションについて何も知らない静的メソッドQObject::connectを呼び出すこととは異なります。

申し訳ありませんご迷惑をおかけして申し訳ございませんが、うまくいけばポイントがわかります!

2

QObject :: connect()とconnect()を使用することは、このコンテキストでは同じです。私は信じています

がMainWindowクラス内の関数から呼び出されました。だからあなたが試したとき

connect(ui->webView,SIGNAL(linkClicked(const QUrl)), 
     this,SLOT(linkClicked(const QUrl)),Qt::DirectConnection); 

それは動作します。それを動作させる違い、つまり3番目のパラメータに注目してください。 2番目のスニペットでを使用しました。最初のスニペットでMainWindowを使用しました。

thisを読んで、信号とスロットの仕組みがどのように機能し、正しく実装するかを知ってください。

関連する問題