QInputDialog:确定和取消按钮:删除确定和取消的按钮图像

时间:2018-10-12 00:03:03

标签: c++ qt qt5 qinputdialog

在QInputDialog中,如何摆脱“确定”和“取消”按钮中的图标?

enter image description here

注意取消和确定的图标。我通过“属性”按钮无法确定如何删除它们。

1 个答案:

答案 0 :(得分:0)

该解决方案的策略是首先获取按钮,但这些按钮属于QDialogButtonBox,因此您必须使用findChild()方法,然后重置图标,只有一个问题,即这些按钮会在必要时创建,例如在可见或更改okButtonTextcancelButtonText时创建。例如,在中,我们可以通过使其可见来对其进行强制。

#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和{{1 }},因此有2种情况:

  • 将父级传递给静态方法:

QTimer
  • 父级不传递给静态方法:

#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;
}