2016-03-18 22 views
5

QMessageBoxを詳細テキストセットで開くと、ショーの詳細ボタンが表示されます。 詳細を表示するのではなく、詳細をデフォルトで表示したいと思います...ボタンを最初に押します。QMessageBox "詳細を表示"

qt_doc_example

答えて

2

私の知る限りthe sourceを通じて簡単に見てから言うことができるように、直接詳細テキストを開く、または実際に「詳細の表示...」ボタンにアクセスするための簡単な方法はありません。私が見つけた最良の方法は、メッセージボックスのすべてのボタンを繰り返して行うことでした:

  1. ロール「ActionRole」を抽出します。これは、「詳細を表示...」ボタンに相当します。
  2. これについて手動でclickメソッドを呼び出します。

アクションでこののコードサンプル:

#include <QAbstractButton> 
#include <QApplication> 
#include <QMessageBox> 

int main(int argc, char *argv[]) { 
    QApplication app(argc, argv); 

    QMessageBox messageBox; 
    messageBox.setText("Some text"); 
    messageBox.setDetailedText("More details go here"); 

    // Loop through all buttons, looking for one with the "ActionRole" button 
    // role. This is the "Show Details..." button. 
    QAbstractButton *detailsButton = NULL; 

    foreach (QAbstractButton *button, messageBox.buttons()) { 
     if (messageBox.buttonRole(button) == QMessageBox::ActionRole) { 
      detailsButton = button; 
      break; 
     } 
    } 

    // If we have found the details button, then click it to expand the 
    // details area. 
    if (detailsButton) { 
     detailsButton->click(); 
    } 

    // Show the message box. 
    messageBox.exec(); 

    return app.exec(); 
} 
+0

あなたの例ではしませんでした私のために働く。ボタンを反復すると、標準ボタン(「はい」や「いいえ」など)のみが検索されます。 「詳細を表示」ボタンは、その間にクロールしていたときには表示されませんでした。 Qtバージョン4.7.4を使用しています。 –

+0

ご迷惑をおかけしています - 私はQt 5.xでこれをテストしました。再帰的な 'findChildren'呼び出しを使って、メッセージボックスの各' QAbstractButton'子を調べてみてください。 – ajshort

+0

はい、私は "findChildren()"を使って "詳細を表示"ボタンを探してみました。私は本当にそのような方法で "詳細を表示"ボタンを見つけることができますが、私はそれが 'InvalidRole'であるとわかった時点での役割です。いずれにせよ、私はそのボタンで 'click()'を呼びました。それは効果がなかった。 –

0

この機能はデフォルトで詳細を展開し、また、より大きなサイズにテキストボックスのサイズを変更します:

#include <QTextEdit> 
#include <QMessageBox> 
#include <QAbstractButton> 

void showDetailsInQMessageBox(QMessageBox& messageBox) 
{ 
    foreach (QAbstractButton *button, messageBox.buttons()) 
    { 
     if (messageBox.buttonRole(button) == QMessageBox::ActionRole) 
     { 
      button->click(); 
      break; 
     } 
    } 
    QList<QTextEdit*> textBoxes = messageBox.findChildren<QTextEdit*>(); 
    if(textBoxes.size()) 
     textBoxes[0]->setFixedSize(750, 250); 
} 

... //somewhere else 

QMessageBox box; 
showDetailsInQMessageBox(box); 
関連する問題