Slot函数没有被treeView的currentChanged信号调用

问题描述 投票:0回答:1

如果树视图中的索引发生更改,我想调用函数

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:无效的空参数

c++ qt
1个回答
0
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.