我想在QPlainTextEdit
中键入时将所有小写字符转换为大写。在QLineEdit
中,我通过验证器执行相同的操作,但是似乎没有用于QPlainTextEdit
的验证器。
我已经尝试过ui->pte_Route->setInputMethodHints(Qt::ImhUppercaseOnly);
,但是它什么也没做,很可能使用错误。
有更好的选择吗?
最佳答案
使用事件过滤器进行快速测试似乎效果不错。
class plain_text_edit: public QPlainTextEdit {
using super = QPlainTextEdit;
public:
explicit plain_text_edit (QWidget *parent = nullptr)
: super(parent)
{
installEventFilter(this);
}
protected:
virtual bool eventFilter (QObject *obj, QEvent *event) override
{
if (event->type() == QEvent::KeyPress) {
if (auto *e = dynamic_cast<QKeyEvent *>(event)) {
/*
* If QKeyEvent::text() returns an empty QString then let normal
* processing proceed as it may be a control (e.g. cursor movement)
* key. Otherwise convert the text to upper case and insert it at
* the current cursor position.
*/
if (auto text = e->text(); !text.isEmpty()) {
insertPlainText(text.toUpper());
/*
* return true to prevent further processing.
*/
return true;
}
}
}
return super::eventFilter(obj, event);
}
如果运行良好,则可以始终将事件过滤器代码单独取出以重新使用。
关于c++ - 强制QPlainTextEdit大写字符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/55656698/