首页 > 解决方案 > 将 lambda 函数用于 SIGNAL/SLOT 连接时出错

问题描述

我试图给 QtableView 一个特定的行为。如果我选择一个单元格并用鼠标拖动它,则只会选择同一列中的单元格。

为此,并搜索类似的问题,我已经尝试使用 lambda 函数。

它可以在表(自定义表)的构造函数中正常工作,如下所示:

主窗口.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);
            }
        }
    });
}

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

标签: c++qt

解决方案


推荐阅读