我想在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/

10-11 19:18