crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

3 страниц V  < 1 2 3  
Ответить в данную темуНачать новую тему
> Разворачивающиеся панели, как в 3ds Max(скрин прилагаеццо :) )
0xF
  опции профиля:
сообщение 20.3.2008, 16:57
Сообщение #21


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 12.11.2007
Пользователь №: 20

Спасибо сказали: 0 раз(а)




Репутация:   0  


Так, новая запарка возникла :)
Вот код, добавляющий страницу в мой контрол:
void QFoldout::AddPage( const std::string& caption, QGroupBox *group )
{
    QPushButton *button = new QPushButton( caption.c_str(), this );

    connect( button, SIGNAL( clicked(bool) ), this, SLOT( OnCategoryButtonClicked(bool) ) );

    button->setCheckable( true );
    button->setChecked( true );
    button->setVisible( true );
    group->setVisible( true );
    group->setParent( this );

    categoryMap[ button ] = group;
    buttonMap[ caption ] = button;

    Layout();
}


И ф-ция Layout для расстановки страниц в нужном порядке:
void QFoldout::Layout( void )
{
    tCategoryMapIter end = categoryMap.end();

    int w = width();
    int yOffset = 0;

    const int k_ButtonHeight = 22;
    const int k_ButtonOffset = 0;

    for( tCategoryMapIter i = categoryMap.begin(); i != end; i++ ) {
        QPushButton *button = i->first;
        QGroupBox   *group    = i->second;

        button->setGeometry( k_ButtonOffset, yOffset, w - k_ButtonOffset * 2, k_ButtonHeight );
        group->setGeometry( 0, yOffset + k_ButtonHeight, w, group->height() );

        if( button->isVisible() ) yOffset += k_ButtonHeight; // ** Вот тут собственно запарка, isVisible возвращает false
        if( group->isVisible() ) yOffset += group->height(); // ** для QPushButton и для QGroupBox :(
    }

    resize( QSize( w, yOffset ) );
}


Прошелся дебагером по коду: сразу же после вставки страницы вызывается ф-ция Layout(см. код), но метод isVisible почему-то возвращает false, хотя я вызвал в коде вставки страницы button->setVisible( true ) и group->setVisible( true )

Почему isVisible возвращает false? О_о
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
0xF
  опции профиля:
сообщение 20.3.2008, 21:09
Сообщение #22


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 12.11.2007
Пользователь №: 20

Спасибо сказали: 0 раз(а)




Репутация:   0  


Думал, может у меня в коде какая-нить ошибка, написал:
QPushButton *button = new QPushButton( "Caption", this );

button->setVisible( true );
bool v = button->isVisible(); // ** Вот тут v = false

WTF?!! :wacko: Чо за фигня? :blink:
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.3.2008, 21:25
Сообщение #23


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


а кнопку видно?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
0xF
  опции профиля:
сообщение 20.3.2008, 21:25
Сообщение #24


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 12.11.2007
Пользователь №: 20

Спасибо сказали: 0 раз(а)




Репутация:   0  


Так, решил проблему переопределением QWidget::showEvent: вставил туда ф-цию QFoldout::Layout
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
0xF
  опции профиля:
сообщение 20.3.2008, 21:26
Сообщение #25


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 12.11.2007
Пользователь №: 20

Спасибо сказали: 0 раз(а)




Репутация:   0  


Цитата
а кнопку видно?

Нет, она не появлялась... т.е. просто пустой виджет без кнопок и групп
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.3.2008, 21:29
Сообщение #26


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


обычно даже и не надо делать setVisible, уже видно должно быть, он случаем задом неперет не работает? :)
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
0xF
  опции профиля:
сообщение 20.3.2008, 22:00
Сообщение #27


Студент
*

Группа: Участник
Сообщений: 71
Регистрация: 12.11.2007
Пользователь №: 20

Спасибо сказали: 0 раз(а)




Репутация:   0  


А хз. Не думаю :) Почитал щас доки, написано, что если кто-то из предков контрола не виден, то setVisible никакого эффекта не имеет... может по этому
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.3.2008, 22:58
Сообщение #28


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


запросто, т.к. родитель - контейнер.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

3 страниц V  < 1 2 3
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.3.2024, 17:33