将lambda函数用于SIGNAL / SLOT连接时发生错误

时间:2019-05-28 08:26:15

标签: c++ qt

我正在尝试给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);
            }
        }
    });
}

我的问题是为什么表的构造函数内部的连接不起作用

0 个答案:

没有答案