QItemDelegate с пользовательскими виджетами

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

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

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 () в какой-то момент. Кто-нибудь может предложить указатели на то, где их назвать?

Благодарю.

1

Решение

Вы можете сохранить виджет редактора в качестве члена класса и выдавать 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);
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]