5

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
}
4

1 に答える 1

7

したがって、それを完全に制御したい場合は、独自の を作成し、テキストにQDialogaQLabelを追加し、行編集を追加して a をセットアップしQValidator、後で戻り値にアクセスする必要があります。

そのようです:

mydialog.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;
};

mydialog.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("\\*/");

それが役立つことを願っています。

于 2013-11-09T17:07:38.453 に答える