2

QDialog から継承したカスタム QMessageBox を実装しました。(qt 4.8.6 を使用)

問題は、すべてのカスタム メッセージ ボックスが QMessageBox 静的関数とはまったく異なって見えることです。

  • QMessageBox::情報(...)
  • QMessageBox::クリティカル(...)
  • QMessageBox::質問(...)
  • QMessageBox::警告(...)

それらは、サイズ、フォント、フォントサイズ、アイコン、背景 (静的な qmessagebox には 2 つの背景色があります) などで異なります。

私が見つけた唯一のことは、オペレーティング システム固有のメッセージ ボックス アイコンにアクセスする方法でした。

QStyle *style = QApplication::style();
QIcon tmpIcon = style->standardIcon(QStyle::SP_MessageBoxInformation, 0, this);//for QMessageBox::Information

フォントまたはスタイル全体に似たものはありますか。

QMessagebox がオペレーティング システム固有のスタイルガイドを使用していることは知っています。しかし、私はそれらを見つけることができません。ここでソースを表示できます。

だから私の質問は、QDialog から継承されたカスタム QMessageBox を静的な QMessageBox::... 関数のように見せる方法ですか?

(この静的関数呼び出しで作成された QMessageBox オブジェクトにアクセスできれば、すべてのスタイルとフォントのパラメーターを読み取ることができますが、これは不可能です。)

4

2 に答える 2

0

少し遅れましたが、今日、新しい要素の追加ではなく、それらのいくつかの変更に関連する同様の問題に直面しました。私の解決策:QProxyStyle(Qt 5+)を使用します。基本的に、基本スタイルを完全に再実装することなく、特定の側面のみを再実装できます。によって作成されたスタイルを使用する場合に特に役立ちますQStyleFactory

のデフォルト アイコンをオーバーライドする例を次に示しますQMessageBox::information

class MyProxyStyle : public QProxyStyle {
public:
  MyProxyStyle(const QString& name) :
    QProxyStyle(name) {}

  virtual QIcon standardIcon(StandardPixmap standardIcon,
                             const QStyleOption *option,
                             const QWidget *widget) const override {
    if (standardIcon == SP_MessageBoxInformation)
      return QIcon(":/my_mb_info.ico");
    return QProxyStyle::standardIcon(standardIcon, option, widget);
  }
};

次に、スタイルをアプリに設定します。

qApp->setStyle(new MyProxyStyle("Fusion"));
于 2017-03-08T12:54:11.433 に答える