Вопрос

у меня проблемы с моим QTableView и QItemDelegate занятия.Для одного столбца мой делегат создает простое поле со списком, и все работает нормально.Для второго столбца мне нужен виджет с двумя полями со списком в одном виджете.

Я написал следующий код в своем QItemDelegate, чтобы внести ясность, здесь показан только код для моего второго столбца, который не работает.Другое простое поле со списком не отображается, поскольку оно работает нормально:

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

Теперь это отображается нормально, но когда я редактирую его и нажимаю в другом месте, редактирование не прекращается.Может ли кто-нибудь предложить какие-либо указатели?

Редактировать:Поэтому мне нужно в какой-то момент вызвать CommitData() и closeEditor().Может ли кто-нибудь подсказать, куда их звонить?

Спасибо.

Это было полезно?

Решение

Вы можете сохранить виджет редактора как член класса и генерировать commitData, когда текущий индекс одного из полей со списком изменился.Таким образом, вы можете подключить currentIndexChanged(int) к слоту и отправить оттуда commitData:

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);
}
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top