Qt TableView模型setData()崩溃应用程序
问题描述:
我正在学习Qt,现在我正在开发扫雷类游戏。Qt TableView模型setData()崩溃应用程序
对于显示游戏板我使用QTableView与我的自定义模型,扩展QAbstractTableModel
。
显示模型中的数据效果很好。我已超载QVariant data(const QModelIndex &index, int role)
,所有单元格都正确显示其“内容”。
现在我想处理游戏板点击并将任何数据传递给模型。
我已经超负荷使用setData()函数:
bool MyModel::setData(const QModelIndex &index, const QVariant &value, int role) {
qDebug("setData invoked");
return false;
}
和处理的TableView点击:
MainWindow::MainWindow(QWidget *parent) : QWidget(parent), ui(new Ui::MainWindow)
{
ui->setupUi(this);
QTableView *tableView = this->findChild<QTableView*>("tableView");
tableView->setModel(new MyModel(tableView, DEFAULT_ROWS_NUM, DEFAULT_COLS_NUM));
QObject::connect(tableView, &QAbstractItemView::clicked, [&](const QModelIndex &index) {
qDebug(qUtf8Printable(QString("click: %1 %2").arg(index.row()).arg(index.column())));
tableView->model()->setData(index, 'W'); // this line crashes application
});
}
但tableView->model()->setData()
会导致应用程序崩溃:
Crashed Thread: 0 Dispatch queue: com.apple.main-thread
Exception Type: EXC_BAD_ACCESS (SIGSEGV)
Exception Codes: KERN_INVALID_ADDRESS at 0x0000000000000008
Exception Note: EXC_CORPSE_NOTIFY
Thread 0 Crashed:: Dispatch queue: com.apple.main-thread
0 org.qt-project.QtWidgets 0x0000000104bc9c67 QAbstractItemView::model() const + 7
1 studia.Minesweeper 0x0000000104939501 MainWindow::MainWindow(QWidget*)::$_0::operator()(QModelIndex const&) const + 385 (mainwindow.cpp:13)
我做有问题?这是实现鼠标点击事件模型更改的好方法吗?
答
与您关闭的问题[&]
。将其替换为[tableView]
。
问题可能与您的关闭'[&]'。用'[tableView]'替换它。 – Evgeny
完美!非常感谢! @evgeny发布它作为答案,以便我可以接受它:) – Krzysiek