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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Дочений виджет не виден?  (Прочитано 6118 раз)
limetree
Гость
« : Март 07, 2006, 09:27 »

Всех представительниц прекрасной половины форума с наступающим 8-м марта!
Вопрос следующий, простите чайника, растолкуйте
Создаю дочерний виджет (QWidget), а он не видимый :-(


Код:
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget  w1; // родительский виджет
    QWidget * w2 = new QWidget(&w1); //дочерний виджет - невиден
    QPushButton * b = new QPushButton("A button", &w1); //кнопка видна

    w1.setPaletteBackgroundColor(Qt::blue);    
    w2->setPaletteBackgroundColor(Qt::red);
    w1.resize(640, 480);
    w2->resize(300,300);
    w2->move(50,50);

    a.setMainWidget(&w1);
    w1.show();

    return a.exec();
}


Почему? Дочерний  PushButton видимый, а дочерний QWidget - посмотрел у М. Шлее, должен быть видимым.
У меня QT 4.1.0, VS 2005
Записан
Hordi
Гость
« Ответ #1 : Март 07, 2006, 10:52 »

Проверил на 3.3.5 - все работает.
Записан
limetree
Гость
« Ответ #2 : Март 07, 2006, 12:19 »

2 Hordi
Т.е чего, два прямоугольника cиний и красный?
"Особенность" Qt 4.1? Не может быть!
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #3 : Март 07, 2006, 13:25 »

аналогичные проблемы и у меня! толко с GroupBox
Записан
limetree
Гость
« Ответ #4 : Март 07, 2006, 13:50 »

Ладно, тогда "звереем" и делаем нечто что-то типа
Код:

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QWidget  w1;
    QFrame *f = new QFrame(&w1);
    QPushButton * b = new QPushButton("A button", f);
    QWidget * w2 = new QWidget(f);

    w1.setPaletteBackgroundColor(Qt::blue);    
    w2->setPaletteBackgroundColor(Qt::red);
    w2->setVisible(true);
    w1.resize(640, 480);
    w2->resize(50,100);
    w2->move(50,50);
    f->setFrameStyle(QFrame::Panel | QFrame::Raised);
    f->move(50,50);
    a.setMainWidget(&w1);
    w1.show();

    return a.exec();
}

Т.е. фрэйм виден, а дочерний от него виджет - все равно нет.
Даже делаем его насильно видимым и все равно.
При чем следует отметить, что на Qt 2.3...( что то там) с MinGW, которая шла с книгой Шлее такого "эффекта" не было.
Это что "фича" Qt 4.1? Или у меня что-то с головой?

2 Admin Как победил?
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #5 : Март 07, 2006, 14:16 »

Очень просто! ЗАБИЛ!

Отключил все layout! у тому времени как программу сделаю, глюк поправят!
Записан
limetree
Гость
« Ответ #6 : Март 07, 2006, 14:21 »

2 Admin
Ладно, я тоже "забью". Т.е. это глюк  Грустный
Записан
Admin
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1988



Просмотр профиля
« Ответ #7 : Март 07, 2006, 17:18 »

я думаю да! по крайней мере то что я вижу в preview в дизайнере должно с кодом совпадать!
Записан
Dendy
Гость
« Ответ #8 : Март 07, 2006, 19:15 »

Ребята, енто не есть глюк. Просто в Qt 4.1 в отличии от Qt 4.0 и предьІдущих версий появился флаг QWidget::autoFillBackground, которьІй по умолчанию снят, чтобьІ фон окна для самописньІх виджетов не бьІл виден. Поставьте флаг и увидите свой чудньІй красньІй фон.

:-D
Записан
limetree
Гость
« Ответ #9 : Март 10, 2006, 16:17 »

2 Dendy
Мдя... и точно, получается. Короче асистант рулит. Видимо тема закрыта...
Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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