C + + Qt QcomboBox与桌面视图
我有QComboBox的问题。我需要一个带有桌面视图项目的组合框。C + + Qt QcomboBox与桌面视图
例如,QComboBox的默认值是:
┌─────────┐
│ ▼ │
├─────────┤
│ index 0 │
├─────────┤
│ index 1 │
├─────────┤
│ index 2 │
├─────────┤
│ index 3 │
└─────────┘
我需要这样的创建组合框:
┌───────────────────┐
│ ▼ │
├─────────┬─────────┤
│ index 0 │ index 1 │
├─────────┼─────────┤
│ index 2 │ index 3 │
└─────────┴─────────┘
我写的样本,但它无法正常工作:
QTableView *table = new QTableView(this);
QComboBox *cb = new QComboBox;
ui->verticalLayout->addWidget(cb);
cb->setView(table);
QStandardItemModel *model = new QStandardItemModel(2,2);
cb->setModel(model);
int x = 0;
int y = 0;
for (int i=0; i<4; i++)
{
model->setItem(x, y, new QStandardItem("index" + QString::number(i)));
if (i == 1) {
x++;
y = 0;
}
else
y++;
}
问题是 - 如果我选择索引3,ComboBox将设置索引2.
编辑:
QTableView *table = new QTableView(this);
QComboBox *cb = new QComboBox;
ui->verticalLayout->addWidget(cb);
cb->setView(table);
QStandardItemModel *model = new QStandardItemModel(2,2);
cb->setModel(model);
for (int i=0; i<4; i++)
model->setItem(i%2, i/2, new QStandardItem("index" + QString::number(i)));
// This one:
connect(table, SIGNAL(pressed(QModelIndex)), SLOT(setCheckBoxIndex(QModelIndex)));
//--SLOT--------
void MainWindow::setCheckBoxIndex(QModelIndex index)
{
QComboBox* combo = qobject_cast<QComboBox*>(sender()->parent()->parent());
combo->setModelColumn(index.column());
combo->setCurrentIndex(index.row());
}
它的工作。但我不知道这是多少正确的?
您应该使用setModelColumn()
,因为QComboBox
在时间上只显示一列。
这样的:
connect(table, &QTableView::pressed, [cb](const QModelIndex &index){
cb->setModelColumn(index.column());
});
,不编译。 [cb]不是一件事情。另外,应该知道组合框中的索引仍然是表格行的索引 – Swift
谢谢! setModelColumn()是可行的,但你的代码不能编译。我在主要问题中写了示例(编辑)。 –
不知道原因有在循环,但这种方式更易于阅读和可能的无差错:
for (int i=0; i<4; i++)
{
model->setItem(i%2, i/2, new QStandardItem("index" + QString::number(i)));
}
与列数代替幻数2,如果发生变化。
我认为,ComboBox使用表格的行而不是项目,并显示第一个元素,这需要研究。如果选择index0或index1,它会发挥什么作用?
编辑:是的,那是怎么回事。无论有多少列,组合框都会从表中接收行(记录号)。我认为你需要为QTableView创建一个自定义的委托,是的,改变模型列。另一种方法是用单列模型创建QTableView的模拟
啊,,它的工作原理,只是没有利用模型 - 视图架构。有线程可以使用QAbstractProxyModel将单维模型转换为表的二维,但我没有解决手头上,戳 – Swift