QInputDialog: кнопки «ОК» и «ОТМЕНА»: удаление изображений кнопок для «ОК» и «Отмена»

В QInputDialog, как мне избавиться от значков в кнопках OK и Отмена?

введите описание изображения здесь

Обратите внимание на значки для отмены и ОК. Я посмотрел через кнопку свойств, не мог понять, как их удалить.

1

Решение

Стратегия решения состоит в том, чтобы сначала получить кнопки, но они принадлежат QDialogButtonBoxтак что вы должны использовать findChild() метод, затем сбросьте значки, есть только одна проблема, что кнопки создаются при необходимости, например, когда это видно или когда вы меняете okButtonText или же cancelButtonText, Например, в мы можем заставить его сделать видимым.

#include <QApplication>
#include <QInputDialog>
#include <QDebug>
#include <QAbstractButton>
#include <QDialogButtonBox>

static int getInt(QWidget *parent,
const QString &title,
const QString &label,
int value=0,
int min=-2147483647,
int max=2147483647,
int step=1,
bool *ok=nullptr,
Qt::WindowFlags flags=Qt::Widget)
{
QInputDialog dialog(parent, flags);
dialog.setWindowTitle(title);
dialog.setLabelText(label);
dialog.setIntRange(min, max);
dialog.setIntValue(value);
dialog.setIntStep(step);
dialog.setVisible(true);
for(QAbstractButton *btn:  dialog.findChild<QDialogButtonBox*>()->buttons()){
btn->setIcon(QIcon());
}
int ret = dialog.exec();
if (ok)
*ok = !!ret;
if (ret) {
return dialog.intValue();
} else {
return value;
}
}

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
bool ok;
int res = getInt(nullptr, "Factorial Calc", "Factorial of:", 5, 0, 100, 1, &ok);
if(ok)
qDebug()<< res;
return 0;
}

Но если вы используете статические методы, такие как QInputDialog::getInt() мы не сможем получить доступ к QInputDialog непосредственно, мы должны сделать это через мгновение после показа QInputDialog с QTimerИтак, есть 2 случая:

  • Родитель передается статическому методу:

#include <QApplication>
#include <QInputDialog>
#include <QDebug>
#include <QAbstractButton>
#include <QDialogButtonBox>
#include <QTimer>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget widget;
bool ok;
QTimer::singleShot(0, [&widget](){
QInputDialog *dialog = widget.findChild<QInputDialog *>();
for(QAbstractButton *btn:  dialog->findChild<QDialogButtonBox*>()->buttons()){
btn->setIcon(QIcon());
}
});
int res = QInputDialog::getInt(&widget, "Factorial Calc", "Factorial of:", 5, 0, 100, 1, &ok);
if(ok)
qDebug()<< res;
return 0;
}
  • Родитель не передается статическому методу:

#include <QApplication>
#include <QInputDialog>
#include <QDebug>
#include <QAbstractButton>
#include <QDialogButtonBox>
#include <QTimer>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget widget;
bool ok;
QTimer::singleShot(0, [](){
for(QWidget *widget: QApplication::topLevelWidgets()){
if(QInputDialog *dialog = qobject_cast<QInputDialog*>(widget)){
for(QAbstractButton *btn:  dialog->findChild<QDialogButtonBox*>()->buttons()){
btn->setIcon(QIcon());
}
}
}
});
int res = QInputDialog::getInt(nullptr, "Factorial Calc", "Factorial of:", 5, 0, 100, 1, &ok);
if(ok)
qDebug()<< res;
return 0;
}
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]