Domanda

Sto avendo problemi con le mie classi QTableView e QItemDelegate.Per una colonna il mio delegato crea una semplice casella combinata e tutto funziona bene.Per la mia 2a colonna ho bisogno di un widget che ha due caselle combinate in un singolo widget.

Ho scritto il seguente codice nel mio QItemDelegate, solo per essere chiaro Questo mostra solo il codice per la mia 2a colonna, quella che non funziona.L'altra semplice combinazione di combo non è mostrata in quanto funziona bene:

QWidget *UserDefinedUnitsDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem & option ,const QModelIndex & index ) const
{
    //set up a simple widget with a layout
    QWidget* pWidget = new QWidget(parent);
    QHBoxLayout* hLayout = new QHBoxLayout(pWidget);
    pWidget->setLayout(hLayout);

    //add two combo boxes to the layout
    QComboBox* comboEditor = new QComboBox(pWidget);    
    QComboBox* comboEditor2 = new QComboBox(pWidget);   

    //now add both editors to this
    hLayout->addWidget(comboEditor);
    hLayout->addWidget(comboEditor2);
    return pWidget;
}
.

Ora questo viene visualizzato solo bene ma quando lo modifico e fai clic su altrove non smette di smettere di modificare.Qualcuno può offrire qualche suggerimento?

Modifica: quindi ho bisogno di chiamare commitdata () e ravvicinarsi () ad un certo punto.Qualcuno può offrire puntatori su dove chiamarli?

Grazie.

È stato utile?

Soluzione

È possibile mantenere il widget dell'editor come membro della classe ed emettere commitData quando l'indice corrente di uno dei ComboBox è cambiato.Quindi è possibile connetterti currenindexchanged (int) a uno slot ed emettere commitData da lì:

QWidget *UserDefinedUnitsDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem & option ,const QModelIndex & index ) const
{
    //set up a simple widget with a layout
    pWidget = new QWidget(parent);
    QHBoxLayout* hLayout = new QHBoxLayout(pWidget);
    pWidget->setLayout(hLayout);

    //add two combo boxes to the layout
    QComboBox* comboEditor = new QComboBox(pWidget);    
    QComboBox* comboEditor2 = new QComboBox(pWidget);   

    connect(comboEditor,SIGNAL(currentIndexChanged(int)),this,SLOT(setData(int)));
    connect(comboEditor2,SIGNAL(currentIndexChanged(int)),this,SLOT(setData(int)));

    //now add both editors to this
    hLayout->addWidget(comboEditor);
    hLayout->addWidget(comboEditor2);
    return pWidget;
}

void UserDefinedUnitsDelegate::setData(int val)
{
    emit commitData(pWidget);
}
.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top