Как получить событие щелчка левой кнопкой мыши в Tree View - PullRequest
0 голосов
/ 06 июня 2019

Я реализовал QTreeview с QAbstractItemModel, как я могу получать уведомления, если я щелкаю левой кнопкой мыши по элементу представления дерева. У нас есть какая-либо функция, например OnLButtonDown (), доступная для представления дерева.

WavefrontRenderer::WavefrontRenderer(TreeModel* model , QWidget *parent) : 
QMainWindow(parent)
 {
    setupUi(this);  
    treeView->setModel(model);
    treeView->setDragEnabled(true);
    treeView->setAcceptDrops(true);
    treeView->installEventFilter(this);   
    connect(pushButtonAddGroup, SIGNAL(clicked()), this, SLOT(insertRow()));
     connect(pushButtonAddChild , SIGNAL(clicked()), this, 
    SLOT(insertChild()));
    connect(pushButtonDeleteGroup , SIGNAL(clicked()), this, 
    SLOT(removeRow()));
    connect( ButtonSphere, SIGNAL(clicked()), this, SLOT(AddSphere()));
    connect(treeView , SIGNAL(clicked()), this, SLOT(message()));   
 }

Я попытался подключить древовидную структуру к щелчковому слоту, но у меня это не сработало.

Поскольку я новичок в qt, я не уверен, подключим ли мы древовидную структуру таким же образом, как мы подключаем кнопки к щелкаемым слотам.

1 Ответ

1 голос
/ 06 июня 2019

Вы всегда должны проверять свои соединения:

bool ok = connect(...);
Q_ASSERT(ok);

Если вы сделаете это, вы обнаружите, что подключение к сигналу clicked() не работает.

Если вы посмотрите на консоль ошибок, вы увидите сообщение Qt о том, что сигнал clicked() не найден в QTreeView.
Это потому, что параметры должны быть включены в макрос SIGNAL(...).

Либо поместите их туда , но только тип без имени параметра :

bool ok = connect(treeView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(message()));

или избежите этой ловушки, используя новый синтаксис подключения :

bool ok = connect(treeView, &QAbstractItemView::clicked, this, &WavefrontRenderer::message);

Это даст вам ошибку компилятора, если сигнал или слот не существует.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...