- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
QLineEdit
有一个信号 QLineEdit::editingFinished
当用户完成编辑时发出,例如按回车键。但是,如果设置了验证器或输入掩码,则只有在输入有效时才会发出 editingFinished
。
但是无论输入的有效性如何,我如何对用户完成编辑使用react?我是否必须手动检查输入、返回、小部件失去焦点等?
这样做的原因:我想使用 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
});
}
};
最佳答案
我不认为你真的需要继承QLineEdit
。
当 QLineEdit
值没有 Acceptable
时,clean 方法可以更改它输入,是重写QValidator
并为fixup()
提供一个实现.来自docs :
fixup()
is provided for validators that can repair some user errors. The default implementation does nothing.QLineEdit
, for example, will callfixup()
if the user presses Enter (or Return) and the content is not currently valid. This allows thefixup()
function the opportunity of performing some magic to make anInvalid
stringAcceptable
.
由于您使用的是 QDoubleValidator
,您可以将它子类化并为 fixup()
提供一个实现,因为它没有一个,参见 here .
这个类看起来应该是这样的:
class MyDoubleValidator : public QDoubleValidator{
public:
explicit MyDoubleValidator(QObject* parent= nullptr)
:QDoubleValidator(parent){}
MyDoubleValidator(double bottom, double top, int decimals, QObject* parent=nullptr)
:QDoubleValidator(bottom, top, decimals, parent){}
virtual void fixup(QString& input)const override{
input= QString::number(bottom(), 'f', decimals());
}
};
这样,您就可以像这样将验证器与任何 QLineEdit
一起使用:
lineEdit->setValidator(new MyDoubleValidator(100, 200, 2, lineEdit));
请注意,这样 lineEdit
将发出 editingFinished()
每次编辑后。因为即使 QLineEdit
的内容不是Acceptable
,我们的 fixup()
实现也会始终修复内容成为可接受的
。
关于c++ - QLineEdit 与 QValidator : React to editing finished regardless of input validity?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39552126/
我有 Site {{$url}} 和 $(function(){ $('#pencil').click
我在每一行都有一个编辑按钮,我已经设置了 defaultColDef: { editable: false, } 在网格选项中 当我点击编辑按钮时,我希望该行处于编辑模式。如果我设置
我在每一行都有一个编辑按钮,我已经设置了 defaultColDef: { editable: false, } 在网格选项中 当我点击编辑按钮时,我希望该行处于编辑模式。如果我设置
我有一个 html 文件,我想编辑其中的字段。以下是我的 html 代码: ID GROUP NAME GROUP DESCRIPTION IS A
我希望管理员能够编辑普通用户无法编辑的字段。例如作者或订阅者等。 我试过这个:Django admin: How to display a field that is marked as editab
如何将PS文件中间的数据移动到Mainframe的左侧?有什么快捷命令吗? 我有一个数据集,第 13 列有数据,必须将其移动到第 11 列,任何短键都可以移动它。 想要将 DS 中的其余行作为第一行对
我在 div 中有一个可编辑元素,它本身是可点击的。每当我单击 x-editable anchor 元素时,单击会在 DOM 中冒泡并触发对父 div 的单击。我怎样才能防止这种情况发生?我知道可以使
我有一个类似这样的模型: class Product(models.Model): third_party_id = models.CharField(max_length=64, blank
我有一个包含 2 个可编辑文本字段的页面 {{creator.name}} Tell us about yourself in less than 100 words
这是我的架构: id: 'EntryCode', fields: { EntryCode: {editable: true, validation: {required: true}, nul
有人可以帮助确定这个问题 - http://jsfiddle.net/xBB5x/8823/ 我正在尝试实现 x-editable (bootstrap 2) typeahead 功能。 上面的 js
如果我使用例如 g_object_set (renderer, "background", "red", "background-set", FALSE, NULL); 对于文本渲染器, TreeVi
我在创建和编辑页面上都使用了 Angular 文件,但我想知道是否有办法阻止用户在/edit 页面上编辑 Geo Segment 的名称。 geo-region-detail.html: G
我正在尝试向 QListWidget 添加一个项目,选择该项目,然后开始编辑新项目。 该项目被添加,它被选中,但该行没有被引入 QLineEdit,或者它试图使用的任何东西。 这是我的小部件的代码,相
我有一个表格,其中的单元格和列中有多个值。当用户单击 TD 单元格上的任意位置时,我希望它: 成为文本区域 将当前文本粘贴到文本区域 在其下方放置一个取消按钮 一旦按下取消按钮,我希望一切都变回以前的
在我的程序中,会有一个机会编辑框,它可以更改“掉率”或“获胜率” 但我想将其更改为如果用户输入大于 100 的数字并点击编辑框,编辑框文本将变回 100。 我不知道如何实现这个。 最佳答案 看看下面的
我想创建我的编辑表单,以便它将当前用户信息简单地显示为文本,而不是在文本字段中,当用户单击文本时,它将变成文本字段,用户可以编辑他的信息。仅当用户单击提交按钮时,更改才会反射(reflect)在数据库
我有一个 QTreeWidgetItem 添加到 QTreeWidget: QTreeWidgetItem* item = new QTreeWidgetItem(ui->trwPairs); ite
我检查了最新的 Dropbox 和 Excel for iOS。在 Dropbox 中,我们有一个编辑按钮。单击它会打开 Excel 的扩展程序,您可以在其中编辑文件。 保存后,更改也会反射(refl
我目前正在使用pycord创建一个Python语言的不和谐机器人。我有一个发送消息的命令,其中嵌入了两个字段。一个名为Yes,值为0;另一个名为No,值也为0。在选择菜单中,我创建了两个选项。选项是和
我是一名优秀的程序员,十分优秀!