Russian Qt Forum

Qt => Model-View (MV) => Тема начата: qtист от Сентябрь 21, 2009, 16:56



Название: Нажатие кнопки-делегата
Отправлено: qtист от Сентябрь 21, 2009, 16:56
Создаю кнопки-делегат в QTableView и отлавливаю сигналы нажатия от них:

Код
C++ (Qt)
....
QWidget *ButtonDelegate::createEditor(QWidget *parent,
   const QStyleOptionViewItem &/* option */,
   const QModelIndex &  index ) const
{
   QPushButton  *editor = new  QPushButton (parent);
   connect(editor, SIGNAL(clicked()), this, SLOT(emitCommitData()));
}
....
 
void ButtonDelegate::emitCommitData()
{  QWidget  *but = qobject_cast<QWidget *>(sender());
  QTableView *tableview = qobject_cast<QTableView*>( but->parent()->parent() );
 
  int k=tableview->currentIndex().row();
 
}

При первом нажатии  на одну из кнопку k возвращает -1.
При последующих нажатиях на любых кнопках возвращется всё нормально.
И чём фишка?


Название: Re: Нажатие кнопки-делегата
Отправлено: break от Октябрь 18, 2009, 01:25
сталкивался с чем то подобным - в какой-то ячейке твоя кнопочка - скорее в каком столбце? Мне кажется как то так получается что удается нажать кнопочку а currentIndex у VIEW еще не обновлен - он вообще не понимает что кто-то выделил ячейку у кот. эта кнопка, а когда кнопка теряет фокус (а может отжимается) то cureentIndex обновляется... Как ты их нажимаешь - мышкой или пробелом, и самое интересное - попробуй нажать кнопочки клавишей Enter - у меня при нажатии мыши сначала табличка переходила в режим редактирования, только по второму клику менчялось состояние кнопки - и я это не поборол... а вот пробелом сразу, а если нажать через Enter то индекс тоже глючил...

самое прикольнок что если сделать не делегата а setCellWidget ( QPushButton() ) то все работает нормально...