2016-03-18 10 views
5

Po otwarciu QMessageBox ze szczegółowym zestawem tekstowym ma on Pokaż szczegóły przycisk. Chciałbym, aby szczegóły były wyświetlane domyślnie, a nie użytkownik musi najpierw kliknąć przycisk Pokaż szczegóły ....QMessageBox "pokaż szczegóły"

qt_doc_example

Odpowiedz

2

O ile mogę powiedzieć z szybkim spojrzeniem przez the source, jest to łatwy sposób, aby bezpośrednio otworzyć tekst szczegółów, a nawet dostęp do „Pokaż dane ...” guzik. Najlepszą metodą, jaką mogłem znaleźć, było:

  1. Powtórz wszystkie przyciski w oknie wiadomości.
  2. Wyodrębnij tę z rolą ActionRole, ponieważ odpowiada ona przyciskowi "Pokaż szczegóły ...".
  3. Zadzwoń ręcznie do metody click.

Przykładowy kod w akcji:

#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

Twój przykład nie Pracuj dla mnie. Kiedy przechodzę przez przyciski, znajduje tylko standardowe przyciski (np. "Tak" i "Nie"). Przycisk "Pokaż szczegóły" nie znajdował się wśród nich w czasie przeszukiwania ich. Korzystanie z wersji Qt 4.7.4. –

+0

Nie jestem pewien przepraszam - z pamięci testowałem to na Qt 5.x. Może spróbuj przejrzeć każdy element potomny 'QAbstractButton' w oknie komunikatu, używając rekurencyjnego wywołania' findChildren'? – ajshort

+0

Tak, próbowałem również szukać przycisku "Pokaż szczegóły" za pomocą 'findChildren()' również. Naprawdę mogę znaleźć przycisk "Pokaż szczegóły" w ten sposób, ale jego rolą w chwili, gdy go znajduję jest "InvalidRole". Na wszelki wypadek zadzwoniłem do przycisku "kliknij()", aby zobaczyć, co się stanie. Nie miało to żadnego skutku. –

0

Funkcja ta rozszerzy szczegóły domyślnie, a także zmienić rozmiar pola tekstowego do większego rozmiaru:

#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); 
Powiązane problemy