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);
    }
    

    }@



  • resolveu o problema?


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.