2016-01-19 9 views
0

Мне нужно подключить некоторые простые функции фильтра, щелкнув мышью на элементе заголовка QTreeView. Достаточно просто, я реализовал функцию слота, который подключается к:Ошибка отслеживания мыши QHeaderView

QTreeView::header()->sectionClicked(int)

После установки

QTreeView::header()->setSectionsClickable(true)

, sectionClicked излучается в любое время, когда я нажимаю на заголовке, который подсвечивается парение по умолчанию эффект, создаваемый любым кликабельным заголовком.

Проблема заключается в том, что зависание над некоторыми областями в кликабельных заголовках не будет распознано. Следовательно, в этих частях нет подсветки, и я не получаю никаких триггеров sectionClicked. Я проследил его еще дальше и получил свой собственный класс от QHeaderView и поставил некоторый вывод в mouseMoveEvent.

class MyHeaderView : public QHeaderView 
{ 
    Q_OBJECT 
public: 
    MyHeaderView(QWidget* parent = 0) 
     : QHeaderView(Qt::Horizontal, parent) 
    { 
     setMouseTracking(true); 
    } 
protected: 
    virtual void mouseMoveEvent(QMouseEvent* event) 
    { 
     qDebug() << event->pos(); 
    } 
}; 

При выходе всех QTreeView настройки, как они были, я установил экземпляр этого класса, чтобы быть заголовком через

QTreeView::setHeader(QHeaderView*)

я мог видеть, что во всех областях были парения эффект потерпела неудачу , Я не получил вывод отладки, который вы можете увидеть в переопределенном mouseMoveEvent.

В результате я предполагаю, что отслеживание мыши работает неправильно.

Общее применение, над которым я работаю, очень тихий, поэтому я создал отдельный пример, для всего этого. К моему удивлению, все работает так, как ожидалось. Я не знаю, как я должен это делать. Может ли кто-нибудь подумать о причинах, по которым отслеживание мыши не удается выполнить в некоторых частях виджета? Может быть, проблема с частотой кадров связана с отсутствием производительности? Существуют ли настройки на виджетах, которые влияют на общую область отслеживания мыши? Могут ли родительские виджеты влиять на отслеживание мыши?

ответ

0

В моем приложении у меня есть класс контроллера, который обрабатывает много логики приложений, подключенных к различным сигналам, которые генерирует древовидное представление. Этот класс не является suppost для визуализации любой визуализации. Следовательно, это был бы самый разумный выбор из QObject. Через некоторое время я заметил, что он был фактически получен из QWidget. Будучи QWidget, я предполагаю, что он пытается отобразить какое-то визуальное представление, которое накладывает на дерево. Вот почему я не получаю никаких событий мыши в некоторых частях заголовка.

После изменения базового класса моего контроллера на QObject все снова работает отлично.

 Смежные вопросы

  • Нет связанных вопросов^_^