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