Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Bzzzuka от Май 03, 2012, 13:14



Название: eventFilter
Отправлено: 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);
}


Название: Re: eventFilter
Отправлено: Пантер от Май 03, 2012, 13:18
А сам эвентФильтр покажи как устанавливаешь.


Название: Re: eventFilter
Отправлено: Bepec от Май 03, 2012, 13:19
Эм... Тебе нужно узнать, на каком из них фокус? Не проще соединить напрямую с сигналом с lineEdit' ов, а потом уже делать что угодно?


Название: Re: eventFilter
Отправлено: Bzzzuka от Май 03, 2012, 13:24
Я хочу сделать так, пользователь выбирает одно из текстовых полей затем нажимает на определенный комбобокс и текст из комбобокса вставляется в то поле которое выбрал пользователь, то есть фокус смещается с текстового поля на комбобокс. Мне нужно узнать в каком из этих полей в последний раз стоял фокус.


Название: Re: eventFilter
Отправлено: Bzzzuka от Май 03, 2012, 13:27
А сам эвентФильтр покажи как устанавливаешь.

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

Код:
#include <QEvent>

Вот это??


Название: Re: eventFilter
Отправлено: Bzzzuka от Май 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);

}

Выводяться все четыре сообщения подряд в независимости от того какой я текст эдит выбрала


Название: Re: eventFilter
Отправлено: Пантер от Май 03, 2012, 13:31
http://doc-snapshot.qt-project.org/4.8/qobject.html#installEventFilter


Название: Re: eventFilter
Отправлено: m_ax от Май 03, 2012, 13:31
Я хочу сделать так, пользователь выбирает одно из текстовых полей затем нажимает на определенный комбобокс и текст из комбобокса вставляется в то поле которое выбрал пользователь, то есть фокус смещается с текстового поля на комбобокс. Мне нужно узнать в каком из этих полей в последний раз стоял фокус.

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


Название: Re: eventFilter
Отправлено: Пантер от Май 03, 2012, 13:31
Не путай = и ==.


Название: Re: eventFilter
Отправлено: Bzzzuka от Май 03, 2012, 13:39
как я поняла ивентфильтр надо установить на объект чтобы он работал. в моем случае на все четыре текст эдита?


Название: Re: eventFilter
Отправлено: Пантер от Май 03, 2012, 13:41
как я поняла ивентфильтр надо установить на объект чтобы он работал. в моем случае на все четыре текст эдита?
Да.


Название: Re: eventFilter
Отправлено: Bzzzuka от Май 03, 2012, 13:50
Код:
monitoredObj->installEventFilter(filterObj);

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

Qt пишет что в скобках должно быть
Код:
void installEventFilter(QObject*)


Название: Re: eventFilter
Отправлено: Пантер от Май 03, 2012, 13:51
ui->textEdit1->installEventFilter(this);


Название: Re: eventFilter
Отправлено: Bzzzuka от Май 03, 2012, 13:54
Спасибо, все работает