Название: qpropertyanimation with splitter Отправлено: Dmitry от Сентябрь 03, 2016, 22:50 Здравствуйте.
Есть форма. На ней два фиджета (левый и правый), разделенных сплиттером. И кнопочка, по которой правый виджет должен прятаться или раскрываться. Также ширину правого виджета можно менать сплиттером. Раскрываться виджет должен до заданной ширины, но он раскрывается до той ширины, которая была при скрытии. Привожу код 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); } Что я делаю не так ? |