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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как сделать виджет невидимым  (Прочитано 14388 раз)
registrationfedser87
Гость
« : Сентябрь 02, 2008, 09:57 »

Нужно сделать виджет невидим (т.е. скрыть). Но при использовании метода hide() возникает проблема: я использую layots чтобы виджет располагались по поверхности родителя-когда я делаю виджет невидимым у родитель начинает думать что виджета нет и перестраивает расположение дочерних виджетов.(метод setEnabled(false) не предлагать)
Записан
Karl-Philipp
Гость
« Ответ #1 : Сентябрь 02, 2008, 10:09 »

А что, если использовать QStackedLayout?
Записан
ритт
Гость
« Ответ #2 : Сентябрь 02, 2008, 10:21 »

банально
сейчас у тебя примерно так:
Код:
QWidget* w = new QWidget(this);

QVBoxLayout* layout = new QVBoxLayout(this);
layout->addWidget(w);
//layout->addWidget(w2);
//layout->addWidget(w3);

//...

w->hide();

сделай так:
Код:
QWidget* w = new QWidget(this);

QWidget* placeholder = new QWidget(this);
QVBoxLayout* ph_layout = new QVBoxLayout(placeholder);
ph_layout->setContentsMargins(0, 0, 0, 0);
ph_layout->setSpasing(0);
ph_layout->addWidget(w);

QVBoxLayout* layout = new QVBoxLayout(this);
layout->addLayout(ph_layout);
//layout->addWidget(w2);
//layout->addWidget(w3);

//...

w->hide();
Записан
registrationfedser87
Гость
« Ответ #3 : Сентябрь 03, 2008, 06:49 »

спасибо,предложенный способ с вложенным layout помог.
Записан
Kalombo
Гость
« Ответ #4 : Октябрь 13, 2008, 08:57 »

Что-то не могу разобраться, можно поподробней? Или напишите как для такого примера реализовать, пожалуйста:
Код:
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
QGridLayout *layout = new QGridLayout;
for (int i=0; i <4 ;++i)
     for (int j=0; j<4 ;++j)
         {
                 QPushButton *btn = new QPushButton("Button");
                 layout->addWidget(btn,i,j);
         }
setLayout(layout);
}
Чтобы после выполнения btn->hide(), Остальные кнопки не изменяли свое положение.
Записан
ритт
Гость
« Ответ #5 : Октябрь 13, 2008, 09:14 »

Код:
MyWidget::MyWidget(QWidget *parent) : QWidget(parent)
{
QGridLayout *layout = new QGridLayout;
for (int i=0; i <4 ;++i)
     for (int j=0; j<4 ;++j)
         {
                 QVBoxLayout *btn_layout = new QVBoxLayout;
                 QPushButton *btn = new QPushButton("Button");
                 btn_layout->addWidget(btn);

                 layout->addLayout(btn_layout,i,j);
         }
setLayout(layout);
}
Записан
Kalombo
Гость
« Ответ #6 : Октябрь 13, 2008, 11:22 »

Попробовал - не получилось, вот весь код:
Код:
layouts::layouts(QWidget *parent, Qt::WFlags flags)
: QWidget(parent, flags)
{
QGridLayout *layout = new QGridLayout;
for (int i=0; i <4 ;++i)
for (int j=0; j<4 ;++j)
         {
                 QVBoxLayout *btn_layout = new QVBoxLayout;
                 QPushButton *btn = new QPushButton("Button");
btn->setSizePolicy(QSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding));
                 btn_layout->addWidget(btn);
connect(btn,SIGNAL(clicked()),this,SLOT(btnHide()));
                 layout->addLayout(btn_layout,i,j);
         }
setLayout(layout);
resize(300,300);
}
void layouts::btnHide()
{
QPushButton *btn = qobject_cast<QPushButton*> (sender());
btn->hide();
}
layouts::~layouts()
{

}
Вроде всё также, но после прятанья части кнопок, другие кнопки начинают занимать свободное место.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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