Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include "secondScreen.hpp"
- SecondScreen::SecondScreen(QStackedWidget* swgt, SecondScreen* pointer) :QScrollArea(pointer) {
- flag = true;
- /**
- * Install the fixed size for scroll widget of second screen
- */
- this->setFixedSize(QApplication::desktop()->availableGeometry(swgt).width(), QApplication::desktop()->availableGeometry(swgt).height());
- this->setHorizontalScrollBarPolicy(ScrollBarAlwaysOff);
- QPalette plt;
- plt.setColor(this->backgroundRole(), gray);
- this->setPalette(plt);
- this->setFrameStyle(NoFrame);
- this->setContentsMargins(0, 0, 0, 0);
- this->setAutoFillBackground(true);
- this->verticalScrollBar()->setStyleSheet("QScrollBar:vertical {"
- " border: none;"
- " background-color: blue;"
- " width: 20px;"
- " margin: 0px 0px 0px 0px;"
- "}"
- "QScrollBar::handle {"
- " background: #000000;"
- " border-radius: 6px;"
- " origin: padding;"
- " margin: 0px 3px 0px 3px;"
- "}"
- "QScrollBar::add-line:vertical {"
- " height: 0px;"
- "}"
- "QScrollBar::sub-line:vertical {"
- " height: 0px;"
- "}");
- /**
- * Install the fixed size for scroll widget of second screen
- */
- QWidget* wgt = new QWidget;
- /**
- * Create the needing objects for second screen
- */
- WidgetOfSecondScreen* widgetOfSecondScreen = new WidgetOfSecondScreen(this);
- WidgetOfSecondScreen* widgetOfSecondScreen2 = new WidgetOfSecondScreen(this);
- WidgetOfSecondScreen* widgetOfSecondScreen3 = new WidgetOfSecondScreen(this);
- WidgetOfSecondScreen* widgetOfSecondScreen4 = new WidgetOfSecondScreen(this);
- WidgetOfSecondScreen* widgetOfSecondScreen5 = new WidgetOfSecondScreen(this);
- WidgetOfSecondScreen* widgetOfSecondScreen6 = new WidgetOfSecondScreen(this);
- WidgetOfSecondScreen* widgetOfSecondScreen7 = new WidgetOfSecondScreen(this);
- WidgetOfSecondScreen* widgetOfSecondScreen8 = new WidgetOfSecondScreen(this);
- WidgetOfSecondScreen* widgetOfSecondScreen9 = new WidgetOfSecondScreen(this);
- /**
- * Create the layout of second screen
- */
- QVBoxLayout* pvbox = new QVBoxLayout;
- pvbox->setContentsMargins(0, 0, 0, 0);
- pvbox->setSpacing(0);
- pvbox->addWidget(widgetOfSecondScreen);
- pvbox->addWidget(widgetOfSecondScreen2);
- pvbox->addWidget(widgetOfSecondScreen3);
- pvbox->addWidget(widgetOfSecondScreen4);
- pvbox->addWidget(widgetOfSecondScreen5);
- pvbox->addWidget(widgetOfSecondScreen6);
- pvbox->addWidget(widgetOfSecondScreen7);
- pvbox->addWidget(widgetOfSecondScreen8);
- pvbox->addWidget(widgetOfSecondScreen9);
- pvbox->setAlignment(AlignTop);
- /**
- * Install the created layout to main widget of second screen
- */
- wgt->setLayout(pvbox);
- /**
- * Install the main widget of second screen to scroll widget of second screen
- */
- this->setWidget(wgt);
- this->viewport()->setAttribute(WA_AcceptTouchEvents);
- /*
- * Create the effect for scrollbar
- */
- QGraphicsOpacityEffect* opacityEffect = new QGraphicsOpacityEffect;
- this->verticalScrollBar()->setGraphicsEffect(opacityEffect);
- /**
- * Create the machine of states
- */
- pmch = new QStateMachine;
- /**
- * Create the 2 states of scrollbar
- */
- QState* pstateOff = new QState(pmch);
- pstateOff->assignProperty(opacityEffect, "opacity", 0.0);
- pmch->setInitialState(pstateOff);
- QState* pstateOn = new QState(pmch);
- pstateOn->assignProperty(opacityEffect, "opacity", 1.0);
- /**
- * Create the signal transition between 2 states
- */
- QSignalTransition* psignal1 = pstateOff->addTransition(this, SIGNAL(scrolling()), pstateOn);
- QSignalTransition* psignal2 = pstateOn->addTransition(this, SIGNAL(stopScrolling()), pstateOff);
- /**
- * Add animation to transition
- */
- QPropertyAnimation* panim1 = new QPropertyAnimation(opacityEffect, "opacity");
- panim1->setDuration(1000);
- panim1->setEasingCurve(QEasingCurve::InSine);
- psignal1->addAnimation(panim1);
- QPropertyAnimation* panim2 = new QPropertyAnimation(opacityEffect, "opacity");
- panim2->setDuration(1000);
- panim2->setEasingCurve(QEasingCurve::InSine);
- psignal2->addAnimation(panim2);
- /**
- * Launch the state machine
- */
- pmch->start();
- }
- /**
- * Create the handler of touch events
- */
- bool SecondScreen::viewportEvent(QEvent* event) {
- if (event->type() == QEvent::TouchBegin || event->type() == QEvent::TouchUpdate || event->type() == QEvent::TouchEnd) {
- if(flag) {
- emit scrolling();
- flag = false;
- }
- listOfTouches << static_cast<QTouchEvent*>(event)->touchPoints().first();
- if (listOfTouches.count() == 2) {
- this->verticalScrollBar()->setValue(this->verticalScrollBar()->value() + int(listOfTouches[0].pos().y()-listOfTouches[1].pos().y()));
- listOfTouches.clear();
- }
- if (event->type() == QEvent::TouchEnd && listOfTouches.count() != 0) {
- listOfTouches.clear();
- emit stopScrolling();
- flag = true;
- }
- if (event->type() == QEvent::TouchEnd && listOfTouches.count() == 0) {
- emit stopScrolling();
- flag = true;
- }
- }
- return true;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement