treeView的currentChanged信号未调用Slot函数

时间:2018-06-26 17:15:36

标签: qt connect slot

如果我的treeView中的索引已更改,我想调用函数indexChanged()。 我使用了ui->treeView->currentChanged()信号,但是即使我将信号连接到了插槽,它也没有调用indexChanged()插槽。

这是我的代码:

.cpp文件

TipManager::TipManager(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::TipManager)
{
    ui->setupUi(this);

    connect(ui->treeView->selectionModel(), &QItemSelectionModel::currentChanged, this, &TipManager::indexChanged);

    ...
}

void TipManager::indexChanged(const QModelIndex &current, const QModelIndex &previous)
{
    trimCurrentPath(previous); 
}

.h文件

namespace Ui {
class TipManager;
}

class TipManager : public QWidget
{
    Q_OBJECT

public:
    explicit TipManager(QWidget *parent = 0);
    ~TipManager();

public slots:
    void indexChanged(const QModelIndex &current, const QModelIndex &previous);

private:
    Ui::TipManager *ui;  
    ...
};

我也在调试模式下进行了测试,但是甚至没有调用插槽功能indexChanged()。另外,它显示此消息: QObject :: connect:无效的空参数

1 个答案:

答案 0 :(得分:0)

我遇到了类似的问题(插槽未被触发)。按照@GM 在对您的问题的评论中的指针,如果还没有模型,则对 ui->treeView->selectionModel() 的调用返回 null(并且 setSelectionModel() 可能尚未被调用) .

如果我在 connect() 调用中调用 ui->treeView->selectionModel() 之前填充了我的 QTreeView,那么我会收到我的非空响应,并且该插槽根据需要由信号触发。