![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
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> |
|
|
![]() |
Litkevich Yuriy |
![]()
Сообщение
#2
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
Amadey, используй тэг code при оформлении сообщений содержащих фрагменты исходных кодов
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 4.4.2025, 16:16 |