У меня проблемы с моим 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 () в какой-то момент. Кто-нибудь может предложить указатели на то, где их назвать?
Благодарю.
Вы можете сохранить виджет редактора в качестве члена класса и выдавать 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);
}
Других решений пока нет …