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"
5
A
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:
- Powtórz wszystkie przyciski w oknie wiadomości.
- Wyodrębnij tę z rolą
ActionRole
, ponieważ odpowiada ona przyciskowi "Pokaż szczegóły ...". - 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
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);
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. –
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
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. –