1

リンクを含む警告QMessageBoxをユーザーに表示したいと思います。これは比較的簡単です。メッセージボックスでリッチテキストテキスト形式を設定していることを確認するだけでQMessageBox、残りはセットアップで実行されます。ただし、ユーザーがリンクをクリックした場合は、メッセージボックスを閉じたいと思います(done()ユーザーがメッセージを確認して決定したという意味です)。

問題:内部(テキストの保存に使用される)からQMessageBoxの信号を非表示にします。linkActivatedQLabel

QMessageBoxクラスを拡張して、コンストラクターでこの非常に醜いハックを実行できると思いました。

QLabel *lbl = findChild<QLabel*>(QString("qt_msgbox_label"));
assert(lbl != NULL);

connect(lbl, SIGNAL(linkActivated(const QString&)), this, SLOT(handle_link_activation(const QString&)));

しかし、で見つかったラベルfindChildはnullではなく、"qt_msgbox_label"間違いなく正しく(ソースからc / pされた)、「そのようなシグナル/スロットはありません」というメッセージはありませんが、リンクをクリックしてもスロットが呼び出されることはありません。

振る舞いQDialogを模倣するような自分の文章を書くことは避けたいと思います。QMessageBox誰かが私がその信号をキャッチする方法について何か考えがありますか?

4

1 に答える 1

3

独自のリンク「プロトコル」、つまりmsgboxurl://yoururl.is.hereを定義して、そのURLハンドラーをインストールしてみてください

QDesktopServices::setUrlHandler("msgboxurl", urlHandlerObj, "slotName");

urlHandlerObjは、メッセージボックスを作成したオブジェクトである可能性があります。スロットでは、メッセージボックスを非表示にして//の後にURL部分を取り、それを開くことQDesktopServices::openUrlができますが、http / httpsプレフィックスを前に付ける必要があることに注意してください(一部のプラットフォームでは、「スキーム」のないURLは適切に処理されません)。QDesktopServices::openUrlスロット処理URLには、静的メソッドと同じパラメーターが必要です。

于 2010-01-12T16:18:04.880 に答える