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

时间:2011-12-02 14:16:25

标签: c++ qt text input quotes

我在Qt文本编辑小部件中编写引号时遇到问题。我输入的每个单引号或双引号都是直接插入的。但是,我想输入卷曲的左右引号(如果可能的话,在开头的左下角和末尾的右上角,这在某些语言中很常见 - 例如斯洛伐克语或捷克语。)

我认为切换到语言的键盘布局可以解决这个问题(就像从左到右和从右到左的语言一样),但这并没有改变任何东西。我没有在文档中找到任何关于此的内容,这让我觉得我错过了一些东西。或者不是。

你知道用4.7版的Qt(for C ++)实现这个目的的任何方法吗?

谢谢

2 个答案:

答案 0 :(得分:1)

您确定您的键盘配置正确吗?以下是处理卷曲引号(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"

另一个想法:你确定你在文本编辑小部件中使用的字体是否使用不同的字形来表示直接引号和引号?

答案 1 :(得分:1)

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

  • 使用QRegExpValidator。这需要对QTextEdit :: textChanged()事件采取行动。在这种情况下,您将不得不在每次更改时解析所有文本 - 效率不高(:
  • 您可以捕获"密钥并在其后面添加一些逻辑

    class editor : public QTextEdit
    {
        Q_OBJECT
    public:
        explicit editor();
        void keyPressEvent(QKeyEvent *e)
        {
            if (e->key() == Qt::Key_QuoteDbl)
            {
                 this->insertHtml("&#8220;");
                 this->insertHtml("&#8221;");
                 this->insertHtml("&#0132;");
                 this->insertHtml("&#0147;");
             }
             else
                 QTextEdit::keyPressEvent(e); // this passes other keys for ordinary processing
             }
         }
    }
    

    你应该添加一些逻辑来控制插入哪些引号(可能是locale和if-opening-quotes-are-inserted-inserted)。希望有所帮助