Russian Qt Forum

Qt => Общие вопросы => Тема начата: kuzulis от Август 21, 2015, 14:11



Название: [решено]Развернуть виджет, вложенный в лейаут
Отправлено: 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();
}