2011-12-02 68 views
1

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

我认为切换到语言的键盘布局会照顾到这一点(如从左到右和从右到左的语言),但这并没有改变任何东西。我在文档中没有发现任何关于这个的东西,这让我觉得我错过了一些东西。或不。

你知道有什么办法可以用4.7版的Qt(for C++)来实现吗?

谢谢

+0

也许你使用某种复杂的验证的?难道其他Unicode字符工作? – friendzis

+0

我不t使用任何验证器。其他unicode字符工作正常,甚至希伯来语,它会自动开始从右向左键入。我已经在linux,windows xp和mac上测试过了,每个地方都有相同的结果。 –

回答

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 
         } 
        } 
    } 
    

    背后的一些逻辑,您应该添加一些逻辑控制插入其中引号(也许语言环境和基础,如果打开引号,是-已插入)。希望帮助

+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" 

另一个想法:你确定你正在使用文本编辑插件的字体使用直对弯引号不同的字形?

+0

它不在字体中,因为复制/粘贴到MS Word中会粘贴直引号。关于键盘配置,你有什么想法可能配置不正确?我正在使用具有默认捷克键盘布局的捷克本地化Windows XP,无需任何修改。 –

+0

我上面的测试应用程序是否适合您?如果您粘贴到记事本中,会得到什么结果? –

+0

用捷克键盘粘贴直的双引号。 –