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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: widget, совмещающий свойства QSplitter и QToolBox  (Прочитано 7371 раз)
TaIRou
Гость
« : Август 01, 2011, 22:20 »

То есть (если я не ошибся в названиях классов в топике) мне необходим такой виджет-контейнер, в котором бы надобие тулбокса было бы реализовано скрытие и показ виджета по нажатию какого-то "заголовка-кнопки", но в тоже время имелась бы возможность лицезреть несколько виджетов из контейнера одновременно и менять их размер.

Поясню на картинках:
Вот так это выглядит в проводнике WinXp, правда размеры содержимого не меняются, но идея общая соответсвует.

А вот чего я навоял, стащив кой-чего с исходников Qt Creator'a
Вот так выглядит приложение с развернутыми вкладками:


Вот так с частично свернутыми:



Ну и на исходе дня я подумал, может я ерундой занимаюсь и есть готовое решение?
Записан
Рома
Гость
« Ответ #1 : Август 01, 2011, 22:46 »

А тебе обязательно нужно, чтобы это был отдельный виджет, или подойдет вариант, когда при нажатии на QPushButton группа виджетов становилась невидимой?
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #2 : Август 01, 2011, 22:49 »

А что должно произойти если вы и «Служебная таблица зависимостей» свернёте?
Записан
TaIRou
Гость
« Ответ #3 : Август 01, 2011, 23:00 »

А что должно произойти если вы и «Служебная таблица зависимостей» свернёте?

Секретс... ммм))
Экой вы прозорливый))
Сейчас вот ничего хорошего не произойдет, ибо я как раз на этом месте и остановился.
Предполагается, что заголовки должны смещаться вверх (соответственно внизу пустота).
Примерно так:

Я уж было решил унаследоваться от QSplitter и вперед, но, мож зря ребят?
С меня и наследователь некудышный...
Если все же буду наследоваться от QSplitter, скорее всего буду предусматривать режим постоянного наличия хотя бы одного раскрытого виджета. Пока такие туманные мысли =/
Записан
TaIRou
Гость
« Ответ #4 : Август 01, 2011, 23:04 »

А тебе обязательно нужно, чтобы это был отдельный виджет, или подойдет вариант, когда при нажатии на QPushButton группа виджетов становилась невидимой?

Да, хотелось бы общее решение, желательно готовый класс
Записан
Рома
Гость
« Ответ #5 : Август 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()
{

}
При нажатии на кнопку все виджеты становятся невидимыми
Записан
Racheengel
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2679


Я работал с дискетам 5.25 :(


Просмотр профиля
« Ответ #6 : Август 02, 2011, 02:15 »

http://sintegrial.com/qsint/pages/en/index.php

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

What is the 11 in the C++11? It’s the number of feet they glued to C++ trying to obtain a better octopus.

COVID не волк, в лес не уйдёт
TaIRou
Гость
« Ответ #7 : Август 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, а мне приходится сидеть на ранней версии. Но это хрень, переживем)
Еще раз, спасибо, за полезный набор виджетов.
« Последнее редактирование: Август 02, 2011, 13:48 от TaIRou » Записан
TaIRou
Гость
« Ответ #8 : Август 03, 2011, 17:56 »

Весьма полезным оказалось класть QSplitter на QScrollArea и вызывать метод void QScrollArea::setWidgetResizable ( bool resizable ). QSplitter начинает себя вести гораздо адекватнее.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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