c++ - 强制 QPlainTextEdit 大写字符

标签 c++ qt qplaintextedit

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

相关文章:

c++ - "QFileSystemWatcher: failed to add paths"但仍然有效

c++ - 是否可以阻止共享/动态库的网络访问?

python - 在 QPlainTextEdit 中使用 tqdm 显示终端输出

c++ - QTextEdit 与 QPlainTextEdit

c++ - 可重载的 boost::asio::basic_stream_socket

c++ 从数组继承 darray

c++ - 具有虚拟析构函数的派生类的 Sizeof

c++ - 错误 : no match for ‘operator<’ in ‘__x < __y’ when trying to insert in two map

c++ - Qt 调试器输入不工作

c++ - 如何在文本突出显示期间保留语法突出显示