crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )


  Ответ в QTextEdit перевод вводимых символов в верхний регистр
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
FantasyOr Дата 22.12.2010, 15:31
  справился с этой закавыкой так:

class SExpTextEdit: public QTextEdit
{
    Q_OBJECT
public:
    SExpTextEdit(QWidget * parent = 0)
        :QTextEdit(parent)
    {}

    SExpTextEdit(const QString & text, QWidget * parent = 0)
        :QTextEdit(text, parent)
    {}

signals:
    void outFocus();

protected:
    void focusOutEvent(QFocusEvent * event)
    {        
        emit outFocus();
        QTextEdit::focusOutEvent(event);
    }

    void keyPressEvent(QKeyEvent * e)
    {
        QKeyEvent * ke;
        ke = new QKeyEvent(QEvent::KeyPress, e->key(), e->modifiers(),
                    e->text().toUpper(), e->isAutoRepeat() );
        QTextEdit::keyPressEvent(ke);
    }

};
MoPDoBoPoT Дата 18.12.2010, 22:18
 
Цитата(FantasyOr @ 17.12.2010, 19:38) *
2)
наследуемся от QTextEdit и переопределить keyPressEvent, но в QKeyEvent невозможно изменить модификатор(изменить на шифт нажат) вот тут и тупик.

Зато можно подменить своим событием. Но с модификаторами лучше не играться, а то можно на трудноотлавливаемый баг нарваться.
Кстати, если это нужно в качестве единичного использования, то можно воспользоваться фильтром событий (для этого читать про QObject::installEventFilter() QApplication::sendEvent())
FantasyOr Дата 18.12.2010, 12:04
  maint Вы намекаете на:
textEdit1.setInputMethodHints(Qt::ImhUppercaseOnly);

уже пробовал, не работает.
я может и не прав, но причем тут хинт +
"Qt::ImhUppercaseOnly 0x40000 Only upper case letter input is allowed." вольный перевод: "допускается ввод только букв в верхнем регистре", а мне нужно, автоматически поднимать регистр, на подобии:
LineEdit1->setInputMask(">");

http://qtdocs.narod.ru/4.1.0/doc/html/qlineedit.html
"> - Все следующие алфавитный символы переводятся в верхний регистр."

maint Дата 17.12.2010, 20:19
  http://doc.qt.nokia.com/4.7/qt.html#InputMethodHint-enum
FantasyOr Дата 17.12.2010, 19:38
  Добрый ...
это просто ужас, нигде в интернетах нет решения этой проблемы, казалось бы довольно тривиальный велосипед... анн нет, либо все молчат зная секрет, либо никому не надо? не верю.

есть 2 варианта, и он вроде бы даже работает, но наполовину:
1)
- ловим у QTextEdit textChanged()
- сохраняем положение курсора
- читаем весь текст
- toUpper
- присваиваем поднятый текст обратно QTextEdit
- восстанавливаем курсор
но тут 1 минус:
- очень много ненужных действий

2)
наследуемся от QTextEdit и переопределить keyPressEvent, но в QKeyEvent невозможно изменить модификатор(изменить на шифт нажат) вот тут и тупик.

кто что подскажет?
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 29.4.2024, 17:45