我正在尝试给QtableView一个特定的行为。如果我选择一个单元格并用鼠标拖动它,则只会选择同一列中的单元格。
为此,我搜索了similar questions,并使用了lambda函数。
它可以在表(自定义表)的构造函数之外正常工作,就像这样:
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
MiTabla *tabla = new MiTabla;
tabla->setModel(new MiModelo());
tabla->setItemDelegate(new MiDelegado());
selectionModel = tabla->selectionModel();
setCentralWidget(tabla);
QObject::connect(selectionModel,&QItemSelectionModel::selectionChanged,[=]()
{
foreach (const QModelIndex& item, selectionModel->selectedIndexes())
{
if (item.column()!=tabla->indiceActual().column())
{
selectionModel->select(item,QItemSelectionModel::Deselect);
}
}
});
}
但是,如果我在表的构造函数中进行连接,则会抛出此错误:
QObject::connect: invalid null parameter
MiTabla::MiTabla()
{
miSelectionModel = selectionModel();
QObject::connect(this,SIGNAL(pressed(QModelIndex)),this,SLOT(CambiarIndiceACtual(QModelIndex)));
QObject::connect(miSelectionModel,&QItemSelectionModel::selectionChanged,[=]()
{
foreach (const QModelIndex& item, miSelectionModel->selectedIndexes())
{
if (item.column()!=m_indiceActual.column())
{
miSelectionModel->select(item,QItemSelectionModel::Deselect);
}
}
});
}
我的问题是为什么表的构造函数内部的连接不起作用