Russian Qt Forum
Апрель 26, 2024, 23:46 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: [решено]Развернуть виджет, вложенный в лейаут  (Прочитано 2012 раз)
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« : Август 21, 2015, 14:11 »

Всем доброго времени.

Что-то не могу понять как зделать такое:

1. Есть виджет-родитель - A
2. В нем есть грид-лейаут - GL
3. В этот грид-лейаут втиснуто 4 виджета (2х2) - B1-B4.

Задача:

При двойном клике по любому из деток (B1-B4) нужно развернуть этого детку на весь родительский виджет A так, чтобы
дитё перекрывало собой всех..  А по следующему двойному щелчку - возвращалось на место.

Что-то не выходит у меня каменный цветок (имею ввиду распахивание и спахивание виджета).. Улыбающийся
« Последнее редактирование: Август 21, 2015, 15:06 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
ksk-
Самовар
**
Offline Offline

Сообщений: 178



Просмотр профиля
« Ответ #1 : Август 21, 2015, 14:31 »

Почему бы просто не скрывать/показывать перекрываемые виджеты?
Записан
kuzulis
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2812


Просмотр профиля
« Ответ #2 : Август 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();
}
 
« Последнее редактирование: Август 21, 2015, 15:08 от kuzulis » Записан

ArchLinux x86_64 / Win10 64 bit
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.074 секунд. Запросов: 22.