gpt4 book ai didi

c++ - QInputDialog:OK 和 CANCEL 按钮:删除 OK 和 Cancel 的按钮图像

转载 作者:太空宇宙 更新时间:2023-11-04 12:43:47 27 4
gpt4 key购买 nike

在 QInputDialog 中,如何去掉 OK 和 Cancel 按钮中的图标?

enter image description here

注意取消和确定的图标。我查看了属性按钮,不知道如何删除它们。

最佳答案

解决方案的策略是先获取按钮,但是这些属于QDialogBu​​ttonBox,所以必须使用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,我们必须在显示后立即访问QInputDialogQTimer,所以有两种情况:

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

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

关于c++ - QInputDialog:OK 和 CANCEL 按钮:删除 OK 和 Cancel 的按钮图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52770430/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com