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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: срабатывание сигналов  (Прочитано 4601 раз)
Evgeniya
Гость
« : Февраль 22, 2010, 12:31 »

Доброго времени суток!!!
Подключаю к tableView два сигнала
Код
C++ (Qt)
selectionChanged(QItemSelection,QItemSelection);
clicked(const QModelIndex);
 
при клике мыши по разным элементам таблицы,срабатывают оба сигнала,что не удивительно )))
Можно ли как-нить сделать так,чтобы сигнал click() срабатывал бы только когда сликаешь по одному и тому же элементу,т.е. когда не срабатывает сигнал selectionChanged(). А в остальных бы случаях срабатывал бы только selectionChanged()
Записан
Evgeniya
Гость
« Ответ #1 : Февраль 22, 2010, 13:17 »

т.е. я хочу чтобы сигнал clicked() срабатывал, только когда нет перехода на др элемент...а во всех остальных случаях он не срабатывал
Записан
Evgeniya
Гость
« Ответ #2 : Февраль 22, 2010, 13:41 »

а можно как-нить определить сработал ли сигнал selectionChanged() и если сработал,то не выполнять сигнал clicked()??
Записан
SABROG
Гость
« Ответ #3 : Февраль 22, 2010, 16:46 »

Объясните откуда ноги растут, в чем первопричина проблемы?
Записан
crossly
Гость
« Ответ #4 : Февраль 22, 2010, 20:16 »

может проще решать обрабатывать сигнал или нет......
Записан
Павел_F.
Гость
« Ответ #5 : Февраль 22, 2010, 23:02 »

Можно лишь догадываться... Но у меня такая проблема возникла когда надо было "заставить" пользователя нужным образом и в нужном порядке заполнить таблицу, с автоматическим переходом к редактированию следующей позиции. Весьма корявый интерфейс в целом, но заказчик желал именно так. В результате я забил на сигналы и все что мне надо делал в edit ( const QModelIndex & index, EditTrigger trigger, QEvent * event ) и closeEditor ( QWidget * editor, QAbstractItemDelegate::EndEditHint hint ) своего класса унаследованного от QTableView.

Отсюда рискну предположить что либо у вас тоже заказчик "со странностями", либо вы сами загадали не лучший интерфейс. Если второе то советую пересмотреть ваш подход к созданию GUI.
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #6 : Февраль 23, 2010, 00:23 »

при клике мыши по разным элементам таблицы,срабатывают оба сигнала,что не удивительно )))
Можно ли как-нить сделать так,чтобы сигнал click() срабатывал бы только когда сликаешь по одному и тому же элементу,т.е. когда не срабатывает сигнал selectionChanged(). А в остальных бы случаях срабатывал бы только selectionChanged()
Если я правильно понял, Вы хотите так:

- если пользователь кликнул (нажал и отпустил кнопку мыши) на уже выбранной ячейке - тогда Вы что-то делаете
- иначе (ячейка не была выбрана) - просто смена фокуса

Тогда надо изучать "хронологию" - пусть первым приходит selectionChanged. Тогда заведите переменную (член класса таблицы) напр. так (псевдокод)

Код:
void selectionChanged( ...) 
{
  mSelectionChangedFlag = true;   // запоминаем что пришел сигнал selectionChanged
  ....
}

void click(... )
{
  bool theSelectionChangedFlag = mSelectionChangedFlag;   // копируем флаг
  mSelectionChangedFlag = false;                                     // зачищаем для след. сеанса
  ...
  if (!theSelectionChangedFlag) {
    .... // ага, это "новая" ячейка, прпопускаем
  }
  else {
    .... // click на уже выбранную - акция
}
А вообще говоря, я согласен с ответившими - если операция зависит от контекста (на уже выбранную - так, иначе - по-другому)- это всегда сложновато и не очень удобно. Хорошая практика - использовать клавиши Alt и/или Ctl для спец. операций
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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