![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
Amadey |
![]()
Сообщение
#1
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 1.4.2013 Пользователь №: 3773 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Доброго время суток! Очень нужна ваша помощь.
Есть "матрёшка" QDialog -> QGraphicsView -> QWidget -> QScrollArea -> (QLabel, QPushButton), собрано всё в дизайнере. Для ScrollArea сделан dragscroll с помощью фильтра событий (взято с форума developer.nokia). Dragscroll работает замечательно когда ScrollArea напрямую добавлена на Dialog, но в "матрёшке" dragscroll срабатывает только тогда когда мышка находиться на кнопке, на Label и свободной области ScrollArea не работает. Подозреваю что проблема в передаче событий через QGraphicsView, но в чём именно проблема не знаю. Изучаю Qt недавно и с событиями ещё очень плохо знаком. "матрёшка" понадобилась для поворота содержимого окна на 90 градусов. scroller - реализация dragscroll; form - QWidget Dialog - QDialog scroller.h Раскрывающийся текст #include <QObject> #include <QtGui> #include <QScrollArea> #include <QScrollBar> class Scroller : public QObject { Q_OBJECT public: explicit Scroller(QObject *parent = 0); protected: bool eventFilter(QObject *obj, QEvent *event); private: double y0; }; scroller.cpp Раскрывающийся текст #include "scroller.h" Scroller::Scroller(QObject *parent) : QObject(parent) { } bool Scroller::eventFilter(QObject *obj, QEvent *event) { if (event->type() == QEvent::MouseMove) { QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); QScrollArea *view = qobject_cast<QScrollArea *>(obj->parent()); if (view && (mouseEvent->buttons() & Qt::LeftButton)) { QScrollBar *scroll = view->verticalScrollBar(); scroll->setValue(scroll->value() - mouseEvent->y() + y0); y0 = mouseEvent->y(); } } else if (event->type() == QEvent::MouseButtonPress) { QMouseEvent *mouseEvent = static_cast<QMouseEvent *>(event); if (mouseEvent->buttons() & Qt::LeftButton) y0 = mouseEvent->y(); } return QObject::eventFilter(obj, event); } form.h Раскрывающийся текст #include <QWidget> #include "scroller.h" namespace Ui { class Form; } class Form : public QWidget { Q_OBJECT public: explicit Form(QWidget *parent = 0); ~Form(); private: Ui::Form *ui; public: Scroller *scroller; }; form.cpp Раскрывающийся текст #include "form.h" #include "ui_form.h" Form::Form(QWidget *parent) : QWidget(parent), ui(new Ui::Form) { ui->setupUi(this); scroller = new Scroller(); ui->scrollArea->viewport()->installEventFilter(scroller); } Form::~Form() { delete ui; } dialog.h Раскрывающийся текст #include <QDialog> #include <QGraphicsScene> #include "form.h" namespace Ui { class Dialog; } class Dialog : public QDialog { Q_OBJECT public: explicit Dialog(QWidget *parent = 0); ~Dialog(); private: Ui::Dialog *ui; QGraphicsScene *scene; Form *form; }; dialog.cpp Раскрывающийся текст #include "dialog.h" #include "ui_dialog.h" Dialog::Dialog(QWidget *parent) : QDialog(parent), ui(new Ui::Dialog) { ui->setupUi(this); form = new Form(); scene = new QGraphicsScene(0,0,this->width(),this->height()); scene->addWidget(form); ui->graphicsView->setScene(scene); } Dialog::~Dialog() { delete ui; } dialog.ui Раскрывающийся текст <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Dialog</class> <widget class="QDialog" name="Dialog"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>624</width> <height>356</height> </rect> </property> <property name="windowTitle"> <string>Dialog</string> </property> <property name="windowOpacity"> <double>1.000000000000000</double> </property> <layout class="QVBoxLayout" name="verticalLayout"> <property name="spacing"> <number>0</number> </property> <property name="leftMargin"> <number>0</number> </property> <property name="topMargin"> <number>0</number> </property> <property name="rightMargin"> <number>0</number> </property> <property name="bottomMargin"> <number>0</number> </property> <item> <widget class="QGraphicsView" name="graphicsView"> <property name="frameShape"> <enum>QFrame::NoFrame</enum> </property> </widget> </item> </layout> </widget> <layoutdefault spacing="6" margin="11"/> <resources/> <connections/> </ui> form.ui Раскрывающийся текст <?xml version="1.0" encoding="UTF-8"?> <ui version="4.0"> <class>Form</class> <widget class="QWidget" name="Form"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>552</width> <height>345</height> </rect> </property> <property name="windowTitle"> <string>Form</string> </property> <layout class="QVBoxLayout" name="verticalLayout"> <item> <widget class="QScrollArea" name="scrollArea"> <property name="widgetResizable"> <bool>true</bool> </property> <widget class="QWidget" name="scrollAreaWidgetContents"> <property name="geometry"> <rect> <x>0</x> <y>0</y> <width>515</width> <height>415</height> </rect> </property> <layout class="QHBoxLayout" name="horizontalLayout"> <item> <layout class="QGridLayout" name="gridLayout"> <item row="0" column="0"> <widget class="QLabel" name="label_2"> <property name="font"> <font> <pointsize>16</pointsize> </font> </property> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item row="1" column="0"> <widget class="QLabel" name="label_3"> <property name="font"> <font> <pointsize>16</pointsize> </font> </property> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item row="2" column="0"> <widget class="QLabel" name="label"> <property name="font"> <font> <pointsize>16</pointsize> </font> </property> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item row="4" column="0"> <widget class="QLabel" name="label_4"> <property name="font"> <font> <pointsize>16</pointsize> </font> </property> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item row="5" column="0"> <widget class="QLabel" name="label_6"> <property name="font"> <font> <pointsize>16</pointsize> </font> </property> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item row="6" column="0"> <widget class="QLabel" name="label_5"> <property name="font"> <font> <pointsize>16</pointsize> </font> </property> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item row="7" column="0"> <widget class="QLabel" name="label_9"> <property name="font"> <font> <pointsize>16</pointsize> </font> </property> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item row="8" column="0"> <widget class="QLabel" name="label_11"> <property name="font"> <font> <pointsize>16</pointsize> </font> </property> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item row="9" column="0"> <widget class="QLabel" name="label_10"> <property name="font"> <font> <pointsize>16</pointsize> </font> </property> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item row="10" column="0"> <widget class="QLabel" name="label_12"> <property name="font"> <font> <pointsize>16</pointsize> </font> </property> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item row="11" column="0"> <widget class="QLabel" name="label_8"> <property name="font"> <font> <pointsize>16</pointsize> </font> </property> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item row="12" column="0"> <widget class="QLabel" name="label_7"> <property name="font"> <font> <pointsize>16</pointsize> </font> </property> <property name="text"> <string>TextLabel</string> </property> </widget> </item> <item row="3" column="0"> <widget class="QPushButton" name="pushButton"> <property name="text"> <string>PushButton</string> </property> </widget> </item> </layout> </item> </layout> </widget> </widget> </item> </layout> </widget> <resources/> <connections/> </ui> |
|
|
![]() |
Trisch |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: ![]() ![]() ![]() |
Да, надо переопределить события мыши mouseMoveEvent() для QGraphicsView.
|
|
|
Amadey |
![]()
Сообщение
#3
|
Студент ![]() Группа: Новичок Сообщений: 11 Регистрация: 1.4.2013 Пользователь №: 3773 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Да, надо переопределить события мыши mouseMoveEvent() для QGraphicsView. Можно по подробнее? Что именно должно выполнять переопределённое mouseMoveEvent() для QGraphicsView? Amadey, используй тэг code при оформлении сообщений содержащих фрагменты исходных кодов Забыл поставить, каюсь, первый раз здесь пишу, в следующий раз буду внимательнее. |
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 10.4.2025, 7:13 |