crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QTextEdit перевод вводимых символов в верхний регистр
FantasyOr
  опции профиля:
сообщение 17.12.2010, 19:38
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 75
Регистрация: 13.8.2010
Пользователь №: 1956

Спасибо сказали: 4 раз(а)




Репутация:   0  


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

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

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

кто что подскажет?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 17.12.2010, 20:19
Сообщение #2


Участник
**

Группа: Участник
Сообщений: 235
Регистрация: 3.8.2009
Из: Иркутск
Пользователь №: 982

Спасибо сказали: 28 раз(а)




Репутация:   2  


http://doc.qt.nokia.com/4.7/qt.html#InputMethodHint-enum
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FantasyOr
  опции профиля:
сообщение 18.12.2010, 12:04
Сообщение #3


Студент
*

Группа: Участник
Сообщений: 75
Регистрация: 13.8.2010
Пользователь №: 1956

Спасибо сказали: 4 раз(а)




Репутация:   0  


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
"> - Все следующие алфавитный символы переводятся в верхний регистр."

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MoPDoBoPoT
  опции профиля:
сообщение 18.12.2010, 22:18
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 172
Регистрация: 7.5.2009
Из: Москва
Пользователь №: 738

Спасибо сказали: 44 раз(а)




Репутация:   9  


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

Зато можно подменить своим событием. Но с модификаторами лучше не играться, а то можно на трудноотлавливаемый баг нарваться.
Кстати, если это нужно в качестве единичного использования, то можно воспользоваться фильтром событий (для этого читать про QObject::installEventFilter() QApplication::sendEvent())
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
FantasyOr
  опции профиля:
сообщение 22.12.2010, 15:31
Сообщение #5


Студент
*

Группа: Участник
Сообщений: 75
Регистрация: 13.8.2010
Пользователь №: 1956

Спасибо сказали: 4 раз(а)




Репутация:   0  


справился с этой закавыкой так:

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

};
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 29.3.2024, 16:31