Russian Qt Forum
Март 29, 2024, 09:38 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: QPlainTextEdit меняется при установке обработчика событий  (Прочитано 5003 раз)
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« : Май 14, 2023, 08:31 »

здравствуйте.
На форме есть QPlainTextEdit. Нужно сравнить текст в нем до- и после- изменения. Пытаюсь отследить получение и потерю виджетом фокуса.
В .h
Код:
class FocusFilter:public QObject
{
    public:
        FocusFilter(QObject* pobj=0);
    protected:
        virtual bool eventFilter(QObject*,QEvent*);
};
В .cpp
Код:
ui->TEOpis->installEventFilter(new FocusFilter(ui->TEOpis));

и
Код:
FocusFilter::FocusFilter(QObject *pobj):QObject(pobj)
{
}
bool FocusFilter::eventFilter(QObject * obj, QEvent *ev)
{
    QString tmp_opis;
    if(obj->objectName()=="TEOpis")
    {
        if(((QFocusEvent*)ev)->type()==QEvent::FocusIn)
            tmp_opis=((QPlainTextEdit*)obj)->toPlainText();
        else if(ev->type()==QEvent::FocusOut)
        {
            if(tmp_opis!=((QPlainTextEdit*)obj)->toPlainText()) //текст был изменен
                tmp_opis=((QPlainTextEdit*)obj)->toPlainText();
        }
        return true;
    }
    return false;
}
Все работает, только вот QPlainTextEdit на форме выглядит, как совсем маленький QLineEdit, и накакие фиксированные размеры и установка минимальных размеров не помогают. Что я сделал не так?
« Последнее редактирование: Май 14, 2023, 08:46 от mokynis » Записан

QT4, Qt5, Qt6 Debian, ArchLinux
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« Ответ #1 : Май 14, 2023, 09:03 »

сам спросил, сам решил... Хотя решение не совсем удачное. Вместо QPlainTextEdit поставил QTextEdit. Он не сжимается. Но все-таки, почему так странно ведет себя QPlainTextEdit?
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« Ответ #2 : Май 14, 2023, 10:43 »

"не понос, так золотуха". Все равно не получается: стоит подключить фильтр, QTextEdit становится недоступным для редактирования. Что можно сделать, чтобы ввести длинную надпись и отследить окончание редактирования?
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #3 : Май 14, 2023, 23:01 »

нужно возвращать true только для тех событий, которые были пойманы и которые не должны быть обработаны стандартным образом. у тебя получается, что ты «съедаешь» абсолютно все события TEOpis, потому и не работает.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
mokynis
Самовар
**
Offline Offline

Сообщений: 176


Просмотр профиля
« Ответ #4 : Май 16, 2023, 11:30 »

Wow! То, что надо, спасибо!
Записан

QT4, Qt5, Qt6 Debian, ArchLinux
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.053 секунд. Запросов: 22.