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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: eventFilter  (Прочитано 5907 раз)
Bzzzuka
Гость
« : Май 03, 2012, 13:14 »

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

Код:
bool tabview::eventFilter(QObject *obj, QEvent *event)
{
if (event->type() == QEvent::FocusIn)
{
  if (obj==ui->textEdit1)
      lastFocus = 1;
  if (obj==ui->textEdit2)
      lastFocus = 2;
  if (obj==ui->textEdit3)
      lastFocus = 3;
  if (obj==ui->textEdit4)
      lastFocus = 4;
}
return QObject::eventFilter(obj, event);
}
« Последнее редактирование: Май 03, 2012, 13:21 от Bzzzuka » Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Май 03, 2012, 13:18 »

А сам эвентФильтр покажи как устанавливаешь.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bepec
Гость
« Ответ #2 : Май 03, 2012, 13:19 »

Эм... Тебе нужно узнать, на каком из них фокус? Не проще соединить напрямую с сигналом с lineEdit' ов, а потом уже делать что угодно?
Записан
Bzzzuka
Гость
« Ответ #3 : Май 03, 2012, 13:24 »

Я хочу сделать так, пользователь выбирает одно из текстовых полей затем нажимает на определенный комбобокс и текст из комбобокса вставляется в то поле которое выбрал пользователь, то есть фокус смещается с текстового поля на комбобокс. Мне нужно узнать в каком из этих полей в последний раз стоял фокус.
« Последнее редактирование: Май 03, 2012, 13:27 от Bzzzuka » Записан
Bzzzuka
Гость
« Ответ #4 : Май 03, 2012, 13:27 »

А сам эвентФильтр покажи как устанавливаешь.

что ты имеешь ввиду под устанавливаешь?

Код:
#include <QEvent>

Вот это??
Записан
Bzzzuka
Гость
« Ответ #5 : Май 03, 2012, 13:30 »

Попыталась вывести в сообщении значение lastFocus

Код:
void tabview::on_buttonHelp_clicked()
{
    if (lastFocus = 1)
        QMessageBox::warning(this,tr("Check"),tr("You choose first textEdit"),QMessageBox::Ok);
    if (lastFocus = 2)
        QMessageBox::warning(this,tr("Check"),tr("You choose second textEdit"),QMessageBox::Ok);
    if (lastFocus = 3)
        QMessageBox::warning(this,tr("Check"),tr("You choose third textEdit"),QMessageBox::Ok);
    if (lastFocus = 4)
        QMessageBox::warning(this,tr("Check"),tr("You choose fourth textEdit"),QMessageBox::Ok);

}

Выводяться все четыре сообщения подряд в независимости от того какой я текст эдит выбрала
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #6 : Май 03, 2012, 13:31 »

http://doc-snapshot.qt-project.org/4.8/qobject.html#installEventFilter
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
m_ax
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2095



Просмотр профиля
« Ответ #7 : Май 03, 2012, 13:31 »

Я хочу сделать так, пользователь выбирает одно из текстовых полей затем нажимает на определенный комбобокс и текст из комбобокса вставляется в то поле которое выбрал пользователь, то есть фокус смещается с текстового поля на комбобокс. Мне нужно узнать в каком из этих полей в последний раз стоял фокус.

А вы у пользователей спрашивали: им это надо? Я бы от такого интерфейса и поведения забыл бы раз и навсегда об этой софтине) Имхо, конечно)
Без обид  Строит глазки
Записан

Над водой луна двурога. Сяду выпью за Ван Гога. Хорошо, что кот не пьет, Он и так меня поймет..

Arch Linux Plasma 5
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #8 : Май 03, 2012, 13:31 »

Не путай = и ==.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bzzzuka
Гость
« Ответ #9 : Май 03, 2012, 13:39 »

как я поняла ивентфильтр надо установить на объект чтобы он работал. в моем случае на все четыре текст эдита?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #10 : Май 03, 2012, 13:41 »

как я поняла ивентфильтр надо установить на объект чтобы он работал. в моем случае на все четыре текст эдита?
Да.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bzzzuka
Гость
« Ответ #11 : Май 03, 2012, 13:50 »

Код:
monitoredObj->installEventFilter(filterObj);

что такое filterObj? это то название самого фильтра? нужно ли мне вообще туда что-то писать если у меня только один фильтр?

Qt пишет что в скобках должно быть
Код:
void installEventFilter(QObject*)
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #12 : Май 03, 2012, 13:51 »

ui->textEdit1->installEventFilter(this);
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Bzzzuka
Гость
« Ответ #13 : Май 03, 2012, 13:54 »

Спасибо, все работает
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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