gpt4 book ai didi

c++ - 始终在 QTableView 的单元格中显示 QComboBox

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:42:09 25 4
gpt4 key购买 nike

我有一个带有关联模型的 QTableView。我想在第三列的每个单元格中都有一个 QComboBox。

我使用了一个 QItemDelegate,如本页所示:https://wiki.qt.io/Combo_Boxes_in_Item_Views .它有效,但组合框仅在双击单元格后显示,用户必须再次单击以显示可能值的列表。这有点不方便。

有没有办法让组合框始终可见?

我正在尝试使用 openPersistentEditor 方法,但它现在不起作用 ...

我的代码附近有一些代码(ComboBoxItemDelegate 与之前链接的示例相同):

MonWidget::MonWidget() : _ui(new Ui::MonWidget())
{
// ...

// Links Model
_linksModel = new QStandardItemModel(this);

// Links Headers
QStringList linksTableViewHeader << "Name" << "Path" << "Version";
_linksModel->setHorizontalHeaderLabels(linksTableViewHeader) ;

// Create itemDelegate for linksView
_itemDelegate = new ComboBoxItemDelegate(_ui->_linksView);

// Set the links model on the links table view
_ui->_linksView->setModel(_linksModel);
_ui->_linksView->horizontalHeader()->setSectionResizeMode(QHeaderView::Interactive);
_ui->_linksView->horizontalHeader()->setStretchLastSection(true);
_ui->_linksView->horizontalHeader()->setMinimumSectionSize(100);
_ui->_linksView->setSelectionBehavior(QAbstractItemView::SelectRows);
_ui->_linksView->setItemDelegate(_itemDelegate);
}
// AddLinksInListView : method called when I add some rows ...
void MonWidget::AddLinksInListView(QList<DataItem*> listLinks)
{
int j=0;
int initialLinksNumber = _linksModel->rowCount();

// For each link, add a row with the link information
for (int row=initialLinksNumber; row<(initialLinksNumber + listLinks.size()) ; row++)
{
for (int column = 0; column < _linksModel->columnCount(); column++) {
//item used to display information for each column in the table view of links contained in the collection
QStandardItem *item=0;

switch(column)
{
case MonWidget::NAME:
{
item = new QStandardItem(listLinks.at(j)->data(MonWidget::NAME).toString());
_linksModel->setItem(row, column, item);
break;
}
case MonWidget::PATH:
{
item = new QStandardItem(listLinks.at(j)->data(MonWidget::PATH).toString());
_linksModel->setItem(row, column, item);
break;
}
case MonWidget::VERSION:
{
item = new QStandardItem(listLinks.at(j)->data(MonWidget::PATH).toString());
_linksModel->setItem(row, column, item);
_ui->_linksView->openPersistentEditor(_linksModel->index(row, column));
break;
}
}
}
j++;
}
}

最佳答案

是的,有办法,使用openPersistentEditor .假设您的模型名为 myModel:

YourDelegate* comboDelegate = new YourDelegate(this);
setItemDelegateForColumn(2, comboDelegate); // delegate set for the third column

...
// when adding a new line, use this.
// The combo box will be always visible
openPersistentEditor(myModel->index(iRow, 1));

关于c++ - 始终在 QTableView 的单元格中显示 QComboBox,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47576354/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com