Кавычки в виджетах редактирования текста QT - PullRequest
1 голос
/ 02 декабря 2011

У меня проблемы с написанием кавычек в виджетах редактирования текста Qt.Каждый введенный мною одинарный или двойной кавычки вставляется как прямой.Однако я хотел бы ввести фигурные кавычки влево и вправо (и, если возможно, в левом нижнем углу в начале и в верхнем правом углу в конце, как это часто бывает в некоторых языках - например, на словацком или чешском).Я думал, что переключение на раскладку языка языка позаботится об этом (как в случае с языками слева направо и справа налево), но это ничего не меняет.Я не нашел ничего в документации по этому поводу, что заставляет меня думать, что я что-то упустил.Или нет.

Вам известен какой-нибудь способ добиться этого с помощью Qt (для C ++) версии 4.7?

Спасибо

Ответы [ 2 ]

1 голос
/ 03 декабря 2011

Теперь я понимаю вашу проблему. Я вижу два решения здесь:

  • Использование 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
             }
         }
    }
    

    Вы должны добавить некоторую логику, чтобы контролировать, какие кавычки вставляются (возможно, на основе локали и если-открывать-кавычки-уже-вставлены). Надеюсь, это поможет

1 голос
/ 02 декабря 2011

Вы уверены, что ваша клавиатура настроена правильно? Следующее отлично справляется с фигурными кавычками (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"

Другая идея: вы уверены, что шрифт, который вы используете в виджете редактирования текста, использует другой глиф для прямых и фигурных кавычек?

...