标签: qvalidator

验证QTableView中的用户输入

我有一个QTableView,我想验证用户输入.如果用户在单元格中插入无效值QTableView,我想突出显示该单元格并禁用a QPushButton.

我怎样才能做到这一点?我可以用QValidator吗?

qt qtableview qvalidator

8
推荐指数
2
解决办法
5240
查看次数

带QValidator的QLineEdit:无论输入有效性如何,都对编辑完成了反应?

QLineEdit有一个信号QLineEdit::editingFinished在用户完成编辑时发出,例如按Enter键.但是,如果设置了验证器或输入掩码,则editingFinished仅在输入有效时才会发出.

但是,无论输入的有效性如何,我如何对完成编辑的用户做出反应?我是否必须手动检查输入,返回,小部件失去焦点等?

原因是:我想创建一个自定义小部件,用于使用a编辑数字QDoubleValidator.当用户完成编辑并且输入无效(范围错误,空文本......)时,我想将其重置为某个有效的默认值.像这样的东西:

class NumberEdit: public QLineEdit
{
public:
    NumberEdit(double min, double max)
    {
        setValidator(new QDoubleValidator(min, max, 10));
        setText(QString::number(min));

        connect(this, /* this is the problem */, [this, min]() {
            if(!hasAcceptableInput())
                setText(QString::number(min));    // Reset to valid number
        });
    }
};
Run Code Online (Sandbox Code Playgroud)

c++ qt qlineedit qvalidator

7
推荐指数
1
解决办法
3708
查看次数

QDoubleValidator不工作?

我正在尝试在Qt 4.2中的行编辑框中应用验证器,但它无法正常工作:

 QDoubleValidator *haha= new QDoubleValidator(this);
 haha->setBottom(0.00);
 haha->setDecimals(2);
 haha->setTop(100.00); 
 get_line_edit()->setValidator(haha);
Run Code Online (Sandbox Code Playgroud)

要么

 QDoubleValidator *haha= new QDoubleValidator(0.00,100.00,2,this);
Run Code Online (Sandbox Code Playgroud)

无论如何,我仍然可以进入我想要的任何价值.

但是,如果我切换到QIntValidator它,它的工作原理!

所以我去谷歌并进行了一些搜索,很多人过去常常遇到同样的问题.这是一个错误吗?或者应该有其他一些我应该做的设置?

c++ validation qt qvalidator

5
推荐指数
3
解决办法
1万
查看次数

从 QValidator 获取视觉反馈

我正在尝试使用QValidator后代(实际上在 PyQt5 中,但这无关紧要)来验证一系列行编辑。

一小段摘录是:

class IPv4(QWidget):
    def __init__(self):
        super(IPv4, self).__init__()
        uic.loadUi('ipv4.ui', self)
        self.address.inputMask = ''
        rx = QRegularExpression(r'\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}')
        self.address.setValidator(QRegularExpressionValidator(rx, self.address))
        self.netmask.setValidator(QRegularExpressionValidator(rx, self.netmask))
        self.gateway.setValidator(QRegularExpressionValidator(rx, self.gateway))
        self.broadcast.setValidator(QRegularExpressionValidator(rx, self.broadcast))
        self.dns1.setValidator(QRegularExpressionValidator(rx, self.dns1))
        self.dns2.setValidator(QRegularExpressionValidator(rx, self.dns2))
        self.on_dhcp_clicked(self.dhcp.isChecked())
Run Code Online (Sandbox Code Playgroud)

这如宣传的那样有效,但用户没有得到任何反馈,因为尝试输入“错误”字符只会丢弃它们。

除了挂钩QLineEdit.textChanged信号并“手动”进行验证(即:设置验证器,否则错误text不会改变并且不会发出信号)之外,我没有找到任何提供反馈的方法。首选的反馈是更改行编辑的边框颜色。

这在某种程度上违背了验证器本身的目的。似乎我错过了一些东西,因为我看不到如何触发反馈QValidator.

处理这个问题的“标准方法”是什么?

python qt pyqt pyqt5 qvalidator

4
推荐指数
1
解决办法
1173
查看次数

识别 QLineEdit 是否失去焦点

在我的一个项目中,我有一系列QLineEdit小部件,它们应该接受位于特定范围内的双数。由于某些原因我无法使用QDoubleSpinBox

现在我用来QDoubleValidator检查我的号码是否在给定范围内。不幸的是,只有在给出editingFinished时才会发出信号。QValidatorQValidator::Acceptable

现在假设我可能有一系列这样的QLineEdit小部件。在其中一个小部件中,我输入了错误的数字,然后将焦点切换到另一个小部件。用户在QLineEdit.

相反,我想要的行为是将焦点设置到包含错误输入的小部件并发出警告。

由于某些原因,我未能实现此功能。即使在我查阅了 Qt 文档之后。

这是我的完整代码。

ValidatedDoubleEditorWidget.h

#pragma once

#include <QWidget>

namespace Ui {
    class validatedDoubleEditorWidget;
}

class QDoubleValidator;

    class ValidatedDoubleEditorWidget : public QWidget {
        Q_OBJECT
    public:
        ValidatedDoubleEditorWidget(double min, double max, double value);

        double getValue() const;
        void setValue(const double value);

    private slots:
        void on_lineEdit_editingFinished();

    protected:
        virtual void focusOutEvent(QFocusEvent *event) override;


        virtual void focusInEvent(QFocusEvent *event) override;

    private:
        Ui::validatedDoubleEditorWidget* mWidget = nullptr;
        double mValue = 0.; …
Run Code Online (Sandbox Code Playgroud)

qt focus qlineedit qvalidator

2
推荐指数
1
解决办法
5785
查看次数

QLineEdit没有小数点

我希望QLineEdit只接受没有任何小数的数字.它应该接受'456'而不是'456.3434'.它不应该允许小数.任何人都可以给出一些指示,我该怎么做.

我尝试使用QIntValidator,但它仍然允许输入小数点,当我从QLinEdit转换文本时它返回零(因为文档说,如果转换失败,它将返回零).

我也尝试使用QRegExpValidator(QRegExp("[0-9]"),但它只允许一个数字.最大数量没有限制,我如何指定QRegExp,最小值为0,最大值为undefined,如果QRegExpValidator是实现它的唯一方法吗?

谢谢

regex qt qlineedit qregularexpression qvalidator

0
推荐指数
1
解决办法
578
查看次数