TableWidget - argumentos das funcoes perdem o valor.
-
Boas
Tenho uma promoted tableWidget, que tou a utilizar para insercao de dados. E esta a contecer algo mt estranho. No metodo keypressEvent, tenho uma chamada para o closeEditor, com um valor de hint=EditNextItem, mas quando chega no closeEditor diz que a hint e´ submitmodel =S Tive de aldrabar o closeEditor, e usa-lo recursivamente, usando uma chamada igual e assim ja funciona.
Mas mais e na funcao nextEditableItem, em que passo um index. Desse index retiro info sobre o numero de colunas, e col e row ativas no momento, mas segundo o debugger, o index e´ invalido! e por isso nao funciona como devia.
Alguem me sabe explicar o que se esta a passar?
@QModelIndex GrelhaFactura::nextEditableItem(QModelIndex originalIndex){
int numCol=originalIndex.model()->columnCount();
int col=originalIndex.column();
int row=originalIndex.row();
col++;
for (int i = col; i < numCol; i++) {
if(originalIndex.model()->index(row,i).flags() && Qt::ItemIsEditable)
{
return originalIndex.model()->index(row,i);
}
// //this->insertRow(row+1);6
// return this->model()->index(row+1,0);
}
QModelIndex *a=new QModelIndex();// isto apenas serve para simular devolver NULL
return *a;
}@@void GrelhaFactura::keyPressEvent(QKeyEvent *event){
//apanhar as teclas carregadas: Tab e Return(Enter)if(event->key()==Qt::Key_Return && this->state()!= QAbstractItemView::EditingState) { QModelIndexList selectedRows = this->selectionModel()->selectedRows();//indexes dos itens da linha selecionada if(!selectedRows.isEmpty()){ QModelIndex selectedIndex=selectedRows[0]; //QModelIndex editableIndex= this->firstEditableItem(selectedIndex); this->setCurrentIndex(selectedIndex.model()->index(0,0)); this->edit(selectedIndex.model()->index(0,0)); } else{ QTableWidget::keyPressEvent(event); } }else if(event->key()==Qt::Key_Return){ closeEditor(this, QAbstractItemDelegate::EditNextItem); }
}@
@void GrelhaFactura::closeEditor(QWidget *editor, QAbstractItemDelegate::EndEditHint hint)
{
if(hint==QAbstractItemDelegate::NoHint){//nenhuma sugestao, chama funcao por defeito
QTableWidget::closeEditor(editor,QAbstractItemDelegate::SubmitModelCache);
//QAbstractItemDelegate::SubmitModelCache;
}
if(hint==QAbstractItemDelegate::EditNextItem || hint==QAbstractItemDelegate::EditPreviousItem){
QModelIndex editableIndex;
if(hint==QAbstractItemDelegate::EditNextItem){//sugestão do proximo
editableIndex = nextEditableItem(this->currentIndex());
}else if (hint==QAbstractItemDelegate::EditPreviousItem){//sugestao do anterior
editableIndex = previousEditableItem(this->currentIndex());
}
if(!editableIndex.isValid()){
QTableWidget::closeEditor(editor,QAbstractItemDelegate::SubmitModelCache);// esta funcao so existe pk por algum motivo, quando e´chamada apartir do keypressEvent altera o valor do hint. Fazendo esta recursividade o Enter ja se comporta como um TAB.
}else{
QTableWidget::closeEditor(editor,QAbstractItemDelegate::NoHint);
this->setCurrentIndex(editableIndex);
this->edit(editableIndex);
}
}
if(hint==QAbstractItemDelegate::SubmitModelCache){ // Isto aqui so existe para apanhar o hint que leva o valor modificado
this->closeEditor(editor,QAbstractItemDelegate::EditNextItem);
}else{ QTableWidget::closeEditor(editor, hint); }
}@