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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: [Решено?] Помогите настроить реакцию кнопок в столбце.  (Прочитано 4867 раз)
neosapient
Гость
« : Август 25, 2009, 13:32 »

Здравствуйте.

Сделал таблицу QTableWidget, со столбцами: стандартный, QLineEdit, QComboBox, QPushButton.


Первые три столбца реагируют на редактирование в соответствии с ожиданиями.
Проблема с столбцом кнопок, при кликах не вызывается QItemDelegate::setModelData()

Я хочу сделать так, чтобы при нажатии на кнопку было два состояния: кнопка отжата и надпись Lock, кнопка зажата (залипла) и надпись Work.

Исходник в приложении
« Последнее редактирование: Декабрь 16, 2009, 10:42 от neosapient » Записан
neosapient
Гость
« Ответ #1 : Август 28, 2009, 00:28 »

Есть у кого-нибудь идеи, как настроить обработчики кнопки в таблице/модели ?
Записан
neosapient
Гость
« Ответ #2 : Декабрь 15, 2009, 17:15 »

Вернулся к этой задаче. Очень хочу услышать вашу конструктивную критику по выбраному мной способу.

Решением стала разработка наследника QPushButton.
Чтобы кнопка залипала в конструкторе наследника устанавливаю флаг setCheckable(true). Так же поставил перехват сигнала toggled(bool) от кнопки, при изменении которого пишу текст "Work/Lock". В методе делегата QItemDelegate::setModelData()

Насколько я понял, Делегат переходит в режим редактирования когда содержащая его ячейка получает фокус и клик мышкой/<Enter>.  Точно также делегат выходит из режима редактирования, когда фокус с ячейки убирается. Сейчас кнопка доступна для кликов, но как в случае обычного комбобокса, выбранное значение возвращается в QItemDelegate::setModelData() только при смене фокуса.

Как программно из делегата сменять фокус внутри QTableView ?
« Последнее редактирование: Декабрь 15, 2009, 18:28 от neosapient » Записан
Marat(Qt)
Гость
« Ответ #3 : Декабрь 26, 2009, 18:40 »

отошлите из делегата сигнал, например:
Код:
emit needChangeFocus();
когда задаете делегата таблице:
Код:
MyDelegateClass *deleg = new MyDekegateCkass(ui->tableView);
ui->tableView->setItemDelegate(deleg);
connect(deleg,SIGNAL(needChangeFocus()),this,SLOT(changeFocus());
в слоте changeFocus делайте что в голову придет, если у tableView есть нужный вам слот - можете прямо к нему сигнал прицепить
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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