【问题标题】:How to restrict the content of QInputDialog::getText如何限制 QInputDialog::getText 的内容
【发布时间】:2017-09-26 02:05:17
【问题描述】:

我想用QInputDialog输入十六进制数,只有getIntgetDoublegetItemgetString。只有getSring 可以接收像“a,b,c,d,e,f”这样的字符。但是,有没有办法限制getString只取0~9||"a-f"

【问题讨论】:

  • 现在我实现了我的自定义对话框并使用 RegExp 来限制内容。
  • 您要返回字符串还是数字?

标签: c++ qt qt5 qdialog qinputdialog


【解决方案1】:

QSpinBox 是面向从客户端输入获取数字的小部件,它具有 setDisplayIntegerBase() 方法,指示希望使用哪个数字基数,在这种情况下必须使用基数 16。

因此,如果您查看方法getInt() 有一个内部QSpinBox,那么只应启用该属性,没有直接方法可以获取QSpinBox,但我们可以使用findchild() 方法。

#include <QInputDialog>
#include <QSpinBox>

static QString getHex(QWidget *parent,
                      const QString &title,
                      const QString &label,
                      int value = 0,
                      int min = -2147483647,
                      int max = 2147483647,
                      int step = 1,
                      bool *ok = Q_NULLPTR,
                      Qt::WindowFlags flags = Qt::WindowFlags()){
    QInputDialog dialog(parent, flags);
    dialog.setWindowTitle(title);
    dialog.setLabelText(label);
    dialog.setIntRange(min, max);
    dialog.setIntValue(value);
    dialog.setIntStep(step);
    QSpinBox *spinbox = dialog.findChild<QSpinBox*>();
    spinbox->setDisplayIntegerBase(16);

    bool ret = dialog.exec() == QDialog::Accepted;
    if (ok)
        *ok = ret;
    return spinbox->text();
}

例子:

#include <QApplication>
#include <QDebug>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    qDebug()<<getHex(Q_NULLPTR, "title", "label", 0x1d, 0);
    return 0;
}

截图:

【讨论】:

  • 这正是我正在寻找的方式。谢谢你给我的所有帮助。
猜你喜欢
  • 2010-12-18
  • 1970-01-01
  • 1970-01-01
  • 2012-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多