QT - QInputDialog如何验证?

时间:2013-11-08 17:56:55

标签: c++ regex qt validation dialog

我想在QInputDialog中添加一些类型的验证。我使用对话框的输入来创建文件系统路径。所以我想排除@ $#%^& *()等字符,但保留 - 和_。我正在考虑应用正则表达式模式,但我不确定工作流程。

如果它不可能或使用不同的东西是有意义的,我也会对此持开放态度。

这就是我目前使用的:

QString defaultText("whatever");
bool ok;
QString caseInput = QInputDialog::getText(this, tr("Input Text"), tr("New Text:"), QLineEdit::Normal, defaultText, &ok);

if (ok && !caseInput.isEmpty())
{
   // do stuff
}

1 个答案:

答案 0 :(得分:7)

因此,如果您想要完全控制它,您需要制作自己的QDialog,为文本添加QLabel,然后添加行编辑,设置{{1}然后访问返回值。

像这样:

mydialog.h

QValidator

mydialog.cpp

#include <QDialog>
#include <QLineEdit>

class MyDialog : public QDialog
{
    Q_OBJECT

public:
    MyDialog(QWidget *parent = 0);
    ~MyDialog();
    QString getNewValue();

signals:
    //void rejected();
    //void accepted();

public slots:


private:
    QLineEdit * le;
};

使用示例:

#include "mydialog.h"
#include <QDialogButtonBox>
#include <QRegExpValidator>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QLabel>

MyDialog::MyDialog(QWidget *parent)
    : QDialog(parent)
{
    le = 0;
    this->setAttribute(Qt::WA_QuitOnClose, false);

    QVBoxLayout * vbox = new QVBoxLayout;

    vbox->addWidget(new QLabel(tr("Type in your text:")));

    le = new QLineEdit();

    // le->setText(tr("Profile"));
    // le->selectAll();
    le->setPlaceholderText(tr("Profile"));

    vbox->addWidget(le);

    QRegExpValidator * v = new QRegExpValidator(QRegExp("[\\w\\d_ \\.]{24}"));
    le->setValidator(v);


    QDialogButtonBox * buttonBox = new QDialogButtonBox(QDialogButtonBox::Ok
        | QDialogButtonBox::Cancel);
    vbox->addWidget(buttonBox);
    this->setLayout(vbox);

     // connect(buttonBox, SIGNAL(accepted()), this, SIGNAL(accepted()));
     // connect(buttonBox, SIGNAL(rejected()), this, SIGNAL(rejected()));
}

MyDialog::~MyDialog()
{

}

QString MyDialog::getNewValue()
{
        return le->text();
}

实现几乎相同的另一种方式:

http://qt-project.org/doc/qt-4.8/qlineedit.html#inputMask-prop http://qt-project.org/doc/qt-4.8/widgets-lineedits.html

如果您想使用股票MyDialog dialog; if(dialog.exec() == QDialog::Accepted) { QString retVal = dialog.getNewValue(); qDebug() << "Dialog value:" << retVal; } getText,可以设置QInputDialog的字段:

http://qt-project.org/doc/qt-4.8/qinputdialog.html#getText

http://qt-project.org/doc/qt-4.8/qt.html#InputMethodHint-enum

InputMethodHint在我看来是最强大的。

以下是此课程中QRegExp的一些很好的例子:

http://qt-project.org/doc/qt-4.8/richtext-syntaxhighlighter-highlighter-cpp.html

QRegExp

希望有所帮助。