заставить Qlayout не изменять размер с родительским - PullRequest
0 голосов
/ 14 марта 2020

рассмотрите следующий код -

class CollapsibleGroupBox : public QWidget
{
public:
    CollapsibleGroupBox(QWidget *parent = nullptr): QWidget(parent)
   {
    auto chk = new QCheckBox(this);
    chk->move(0, 0);
    chk->resize(width(), 12);
    setContentsMargins(0, chk->height(), 0, 0);
    QPropertyAnimation *a = new QPropertyAnimation(this, "size");
    a->setDuration(1000); 

    connect(chk, &QCheckBox::toggled, [this, chk, a](bool c) {
        static int s = height();
        if (auto l = layout()) {
            if (c) {
                s = height();
                a->setEndValue(QSize(width(), chk->height()));
                a->start();
                //setMaximumHeight(chk->height() * 2);
            } else {
                qDebug() << s;
                a->setEndValue(QSize(width(), s));
                a->start();
                // setMaximumHeight(s);
            }
        }
    });
}

    bool isChecked() const;
    void setChecked(bool checked);

private:
    bool m_checked;
};

теперь, когда анимация запускается, компоновка также уменьшается или увеличивается вместе с виджетом, я не хочу показывать только ту часть макета, которая может быть подогнана в текущий размер виджета, виджет сокращения также не выглядит хорошо, я пытался изменить политику размера, но не могу найти ничего, Может кто-нибудь, пожалуйста, помогите.

1 Ответ

0 голосов
/ 14 марта 2020

сделано с отключением макета ( QLayout :: setEnabled ) при запуске анимации и последующим включением его обратно в конце анимации

PS: если у кого-то есть лучшее решение, пожалуйста, напишите.

...