我有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());
}
它的工作。但我不知道這是多少正確的?
啊,,它的工作原理,只是沒有利用模型 - 視圖架構。有線程可以使用QAbstractProxyModel將單維模型轉換爲表的二維,但我沒有解決手頭上,戳 – Swift