Qt QMessageBox, как задать имя для кнопки “Show details”

119
12 ноября 2019, 17:00

собственно вопрос в шапке: Как задать имя конкретно для кнопки "Show details", с другими кнопками проблем нет.

 QMessageBox messageBox;
 messageBox.setText("Текст");
 // Изменить текст стандартной кнопки (проблем нет)
 messageBox.addButton("Отменить", QMessageBox::Cancel)
 // Здесь отображаются детали по нажатию кнопки "Show details" и "Hide details"
 // текст кнопки меняется в зависимости от состояния кнопки (стандартное поведение)
 // После добавления текста, кнопка создается по умолчанию
 messageBox.setDetailedText("Детали");

Как изменить текст этой кнопки на свой? Стандартной роли у этой кнопки нет (я не нашёл), она создается автоматически при установке текста в функцию setDetailedText(), доступ к ней я получить не могу, стандартные кнопки созданные по умолчанию функция buttons() не хранит, но т.к мы добавили кнопку Cancel и свой текст к ней с помощью функции addButton() в списке хранится только она, отследить нажата кнопка "Show details" или нет не получается.

UPDATE

Немного подумав, получился такой пример, но он всё равно не работает корректно, текст сбрасывается.

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QMessageBox>
#include <QAbstractButton>
#include <QTextEdit>
#include <QPushButton>
#include <QList>
#include <QDebug>
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    box = new QMessageBox;
    box->setDetailedText("Детали");

    QList<QAbstractButton*> listButtons = box->buttons();
    QPushButton *pushButton = NULL;
    for (QList<QAbstractButton*>::iterator it = listButtons.begin(); it != listButtons.end(); ++it)
    {
        QAbstractButton * button = *it;
        if (box->buttonRole(button) == QMessageBox::ActionRole)
        {
            pushButton = qobject_cast<QPushButton*>(button);
        }
    }
    if (pushButton)
    {
        // Хотим видеть состояние нажатия кнопки
        pushButton->setCheckable(true);
        // Текст отоброжается, но не влазит (Он отображается и в виджете, до первого клика по кнопке)
        pushButton->setText("Показать детали");
        // А вот размер кнопки не изменяется
        pushButton->resize(QSize(200, 50));
        connect(pushButton, SIGNAL(toggled(bool)), this, SLOT(onClick(bool)));
    }
    box->exec();
}

MainWindow::~MainWindow()
{
    delete ui;
}
void MainWindow::onClick(bool click)
{
    QPushButton * button = qobject_cast<QPushButton*>(sender());
    // Видим пока еще текст "Показать детали"
    qDebug() << button->text();
    if (click)
    {
       button->setText("Скрыть детали");
    }
    else
    {
        button->setText("Показать детали");
    }
    // Видим свой текст только в дебаге, но в самом виджете он не изменился, а возвратился на Hide Details
    qDebug() << button->text();
    // При следующих кликах видим только Show Details/Hide Details нами заданный текст не отображает
}
READ ALSO
hibernate SessionFactory и CriteriBuilder

hibernate SessionFactory и CriteriBuilder

Здраствуйте! Есть сущность

131
resize в scene builder javafx

resize в scene builder javafx

ЗдраствуйтеУ меня такая проблема

125
Retrofit и SharedPreferences: Как сохранить полученный токен?

Retrofit и SharedPreferences: Как сохранить полученный токен?

Не получается сохранить токенВ файле preferences

150
Error: Program type already present:

Error: Program type already present:

Выскакивает ошибка при сборке проекта Error: Program type already present: comlaba2

107