Название: [решено]Развернуть виджет, вложенный в лейаут
Отправлено: kuzulis от Август 21, 2015, 14:11
Всем доброго времени.
Что-то не могу понять как зделать такое:
1. Есть виджет-родитель - A 2. В нем есть грид-лейаут - GL 3. В этот грид-лейаут втиснуто 4 виджета (2х2) - B1-B4.
Задача:
При двойном клике по любому из деток (B1-B4) нужно развернуть этого детку на весь родительский виджет A так, чтобы дитё перекрывало собой всех.. А по следующему двойному щелчку - возвращалось на место.
Что-то не выходит у меня каменный цветок (имею ввиду распахивание и спахивание виджета).. :)
Название: Re: Развернуть виджет, вложенный в лейаут
Отправлено: ksk- от Август 21, 2015, 14:31
Почему бы просто не скрывать/показывать перекрываемые виджеты?
Название: Re: Развернуть виджет, вложенный в лейаут
Отправлено: kuzulis от Август 21, 2015, 15:06
Ой, а это работает! :) Спасибо C++ (Qt) #include <QApplication> #include <QWidget> #include <QGridLayout> class ChildWidget : public QWidget { public: explicit ChildWidget(QWidget *parent = 0) : QWidget(parent) , m_expanded(false) { setStyleSheet("background-color: red;"); } protected: void mouseDoubleClickEvent(QMouseEvent *e) { m_expanded = !m_expanded; setStyleSheet(QString(QStringLiteral("background-color: %1;")) .arg(m_expanded ? QStringLiteral("green") : QStringLiteral("red"))); QList<ChildWidget *> list = parent()->findChildren<ChildWidget *>(); foreach (ChildWidget *w, list) { if (w == this) continue; if (m_expanded) w->hide(); else w->show(); } } private: bool m_expanded; }; class ParentWidget : public QWidget { public: explicit ParentWidget(QWidget *parent = 0) : QWidget(parent) { QGridLayout *g = new QGridLayout; for (int i = 0; i < 4; ++i) g->addWidget(new ChildWidget, i / 2, i % 2); setLayout(g); } }; int main(int argc, char *argv[]) { QApplication a(argc, argv); ParentWidget w; w.show(); return a.exec(); }
|