Qt mouseMoveEvent не работает с QColumnViewC++

Программы на C++. Форум разработчиков
Ответить
Anonymous
 Qt mouseMoveEvent не работает с QColumnView

Сообщение Anonymous »

У меня есть QColumnView с прикрепленной к нему QFileSystemModel, и я пытаюсь получить информацию о том, на какой файл наведен курсор в этом представлении модели.
У меня включено отслеживание мыши, однако кажется, что mouseMoveEvent сообщает что-либо только тогда, когда наводится курсор на пустой столбец.
Как ни странно, мой точно такой же код, но с заменой QColumnView на QTreeView, работает хорошо. Я не могу себе представить, что это ошибка, поскольку библиотека виджетов очень стабильна, но я не вижу ничего в документации QColumnView, QAbstractItemView, QMouseEvent или QWidget или в Интернете об этой разнице в поведении или о том, как ее исправить, учитывая, что QColumnView является относительно неиспользуемым представлением. Я также пытался переопределить весь метод QColumnView::event, но и это не помогло.
Вот минимальный воспроизводимый пример:
MainWindow.cpp
#include "mainwindow.hpp"
#include "./ui_mainwindow.h"

#include "mycolumnview.hpp"

#include

#include

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
qDebug() setupUi(this);

MyColumnView *columnView = new MyColumnView(this);
this->layout()->addWidget(columnView);
}

MainWindow::~MainWindow()
{
delete ui;
}

MainWindow.hpp
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP

#include

QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; }
QT_END_NAMESPACE

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
MainWindow(QWidget *parent = nullptr);
~MainWindow();

private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_HPP

mycolumnview.cpp
#include "mycolumnview.hpp"
#include

MyColumnView::MyColumnView(QWidget *parent) : QColumnView(parent)
{
// Enable mouse tracking to receive events even if no button is pressed
setMouseTracking(true);
setMinimumWidth(500);
setMinimumHeight(500);
model->setRootPath(QDir::homePath());
setRootIndex(model->index(QDir::homePath()));
setModel(model);
}

void MyColumnView::mouseMoveEvent(QMouseEvent *event)
{
QColumnView::mouseMoveEvent(event);

QModelIndex index = indexAt(event->pos());

if (index.isValid()) {

QString fileName = index.data(Qt::DisplayRole).toString();
QString filePath = index.data(Qt::EditRole).toString(); // EditRole often contains the full path for QFileSystemModel

qDebug()

Подробнее здесь: https://stackoverflow.com/questions/798 ... columnview
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C++»