Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: korel от Ноябрь 05, 2010, 14:51



Название: Крос расположение виджетов в лейауте
Отправлено: korel от Ноябрь 05, 2010, 14:51
Мне нужно, чтобы расположение виджетов было таким: (http://C:\Users\Sshynkaruk\Desktop\garbage\controls_position.jpg).
Здесь виджеты расположены на форме без лейаута. Мне нужно чтобы они имели такое де расположение, только лежали на лейауте.
Может кто сталкивался с подобными задачами?


Название: Re: Крос расположение виджетов в лейауте
Отправлено: korel от Ноябрь 05, 2010, 14:54
картинка здесь:
http://www.uploadhouse.com/viewfile.php?id=6879512&PHPSESSID=9a5c516a7df568ebe750c5a4b05d9f47 (http://www.uploadhouse.com/viewfile.php?id=6879512&PHPSESSID=9a5c516a7df568ebe750c5a4b05d9f47)


Название: Re: Крос расположение виджетов в лейауте
Отправлено: BlackTass от Ноябрь 05, 2010, 14:59
Первое что приходит в голову это GraphicsView и AnchorLayout


Название: Re: Крос расположение виджетов в лейауте
Отправлено: Kolobok от Ноябрь 05, 2010, 15:01
Красное и черное это тоже виджеты?


Название: Re: Крос расположение виджетов в лейауте
Отправлено: korel от Ноябрь 05, 2010, 15:16
Красное и черное это тоже виджеты?

Да. Эти 4 контрола - это виджеты.


Название: Re: Крос расположение виджетов в лейауте
Отправлено: whirlwind от Ноябрь 05, 2010, 15:51
я бы попробовал свой наследник QLayout написать. Оно вроде несложно, всего несколько методов переопределить

Стандартными средствами вряд ли получится


Название: Re: Крос расположение виджетов в лейауте
Отправлено: korel от Ноябрь 05, 2010, 15:59
я бы попробовал свой наследник QLayout написать. Оно вроде несложно, всего несколько методов переопределить

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


Название: Re: Крос расположение виджетов в лейауте
Отправлено: Kolobok от Ноябрь 05, 2010, 16:19
Посмотри QStackedLayout::StackAll


Название: Re: Крос расположение виджетов в лейауте
Отправлено: korel от Ноябрь 05, 2010, 16:44
Посмотри QStackedLayout::StackAll

Если я правильно понял то QStackedLayout помещает в себе сет чаилд виджетов и дает возможность показывать только один виджет (скрывая все остальные от пользователя). Вы предлагаете просто задать геометрию, для каждого чаилда и исвользовать QStackedLayout::StackAll мод ????


Название: Re: Крос расположение виджетов в лейауте
Отправлено: korel от Ноябрь 05, 2010, 17:33
QStackedLayout работает так как он должен работать - т.е. один виджет в один момент времени.
Не вижу как его можно использовать в данном случае.... ???


Название: Re: Крос расположение виджетов в лейауте
Отправлено: Kolobok от Ноябрь 05, 2010, 22:17
QStackedLayout работает так как он должен работать - т.е. один виджет в один момент времени.
Не вижу как его можно использовать в данном случае.... ???

Примерно так

Код:
    QWidget *parentw = new QWidget();

    QWidget *child1 = new QWidget();
    QListWidget *b1 = new QListWidget();
    QListWidget *b2 = new QListWidget();

    QHBoxLayout *hl = new QHBoxLayout();
    hl->addWidget(b1);
    hl->addWidget(b2);
    child1->setLayout(hl);
    child1->show();

    QWidget *child2 = new QWidget(parentw);
    QPushButton *b3 = new QPushButton( "b3" );
    QPushButton *b4 = new QPushButton( "b4" );
    QVBoxLayout *vl = new QVBoxLayout(child2);
    vl->addWidget(b3,0,Qt::AlignHCenter);
    vl->addWidget(b4,0,Qt::AlignHCenter);
    child2->setLayout(vl);

    QStackedLayout *sl = new QStackedLayout();
    sl->addWidget(child1);
    sl->addWidget(child2);
    sl->setStackingMode(QStackedLayout::StackAll);

    parentw->setLayout(sl);
    sl->setCurrentWidget(child2);
    parentw->show();


Название: Re: Крос расположение виджетов в лейауте
Отправлено: korel от Ноябрь 08, 2010, 11:28
Спасибо большое! Это как раз то, что мне нужно.