У меня есть 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