- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我发现了几个类似的问题,但这些问题似乎是指在插槽处理程序中使用消息框的情况。在我的例子中,我有点卡住了,因为即使我的插槽处理程序什么都不做,我还是收到了两次 editFinished 信号。
为了测试,我有一个 QLineEdit 数组,它使用 signalMapper 将 editingFinished() 信号连接到单个插槽。 signalMapper 传递数组索引,这样我就可以看到信号来自哪里。例如:
testenter::testenter(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::testenter)
{
// setup the UI according to the .h file
ui->setupUi(this);
signalMapper = new QSignalMapper(this);
// init the labels and edit boxes
for (int i = 0; i < 10; i++)
{
pm_label[i] = new QLabel(ui->scrollArea);
QString text = QString("Number %1").arg(i);
pm_label[i]->setText(text);
pm_label[i]->setGeometry(10,20+i*30, 50, 20);
pm_label[i]->show();
pm_editBox[i] = new QLineEdit(ui->scrollArea);
pm_editBox[i]->setGeometry(80,20+i*30, 50, 20);
pm_editBox[i]->show();
signalMapper->setMapping(pm_editBox[i], int(i));
connect(pm_editBox[i], SIGNAL(editingFinished()), signalMapper, SLOT(map()));
}
connect(signalMapper, SIGNAL(mapped(int)), this, SLOT(data_entry(int)));
}
void testenter::data_entry(int entry)
{
//dummy
}
在调试器中运行时,如果我将数据输入到一个框中,然后按回车键或用鼠标选择另一个框(即更改焦点),然后它会调用 data_entry 两次,第一次是丢失框的索引焦点和第二次获得焦点的框。
所以我的问题是:我错过了什么吗?这是预期的行为还是错误?如果出现错误,任何人都知道解决它的方法,因为我想在输入数据时使用此信号对数据进行自定义验证(通过返回、制表符或鼠标单击以更改焦点)。
最佳答案
首先,不,这不是预期的行为,即选择 QLineEdit
不应导致发出 editingFinished
信号。
有几种情况可能会导致此问题:
map()
导致新选择的框失去焦点QLineEdit
在事件应用程序从您的 QWidget
到您的调试器,再次导致信号再次发送。如果您因为双连接槽而遇到问题,但情况似乎并非如此,因为您专门从两个不同的 QLineEdit
获取信号,您可以确保通过指定连接类型不会发生这种情况,connect
方法实际上在末尾有一个额外的可选参数,它允许您将类型从 DefaultConnection
更改为唯一连接
。
也就是说,数据验证是 Qt 已经建立的机制,我建议您尽可能使用它,研究扩展 QValidator
抽象基类 Ref Doc .然后,您告诉每个 QLineEdit
使用相同的 validator
。
关于c++ - QLineEdit editingFinished信号在改变焦点时两次?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26782211/
我在配置小部件上有多个 QLineEdit 小部件。 当配置文本更改时,我想存储更新后的值(其中有几个,所以我不想在最后的一个函数调用中传递它们)。 我正在考虑将它们连接到一个插槽或通过 QSigna
我有一个 QLineEdit我已经将图像设置为 QStackedWidget .现在我想更改 QLineEdit 中文本的字体颜色.怎么做? QLineEdit *line1 = new QLineE
我正在尝试编写一个简单的 Qt 程序,该程序在 QLineEdit 中获取文本,并在按下返回键时将其附加到 QTextEdit 对象中。 这是我的程序的代码: #include #include
我有一个QLineEdit,其中包含文本“搜索内容...”。 我希望当 QLineEdit 获得焦点或当光标进入文本内部时,文本被设置为空字符串。 [这有效:我没问题,我使用了 QLineEdit 的
如何在QMenu中将QLineEdit用作菜单项?有解决方案吗? 只是要做这样的事情(请看头像下方的编辑框): 最佳答案 您可以使用QWidgetAction来包含您的QLineEdit。它继承了QA
我引入了一个特定的自定义快捷键,允许从当前文本光标位置开始删除 QLineEdit 中接下来的 10 个字符。但我想让这个不可撤销。不幸的是,QLineEdit 不提供 QTextDocument 或
我有一个带有 QDoubleValidator 的 QLineEdit,调用 QDoubleValidator::setRange 不会验证 QLineEdit top() ) {
如何在 QLineEdit 上设置输入验证器以将其限制为有效的 IP 地址?即 x.x.x.x,其中 x 必须在 0 到 255 之间。并且 x 不能为空 最佳答案 您正在寻找QRegExp和 QVa
如果用户在 QLineEdit 中键入文本并离开 QLineEdit 输入字段,我想执行一些操作。 关于focusInEvent 的解释不多。我正在使用 Python 和 PySide2。但所有信息都
我正在使用 Qt 样式表创建一个自定义 QLineEdit,当它有焦点时,它周围有一个浅蓝色边框。这是样式表: this->setStyleSheet(" QLineEdit { "
我正在尝试制作一个带有行编辑和按钮的小部件。如果单击该按钮,它应该打开一个文件对话框,我可以在其中选择一个文件。文件名应该显示在行编辑中。这是我到目前为止得到的: #include "widget_o
我正在 python 上使用 PyQt5 制作一个登录 GUI 程序,在这个程序中我在此布局上创建了一个键盘。我的问题是,我无法使用我所做的键盘在 QLineEdit 上插入文本。我应该做什么来修复它
我想在某些条件下,不可能编辑 QLineEdit 小部件。理想情况下,它看起来像: QLE_On = QCheckBox("Non-editable?") generic = QLineEdit()
我正在从行编辑中获取用户输入并将其显示在 QMessageBox 上,但由于某种原因它不会显示。我想也许我根本没有从 QLineEdit 获取输入,但是当我尝试在终端上打印它时(顺便说一句,它仍然不会
是否可以在输入时使用 QValidator 设置 QLineEdit 的文本?如果是这样,有人可以插入如何实现这一目标的正确方向吗?谢谢。 最佳答案 您只需覆盖验证方法: from PyQt5 imp
我使用pyqt开发一个对话框,和一个LineEidt有些像下面这样,但我无法从 lineEdit1 获取任何内容: lineEdit1 = QtGui.QLineEdit() lineEdit1.se
我有一个(希望如此)简单的问题: 我创建了一个具有表单 (form.ui) 的新类。在这种形式中,我想构建某些 lineEdits。我想通过编码而不是拖放来做到这一点。我可以想到两种不同的方法来做到这
我想让 QLineEdit 看起来像 QLabel 如果它处于非事件状态则带有粗体文本,如果它像 QLineEdit 如果处于事件状态则具有正常粗细。在我的理解中,“事件”= 当显示文本光标并且用户可
QLineEdit 在 .clear() 或 .setText() 方法上触发信号。因此,每次使用这些方法来阻止 LineEdit 发出信号时,我都需要 .blockSignals(True) 然后是
我使用 QT Designer 绘制了一个 UI,但发现没有参数可让我将 QLineEdit 输入设置为大写。 在网上搜索了一些之后,我只看到了极少数满足我需要的结果,但是都是用 Qt 编码的。例如,
我是一名优秀的程序员,十分优秀!