Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: TaIRou от Август 01, 2011, 22:20



Название: widget, совмещающий свойства QSplitter и QToolBox
Отправлено: TaIRou от Август 01, 2011, 22:20
То есть (если я не ошибся в названиях классов в топике) мне необходим такой виджет-контейнер, в котором бы надобие тулбокса было бы реализовано скрытие и показ виджета по нажатию какого-то "заголовка-кнопки", но в тоже время имелась бы возможность лицезреть несколько виджетов из контейнера одновременно и менять их размер.

Поясню на картинках:
Вот так это выглядит в проводнике WinXp, правда размеры содержимого не меняются, но идея общая соответсвует.
(http://i042.radikal.ru/1108/f0/332b0d5dd5af.png)
А вот чего я навоял, стащив кой-чего с исходников Qt Creator'a
Вот так выглядит приложение с развернутыми вкладками:

(http://s41.radikal.ru/i091/1108/f4/cad819cba168.jpg)
Вот так с частично свернутыми:
(http://s005.radikal.ru/i210/1108/7c/7783274cdb02.jpg)


Ну и на исходе дня я подумал, может я ерундой занимаюсь и есть готовое решение?


Название: Re: widget, совмещающий свойства QSplitter и QToolBox
Отправлено: Рома от Август 01, 2011, 22:46
А тебе обязательно нужно, чтобы это был отдельный виджет, или подойдет вариант, когда при нажатии на QPushButton группа виджетов становилась невидимой?


Название: Re: widget, совмещающий свойства QSplitter и QToolBox
Отправлено: LisandreL от Август 01, 2011, 22:49
А что должно произойти если вы и «Служебная таблица зависимостей» свернёте?


Название: Re: widget, совмещающий свойства QSplitter и QToolBox
Отправлено: TaIRou от Август 01, 2011, 23:00
А что должно произойти если вы и «Служебная таблица зависимостей» свернёте?

Секретс... ммм))
Экой вы прозорливый))
Сейчас вот ничего хорошего не произойдет, ибо я как раз на этом месте и остановился.
Предполагается, что заголовки должны смещаться вверх (соответственно внизу пустота).
Примерно так:
(http://s56.radikal.ru/i154/1108/0e/025a3d14046c.jpg)
Я уж было решил унаследоваться от QSplitter и вперед, но, мож зря ребят?
С меня и наследователь некудышный...
Если все же буду наследоваться от QSplitter, скорее всего буду предусматривать режим постоянного наличия хотя бы одного раскрытого виджета. Пока такие туманные мысли =/


Название: Re: widget, совмещающий свойства QSplitter и QToolBox
Отправлено: TaIRou от Август 01, 2011, 23:04
А тебе обязательно нужно, чтобы это был отдельный виджет, или подойдет вариант, когда при нажатии на QPushButton группа виджетов становилась невидимой?

Да, хотелось бы общее решение, желательно готовый класс


Название: Re: widget, совмещающий свойства QSplitter и QToolBox
Отправлено: Рома от Август 01, 2011, 23:20
Вот, это конешно не совсем то, но как вариант вполне может быть
Код:
#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()
{

}
При нажатии на кнопку все виджеты становятся невидимыми


Название: Re: widget, совмещающий свойства QSplitter и QToolBox
Отправлено: Racheengel от Август 02, 2011, 02:15
http://sintegrial.com/qsint/pages/en/index.php

посмотри на виджет ActionPanel, насколько я понимаю - это примерно то, что нужно?


Название: Re: widget, совмещающий свойства QSplitter и QToolBox
Отправлено: TaIRou от Август 02, 2011, 13:32
http://sintegrial.com/qsint/pages/en/index.php

посмотри на виджет ActionPanel, насколько я понимаю - это примерно то, что нужно?

о, вещь, одназначно полезная и пригодится наверняка, спасибо.
попробовал ее на деле, есть пара косяков, но они наверно мои:
Основной касается сборки. Библиотека собирается по-умолчанию статически и к этому ее варианту нет претензий.
А когда попробовал собрать динамически (убрал опцию CONFIG += staticlib), библиотека собралась, но даже примеры с ее помощью собранные, замирают после запуска с ошибкой.

И все-таки хотелось бы что-нибудь с функционалом QSplitter'a, чтобы было возможно не только скрывать/отображать виджеты помещенные в контейнер, но и ресайзить их вручную. Плюс у QSplitter'a, есть пара функций довольно полезных:
bool restoreState ( const QByteArray & state )
QByteArray saveState () const

Да, один пример из библиотеки не собрался: метод void setMovable ( bool movable ) появился в 4.5, а мне приходится сидеть на ранней версии. Но это хрень, переживем)
Еще раз, спасибо, за полезный набор виджетов.


Название: Re: widget, совмещающий свойства QSplitter и QToolBox
Отправлено: TaIRou от Август 03, 2011, 17:56
Весьма полезным оказалось класть QSplitter на QScrollArea и вызывать метод void QScrollArea::setWidgetResizable ( bool resizable ). QSplitter начинает себя вести гораздо адекватнее.