在QLineEdit
中,有一个textEdit()
信号,它只在用户更改文本时才发出,但在你调用setText()
时不会发出,
那么QTextEdit
中的等价物是什么?我只看到一个textChanged()
信号,文档指出每当文本文档更改时都会发出它。
编辑
我想实现自动保存功能,当然是使用 QTimer,
因此,当您开始编辑文档时,计时器会启动,超时时,我将文本保存在小部件中。
您可以在自己插入/修改内容时阻止QTextEdit
小部件的信号,然后在完成后释放阻止。通过这样做,只有在用户更改内容时才会发出信号。
bool QObject::blockSignals(bool block)
我查找了导师的代码,他以这种方式解决了问题:
- 为
QTextEdit
对象安装事件过滤器(this
是指向 mEdit 持有者的指针,即 QWidget)
mEdit->installEventFilter(this);
- 重写类中
QObject::eventFilter
方法,其中包含QTextEdit
对象(请记住,它是QWidget
继承器)
//override bool CustomEditWidget::eventFilter(QObject *watched, QEvent *event) { if(watched == mEdit && event->type() == QEvent::FocusOut){ changeValue(mEdit->toPlainText()); } return false; }
其余的您可以在文档中看到,有示例:https://doc.qt.io/qt-6/qobject.html#eventFilter