gpt4 book ai didi

c++ - QT - QInputDialog 如何验证?

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:29:31 25 4
gpt4 key购买 nike

我想向我的 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
}

最佳答案

所以如果你想完全控制它,你会想要制作你自己的QDialog,为文本添加一个QLabel,并添加一个行编辑,设置一个QValidator,然后访问返回值。

像这样:

我的对话框.h

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

我的对话框.cpp

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

示例用法:

MyDialog dialog;
if(dialog.exec() == QDialog::Accepted)
{
QString retVal = dialog.getNewValue();
qDebug() << "Dialog value:" << retVal;
}

实现几乎相同的事情的另一种方法:

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

如果你想使用股票 getText QInputDialog 你可以为 InputMethodHint 设置字段:

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

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

但在我看来,QRegExp 是最强大的。

下面是这个类中QRegExp的一些很好的例子:

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

 classFormat.setFontWeight(QFont::Bold);
classFormat.setForeground(Qt::darkMagenta);
rule.pattern = QRegExp("\\bQ[A-Za-z]+\\b");
rule.format = classFormat;
highlightingRules.append(rule);

singleLineCommentFormat.setForeground(Qt::red);
rule.pattern = QRegExp("//[^\n]*");
rule.format = singleLineCommentFormat;
highlightingRules.append(rule);

multiLineCommentFormat.setForeground(Qt::red);

quotationFormat.setForeground(Qt::darkGreen);
rule.pattern = QRegExp("\".*\"");
rule.format = quotationFormat;
highlightingRules.append(rule);

functionFormat.setFontItalic(true);
functionFormat.setForeground(Qt::blue);
rule.pattern = QRegExp("\\b[A-Za-z0-9_]+(?=\\()");
rule.format = functionFormat;
highlightingRules.append(rule);

commentStartExpression = QRegExp("/\\*");
commentEndExpression = QRegExp("\\*/");

希望对您有所帮助。

关于c++ - QT - QInputDialog 如何验证?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19865535/

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