【问题标题】:Quotation marks in QT text editing widgetsQT 文本编辑小部件中的引号
【发布时间】:2011-12-02 14:16:25
【问题描述】:

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

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

您知道使用 4.7 版 Qt(用于 C++)实现此目的的任何方法吗?

谢谢

【问题讨论】:

  • 也许您使用了某种复杂的验证器?其他 unicode 字符是否有效?
  • 我不使用任何验证器。其他 unicode 字符可以正常工作,甚至是希伯来语,它会自动开始从右到左键入。我已经在 linux、windows xp 和 mac 上测试过,到处都是相同的结果。

标签: c++ qt text input quotes


【解决方案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("“");
                 this->insertHtml("”");
                 this->insertHtml("„");
                 this->insertHtml("“");
             }
             else
                 QTextEdit::keyPressEvent(e); // this passes other keys for ordinary processing
             }
         }
    }
    

    您应该添加一些逻辑来控制插入哪些引号(可能基于语言环境和 if-opening-quotes-are-already-inserted)。希望有帮助

【讨论】:

  • 谢谢。我希望我不必自己实现它,但从长远来看它会给我更多的灵活性。
【解决方案2】:

您确定您的键盘配置正确吗?以下对我来说处理花括号就好了(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"

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

【讨论】:

  • 它不在字体中,因为复制/粘贴到 MS Word 中会粘贴直引号。关于键盘配置,您知道哪些可能配置不正确吗?我正在使用带有默认捷克键盘布局的捷克本地化 Windows XP,没有进行任何修改。
  • 我上面的测试应用程序对你有用吗?粘贴到记事本会得到什么结果?
  • 用捷克语键盘我直接粘贴双引号。
  • 您究竟是如何尝试键入花引号的?您使用的是什么键盘布局以及您按的是什么键?如果你复制并粘贴这个:,会发生什么?
  • 我正在用键盘输入文本。我提到了粘贴文本只是为了排除使用不能正确绘制弯引号的字体的可能性。要回答上一个问题,您输入的那个字符会在记事本和我的应用程序中正确粘贴为弯引号。正如我之前提到的,我使用的是捷克语键盘布局,我正在按下 shift 和键盘上唯一的双引号字符。感谢您的帮助。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-02
  • 2018-02-03
  • 2011-11-20
  • 1970-01-01
  • 1970-01-01
  • 2013-07-29
相关资源
最近更新 更多