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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: cкрыть и показать лэйауты  (Прочитано 4168 раз)
niag
Гость
« : Август 15, 2011, 12:27 »

всем привет!

есть 2 лэйаута. в одном есть кнопка, при нажатии которой второй спрячется. при нажатии на нее эта кнопка также заменяется на другую кнопку - кнопку, при нажатии на которую лэйаут снова отображается, а кнопка снова заменяется, но ткпкрь уже на первоначальный вариант. так вот, хайдится всё нормально, а вот с отображением полные проблемы.

Код
C++ (Qt)
void theClass::hideLayout(QLayout *layout) {
   QLayoutItem *wItem;
   while ((wItem = layout->takeAt(0)) != 0) {
       if (!wItem->layout()) {
           wItem->widget()->hide();
       }
   }
}

Код
C++ (Qt)
void theClass::showLayout(QLayout *layout) {
   QLayoutItem *wItem;
   wItem = layout->takeAt(0);
   while ((wItem) != 0) {
       if (!wItem->layout()) {
           wItem->widget()->show();
       }
   }
}

причем при вызове layout->count() в функции showLayout() возвращается 0, что я нашел очень странным.
что я делаю не так?
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Август 15, 2011, 12:42 »

А не проще ли будет создать виджет, поместить на него лейаут и уже потом показывать/прятать только этот виджет?
Записан

Qt 5.11/4.8.7 (X11/Win)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Август 15, 2011, 12:43 »

Цитировать
QLayoutItem * QLayout::takeAt ( int index ) [pure virtual]
Must be implemented in subclasses to remove the layout item at index from the layout, and return the item.
Ты же удаляешь виджет из лайота.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
niag
Гость
« Ответ #3 : Август 15, 2011, 12:56 »

мда, действительно... как-то совсем глупо вышло. в любом случае, спасибо

Цитировать
создать виджет, поместить на него лейаут
чего-чего простите? первый раз о таком слышу (видимо из-за того, что нуб Веселый)
« Последнее редактирование: Август 15, 2011, 13:01 от niag » Записан
Рома
Гость
« Ответ #4 : Август 15, 2011, 22:19 »

Вот. Я несколько дней назад уже выставлял этот код, но думаю, что тебе он может очень помочь (здесь не нужно создавать две разные кнопки, и поочередно делать их невидимыми, только вместо второго лэйоута используется QgroupBox)
Код:
#include "qmywidg.h"
#include <QPushButton>
#include <QLineEdit>
#include <QTextEdit>
#include <QLCDNumber>
#include <QLayout>
#include <QGroupBox>

QMyWidg::QMyWidg(QWidget *parent)
    : QWidget(parent)
{
    QVBoxLayout *main_layout = new QVBoxLayout;
    QPushButton *btn = new QPushButton("Click");
    btn->setCheckable(true);
    main_layout->addWidget(btn);
    QVBoxLayout *second_layout = new QVBoxLayout;
    QLineEdit *le = new QLineEdit("Text");
    QLCDNumber *lcdn = new QLCDNumber;
    QTextEdit *te = new QTextEdit;
    second_layout->addWidget(le);
    second_layout->addWidget(lcdn);
    second_layout->addWidget(te);
    QGroupBox *gbox = new QGroupBox;
    gbox->setLayout(second_layout);
    main_layout->addWidget(gbox);
    setLayout(main_layout);
    connect(btn,SIGNAL(toggled(bool)),gbox,SLOT(setVisible(bool)));
}

QMyWidg::~QMyWidg()
{

}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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