QT文本编辑小部件中的引号

Quotation marks in QT text editing widgets

本文关键字:文本编辑 小部 QT      更新时间:2023-10-16

我在Qt文本编辑小部件中编写引号有问题。我输入的每一个单引号或双引号都会作为一个直引号插入。但是,我希望输入左、右双引号(如果可能的话,在开头的左下角和结尾的右上方,这在某些语言中很常见,例如斯洛伐克语或捷克语)。

我原以为切换到语言的键盘布局就能解决这个问题(就像从左到右和从右到左的语言一样),但这并没有改变任何东西。我没有在文档中找到任何关于这一点,这让我觉得我错过了什么。。

你知道有什么方法来实现这个与Qt (c++)的版本4.7?

谢谢

现在我明白你的问题了。我在这里看到了两个解决方案:

    QRegExpValidator的使用这需要对QTextEdit::textChanged()事件进行操作。在这种情况下,您必须在每次更改时解析所有文本-性能效率不高(:)。
  • 你可以捕获"键并在其后面添加一些逻辑

    class editor : public QTextEdit
    {
        Q_OBJECT
    public:
        explicit editor();
        void keyPressEvent(QKeyEvent *e)
        {
            if (e->key() == Qt::Key_QuoteDbl)
            {
                 this->insertHtml("“");
                 this->insertHtml("”");
                 this->insertHtml("„");
                 this->insertHtml("“");
             }
             else
                 QTextEdit::keyPressEvent(e); // this passes other keys for ordinary processing
             }
         }
    }
    

    您应该添加一些逻辑来控制插入的引号(可能是基于locale和if- openopen -quotes-are-already- inserts)。

您确定键盘配置正确吗?下面是处理花引号对我来说很好(Windows 7):

#include <QtGui>
class MyLineEdit : public QLineEdit {
  Q_OBJECT
public:
  explicit MyLineEdit() : QLineEdit(NULL) {
    connect(this, SIGNAL(textChanged(QString)), SLOT(on_textChanged(QString)));
  }
private slots:
  void on_textChanged(const QString &text) {
    qDebug() << text;
  }
};
int main(int argc, char **argv) {
  QApplication app(argc, argv);
  MyLineEdit edit;
  edit.show();
  return app.exec();
}
#include "main.moc"

另一个想法:您确定在文本编辑部件中使用的字体对直引号和大引号使用不同的字形吗?