Pergunta

Estou tendo problemas com meu QTableView e QItemDelegate classes.Para uma coluna minha delegado cria uma caixa de combinação simples e tudo funciona muito bem.Para a minha 2ª coluna, eu preciso de um widget que tem duas caixas de combinação em um único widget.

Eu escrevi o seguinte código no meu QItemDelegate, só para ficar claro, isso só mostra o código para a minha 2ª coluna, o que não funciona.O simples caixa de Combinação não é mostrado como ele funciona muito bem:

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

Agora, este apresenta apenas bom, mas quando eu editar e clique em outro lugar ele não parar a edição.Alguém pode oferecer algumas sugestões?

Editar:Então, eu preciso chamar CommitData() e closeEditor() em algum ponto.Alguém pode oferecer indicações sobre onde para chamar esses?

Obrigado.

Foi útil?

Solução

Você pode manter o editor do widget como um membro da classe e emitem commitData quando o índice atual de um dos comboboxes foi alterado.Assim você pode conectar currentIndexChanged(int) para um slot e emitem commitData de 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);
}
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top