У меня есть 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
Qt mouseMoveEvent не работает с QColumnView ⇐ C++
Программы на C++. Форум разработчиков
-
Anonymous
1767672097
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()
Подробнее здесь: [url]https://stackoverflow.com/questions/79830241/qt-mousemoveevent-does-not-work-with-qcolumnview[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия