2011-12-02 66 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

用捷克鍵盤粘貼直的雙引號。 –