特定の列の各行にコンボ ボックスを表示するテーブルを Qt に実装する必要があります。
これまでのところ、この例に基づいています: http://doc.qt.nokia.com/4.7-snapshot/itemviews-spinboxdelegate.html およびこの質問: QStandardItem + QComboBox QItemDelegate を作成することに成功しました。
私の問題は、main.cpp の main() 関数から実装するとすべて正常に動作することですが、Qt Designer にテーブルを挿入して mainwindow.cpp の MainWindow クラスの関数内で使用するとうまく動作しません。 .
手がかりを教えてください。前もって感謝します!
main.cpp の委任 (2 番目の列をダブルクリックすると、コンボ ボックスが表示されます):
QStandardItemModel model(4, 2);
QTableView tableView;
tableView.setModel(&model);
ComboBoxDelegate delegate;
tableView.setItemDelegateForColumn(1,&delegate);
tableView.horizontalHeader()->setStretchLastSection(true);
for (int row = 0 ; row < 4; ++row) {
for (int col = 0; col < 2; ++col) {
QModelIndex index = model.index(row, col, QModelIndex());
model.setData(index, QVariant((row+1) * (col+1)));
}
}
tableView.show();
mainwindow.cpp の代替 1 での委任 (空のテーブルが表示されます)
QStandardItemModel model(4,2);
ui->tablePoint->setModel(&model);
ComboBoxDelegate delegate;
ui->tablePoint->setItemDelegateForColumn(1,&delegate);
ui->tablePoint->horizontalHeader()->setStretchLastSection(true);
for (int row = 0 ; row < 4; ++row) {
for (int col = 0; col < 2; ++col) {
QModelIndex index = model.index(row, col, QModelIndex());
model.setData(index, QVariant((row+1) * (col+1)));
}
}
mainwindow.cpp の代替 2 の委任 (表は表示されますが、2 番目の列をダブルクリックすると、コンボ ボックスは表示されません。代わりに、通常のスピン ボックスが表示されます):
QStandardItemModel* model = new QStandardItemModel(4,2);
ui->tablePoint->setModel(model);
ComboBoxDelegate delegate;
ui->tablePoint->setItemDelegateForColumn(1,&delegate);
ui->tablePoint->horizontalHeader()->setStretchLastSection(true);
for (int row = 0 ; row < 4; ++row) {
for (int col = 0; col < 2; ++col) {
QModelIndex index = model->index(row, col, QModelIndex());
model->setData(index, QVariant((row+1) * (col+1)));
}
}