Я хочу вызвать функцию 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 ¤t, 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 ¤t, const QModelIndex &previous);
private:
Ui::TipManager *ui;
...
};
Я также тестировал в режиме отладки, но функция слота indexChanged()
даже не вызывается. Кроме того, вместо этого отображается это сообщение: QObject::connect: неверный нулевой параметр
null
, о котором сообщает сообщение об ошибке — я предполагаю, что это значение, возвращаемоеQTreeView::selectionModel()
. Кроме того, если вы просто хотите получить уведомление об изменении текущего индексаQTreeView
, вы можете изменить свой код наconnect(ui->treeView, &QTreeView::currentChanged, ...)
. - person G.M.   schedule 26.06.2018&QTreeView::currentChanged
вот такconnect(ui->treeView, &QTreeView::currentChanged, ...)
, потому что он защищен. - person Sean   schedule 26.06.2018QTreeView::currentChanged
является виртуальным защищенным элементом, вы всегда можете переопределить его. в подклассе и выполнять там необходимые действия. - person G.M.   schedule 26.06.2018connect(ui->treeView, &QTreeView::currentChanged, this, &TipManager::indexChanged);
появляется это сообщение - ошибка: 'virtual void QTreeView::currentChanged(const QModelIndex&, const QModelIndex&)' защищен - person Sean   schedule 26.06.2018QTreeView::currentChanged
не сигнал, поэтому вы не можетеconnect
к нему. Это обычная функция-членvirtual
, поэтому вам нужно определить класс, наследуемый отQTreeView
, и переопределить членcurrentChanged
, как и любой другой членvirtual
. - person G.M.   schedule 26.06.2018