Russian Qt Forum
Ноябрь 24, 2024, 15:43 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: qpropertyanimation with splitter  (Прочитано 1333 раз)
Dmitry
Гость
« : Сентябрь 03, 2016, 22:50 »

Здравствуйте.
Есть форма. На ней два фиджета (левый и правый), разделенных сплиттером. И кнопочка, по которой правый виджет должен прятаться или раскрываться. Также ширину правого виджета можно менать сплиттером.
Раскрываться виджет должен до заданной ширины, но он раскрывается до той ширины, которая была при скрытии.

Привожу код

MyWidget.h
Код:

#ifndef QT_MYWIDGET_H
#define QT_MYWIDGET_H

#include <QtWidgets/QMainWindow>
#include <QPropertyAnimation>
#include <QtWidgets/QTextEdit>
#include <QtWidgets/QHBoxLayout>
#include <QtWidgets/QVBoxLayout>
#include <QtWidgets/QPushButton>
#include <QtWidgets/QSplitter>

class MyWidget : public QWidget
{

Q_OBJECT

QTextEdit       *m_textEditor1;
QTextEdit       *m_textEditor2;
QPushButton     *m_pushButton;
QHBoxLayout     *m_layout;
QVBoxLayout     *m_buttonLayout;
QSplitter *splitter;

int              m_deltaX;
bool             m_isClosed;


public:

MyWidget(QWidget * parent = 0);
~MyWidget(){}

void resizeEvent(QResizeEvent * event);

private slots:
void closeOrOpenTextEdit2(bool isClosing);

};

#endif //QT_MYWIDGET_H

MyWidget.cpp
Цитировать

#include <QPushButton>
#include <QtWidgets/QSplitter>
#include "MyWidget.h"

MyWidget::MyWidget(QWidget * parent) :QWidget(parent), m_deltaX(0)
{
   m_pushButton = new QPushButton(this);
   m_pushButton->setText(">");
   m_pushButton->setCheckable(true);
   m_pushButton->setFixedSize(16, 16);
   connect(m_pushButton, SIGNAL(clicked(bool)), this, SLOT(closeOrOpenTextEdit2(bool)));

   m_textEditor1 = new QTextEdit(this);
   m_textEditor1->setText("AAAAA AAAAAAAAAAA AAAAAAAAAAA  AAAAAAA AAAAAAAAAAA AAAAAAAAAAA  AA");
   m_textEditor1->setMinimumWidth(150);

   m_textEditor2 = new QTextEdit(this);

   m_buttonLayout = new QVBoxLayout();
   m_buttonLayout->addWidget(m_pushButton);
   m_buttonLayout->addItem(new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding));

   splitter = new QSplitter();
   splitter->setObjectName(QStringLiteral("splitter"));
   splitter->setOrientation(Qt::Horizontal);
   splitter->addWidget(m_textEditor1);
   splitter->addWidget(m_textEditor2);

   m_layout = new QHBoxLayout;
   m_layout->addLayout(m_buttonLayout);
   m_layout->setSpacing(10);
   m_layout->addWidget(splitter);
   
   setLayout(m_layout);
   
   resize(800, 500);
}

void MyWidget::closeOrOpenTextEdit2(bool isClosing)
{
     m_isClosed = isClosing;
     QPropertyAnimation *animation1 = new QPropertyAnimation(m_textEditor2, "maximumWidth");
    if (isClosing) //close the second textEdit
   {
       QRect rect = m_textEditor2->geometry();
       QList<int> sz = splitter->sizes();
       m_textEditor2->setMaximumWidth(500);

       int textEdit2_start = m_textEditor2->width();// m_textEditor2->maximumWidth();

       m_deltaX = textEdit2_start;
      int textEdit2_end = 3;

       animation1->setDuration(500);
       animation1->setStartValue(textEdit2_start);
       animation1->setEndValue(textEdit2_end);

       m_pushButton->setText("<");
   }
   else //open
   {
      int textEdit2_start = m_textEditor2->maximumWidth();
      int textEdit2_end = 600;// m_deltaX;

      animation1->setDuration(500);
      animation1->setStartValue(textEdit2_start);
      animation1->setEndValue(textEdit2_end);

      m_pushButton->setText(">");
   }

   animation1->start();   
}


void MyWidget::resizeEvent(QResizeEvent * event)
{
   if (!m_isClosed)
      m_textEditor2->setMaximumWidth(QWIDGETSIZE_MAX);
}

Что я делаю не так ?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.056 секунд. Запросов: 21.