如何按Escape键重置QLineEdit文本
How to reset QLineEdit text by pressing Escape key?
我正在做一个Qt4项目。我有一个QLineEdit
,我想重用的行为,我看到当我点击转义键内的QLineEdit
,但我不确定如何。
当我按下转义键时,我让字段重置为开始编辑之前的值。这对我很有用,我想要这个行为。
理想情况下,我想要一个信号,我可以发射触发QLineEdit
重置到它之前的值。我宁愿不要尝试假装一个逃脱键事件。我可以缓存行编辑的旧值,但如果单击转义时行为已经存在,则这似乎需要更多的工作。谢谢。
如何通过设置使QLineEdit小部件响应Escape键程序化的文本?
通过用QLineEdit
的子函数重写QWidget::event
虚函数或更"本地"一点,如安装事件过滤器:
class MyLineEditEventFilter : public QObject
{
public:
explicit MyLineEditEventFilter(QLineEdit *parent) : QObject(parent)
{}
bool eventFilter(QObject *obj, QEvent *e)
{
switch (e->type())
{
case QEvent::KeyPress:
{
QKeyEvent *keyEvent = static_cast<QKeyEvent *>(e);
if (keyEvent->key() == Qt::Key_Escape)
{
// or set the other text from the variable
reinterpret_cast<QLineEdit *>(parent())->setText("Escape!");
}
break;
}
}
// standard event processing
return QObject::eventFilter(obj, e);
}
};
调用者是这样的:
m_pLineEditSearch = new QLineEdit;
auto* pLineEditEvtFilter = new MyLineEditEventFilter(m_pLineEditSearch);
m_pLineEditSearch->installEventFilter(pLineEditEvtFilter);
在按下Escape键后重置前面的文本,你可以使用不同的方法,但是你需要以某种方式获得保存字符串的对象的指针。如果不看代码,很难回答这个问题。
您也可以使用QDataWidgetMapper
并将您的QLineEdit
映射到它的模型。你提到的Esc键行为已经内置在那里了。您还可以利用QDataWidgetMapper
提供的其他功能。
你可以这样使用它:
//Your model can have multiple rows and columns, let's assume it's just one
//QLineEdit, that will mean one row and one column
QStandardItemModel *model = new QStandardItemModel(1,1,this);
QStandardItem* item = new QStandardItem("QLineEdit initial value");
QLineEdit* myLineEdit = new QLineEdit(this);
QDataWidgetMapper* dataWidgetMapper = new QDataWidgetMapper(this);
dataWidgetMapper->setModel(model);
dataWidgetMapper->addMapping(myLineEdit, 0);
dataWidgetMapper->toFirst();
希望对你有帮助。
UPDATE:
关于QDataWidgetMapper,
的一些缺陷,在我的部分的评论中提出了一些有效的担忧,即它不仅响应转义键,还响应其他键,如Enter/Return。因此,在调用QDataWidgetMapper::addMapping(QWidget*, int)
之后,将在小部件上安装一个事件过滤器,该过滤器将使用Escape和Enter/Return键。如果您仍然想知道是否按下了Enter或Escape,您可以在此之后添加一个事件过滤器,以便检查是否按下了其他键。
- 文本文件中的单词链表
- 从命令行c++发送文本文件名
- 在C++程序中输入的文本文件将不起作用,除非文本被复制和粘贴
- 2D数组来自文本输入,中间有空格
- 如何将内容数组写入文本文件?
- 如何从QToolBox中动态创建的QLineEdit中获取文本
- QTableWidget 和 QLineEdit - 位置和文本内容
- QlineEdit:显示一个处理过的文本,而不是输入的文本,而是保留它(自定义回声模式)
- 当用户单击QT中的QlineEdit时,如何更改Qlineed的文本
- 如何使QLineEdit编辑在文本来自QPushButton时启用
- QLineEdit 在激活时更改文本权重
- QLineEdit:如果鼠标悬停,则显示超长文本作为工具提示
- 为qlineedit设置了背景图像时,如何在qlineedit中设置文本颜色
- 为什么QLineEdit::setCursorPosition(int)选择(突出显示)文本
- 在已经包含某些文本的QTextEdit中显示QLineEdit中的文本,并实时更新
- 更改 QLineEdit 占位符文本的颜色
- 如何从 QLineEdit 对象中检索文本
- 实时更改qt应用程序的qlineedit中的文本
- 如何按Escape键重置QLineEdit文本
- QT:简单的文本从QLineEdit到QLabel的不同类