1

私はQtでかなり新しいです。

に返信したいlinkClickedですQWebView

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

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

しかし、私はエラーが発生していました:C:/Documents and Settings/irfan/My Documents/browser1/mainwindow.cpp:9: error: expected primary-expression before ',' token

UI Editing Signals Slots を使用してこれを行うと、次のようになります。

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

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

このイベント処理を行う適切な方法は何ですか?

4

3 に答える 3

2

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

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

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

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

できます。それを機能させる違いに注意してください - 3番目のパラメータ。最初のスニペットでMainWindowを使用したのと同じように、2 番目のスニペットでこれを使用しました。

これを読んで、シグナルとスロットのメカニズムがどのように機能し、適切に実装するかを理解してください。

于 2009-05-11T10:43:39.913 に答える
2

QObject::connectに変更したため、現在は機能していると述べていますconnect。今、私はこれについて 100% ではありませんが、その理由は、 を呼び出すことによってconnect、アプリケーションの一部であるオブジェクトに関連付けられたメソッドを呼び出しているからだと思います。つまり、やっているようなものthis->connect(...)です。QObject::connectそうすれば、アプリケーションについて何も知らない静的メソッドを呼び出すのとは対照的に、既存のオブジェクトに関連付けられます。

それが明確でない場合は申し訳ありませんが、うまくいけば、私は要点を理解しました!

于 2009-05-11T09:18:58.103 に答える
1

QObject::connectのみに変更しましたがconnect、動作します。

したがって、このコードは機能します:

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

しかし、私は理由を知りませんか?

于 2009-05-11T08:22:24.077 に答える