![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() |
0xF |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Как замутить вот такие панели на Qt(Object Type, Name and Color etc.)?
Там есть похожий контрол(QToolBox), но он показывает только одну развернутую страницу(как только открываешь одну - закрывается другая), а мне нужно шо можно было одновременно несколько открывать. Как замутить? Может есть готовое решение? Сообщение отредактировал 0xF - 17.3.2008, 14:45 |
|
|
![]() |
Litkevich Yuriy |
![]()
Сообщение
#2
|
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
помоему, QToolBox не подойдет, надо на основе дерева делать или QGroupBox
например так: виджеты в нутри QGroupBox'ов располагаются внутри каких нибудь контейнеров, эти контейнеры когда надо отображать когда не надо прятать. Сообщение отредактировал Litkevich Yuriy - 17.3.2008, 15:20 |
|
|
||
0xF |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Та вот плохо, что не подойдет... Допустим сделаю я контрол на основе контейнеров и груп боксов... можно ли это потом как-нить встроить в QtDesigner? А то меня как-то не греет перспектива конструировать все это в коде...
![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
есть два рианта:
1 создать модуль для дизайнера, на основе твоего класса (Creating Custom Widgets for Qt Designer) 2 установить в дизайнере использование иного класса (Using Custom Widgets with Qt Designer) |
|
|
0xF |
![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Ага, спс
![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#6
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
не знаю, может у них самописаный
|
|
|
0xF |
![]()
Сообщение
#7
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А где-нить в сети можно скачать виджеты для Qt? Может уже есть что-то подобное...
|
|
|
trdm |
![]()
Сообщение
#8
|
Дмитрий Трошин ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 575 Регистрация: 12.1.2008 Пользователь №: 68 Спасибо сказали: 21 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#9
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
http://www.qt-apps.org/
http://www.qt-prop.org на них такого нет есть еще такие http://labs.trolltech.com http://www.qtcentre.org/ на фордже ищи |
|
|
0xF |
![]()
Сообщение
#10
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Вот, кое-что нашел, индус накодил
![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#11
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
да очень похоже на твой скриншот, одна беда портировать прийдется под Qt4 или разобратся как работает и сделать свой
Сообщение отредактировал Litkevich Yuriy - 17.3.2008, 20:20 |
|
|
0xF |
![]()
Сообщение
#12
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Решил сделать по-своему. В QVBoxLayout толкаю парами QPushButton и QGroupBox. Разворачивается и сворачивается(просто по нажатию на кнопку прячу соответсвующий QGroupBox). Вышел косяк: при соврачивании какой-то одной группы, остальные автоматом растягиваются для занятия всей площади QVBoxLayout:
До: После(открытые группы растянулись): Ещё бы можно было как-то пережить, если бы не вот такая фигня при отсутствии открытых групп: Нашел у QVboxLayout метод addSpacing, при закрытии группы добавляю отступ равный высоте QGroupBox, при открытии вычитаю... но тут тоже косяк, если много раз открыть-закрыть какую-то группу, то отсуп накапливается и выходит вот такая фигня(красным обозначен накопленный левый отсутп): Может забить на QVBoxLayout? Но тогда надо будет каждый раз вручную тасовать все QGroupBox & QPushButton... Any ideas? ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#13
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
ну ясен перец на то он и Layout, попробуя задавать sizePolicy для QGroupBox как fixed (по вертикали), после того как на толкаешь в них (QGroupBox) нужных виджетов и толко потом прятать/показывать.
Снизу добавь, спэйсер, когда будут исчезать QGroupBox'ы он будет всю систему подпирать с низу как пружинка --- на заметку: тот факт, что у тебя отступ накапливается, говорит о том, что спейсеров у тебя все больше и больше ![]() Сообщение отредактировал Litkevich Yuriy - 17.3.2008, 22:12 |
|
|
0xF |
![]()
Сообщение
#14
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Блин, ну и гемор с этим лейаутом...
Ладно, пока забил на корректировку размеров... может и на лейаут забью: сам буду тасовать ![]() Фигня какая-то с размерами... надо бы подкорректировать размеры моего виджета под размеры предка. Пример:
Даже после foldOut->resize ничо не изменилось... width = 100, height = 30 ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#15
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
попробую угадать с закрытыми глазами:
foldOut в Layout'е лежит у Layout'а способность регулировать толко от этого и завит что он меняет размер виджета, а иначеб он несмог работать |
|
|
Litkevich Yuriy |
![]()
Сообщение
#16
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
QFoldout это твой класс, от QWidget?
тогда тебе надо сделать рекомендуху для Layout'а в своем классе:
Сообщение отредактировал Litkevich Yuriy - 17.3.2008, 22:46 |
|
|
0xF |
![]()
Сообщение
#17
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Да, QFoldout - мой класс от QWidget, QVBoxLayout я пока убрал и кидаю кнопки прям в него(QFoldout):
И вот такой конструктор:
В итоге никакие ресайзы не помагают: размер 100х30... Вобще ресайз не работает... ни для моего QFoldout, ни для ихнего QDockWidget ![]() Сообщение отредактировал 0xF - 17.3.2008, 22:54 |
|
|
0xF |
![]()
Сообщение
#18
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
О, после добавки QFoldout::sizeHint можно хотя бы вручную ресайзить...
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#19
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
пример от Макса Шлее:
main.cpp: CODE #include <QtGui> #include "CustomWidget.h" // ---------------------------------------------------------------------- int main(int argc, char** argv) { QApplication app(argc, argv); QWidget wgt; CustomWidget* pcw = new CustomWidget; QScrollBar* phsb = new QScrollBar(Qt::Horizontal); phsb->setRange(0, 100); QObject::connect(phsb, SIGNAL(valueChanged(int)), pcw, SLOT(slotSetProgress(int)) ); //Layout setup QVBoxLayout* pvbxLayout = new QVBoxLayout; pvbxLayout->addWidget(pcw); pvbxLayout->addWidget(phsb); wgt.setLayout(pvbxLayout); wgt.show(); return app.exec(); } CustomWidget.h: CODE #ifndef _CustomWidget_h_ #define _CustomWidget_h_ #include <QFrame> // ====================================================================== class CustomWidget : public QFrame { Q_OBJECT protected: int m_nProgress; virtual void paintEvent(QPaintEvent*); public: CustomWidget(QWidget* pwgt = 0); virtual QSize sizeHint() const; signals: void progressChanged(int); public slots: void slotSetProgress(int n); }; #endif //_CustomWidget_h_ CustomWidget.cpp: CODE #include <QtGui> #include "CustomWidget.h" // ---------------------------------------------------------------------- CustomWidget::CustomWidget(QWidget* pwgt/*= 0*/) : QFrame(pwgt) , m_nProgress(0) { setLineWidth(3); setFrameStyle(Box | Sunken); setSizePolicy(QSizePolicy::Minimum, QSizePolicy::Fixed); } // ---------------------------------------------------------------------- /*virtual*/ void CustomWidget::paintEvent(QPaintEvent*) { QPainter painter(this); QLinearGradient gradient(0, 0, width(), height()); float f = m_nProgress / 100.0f; gradient.setColorAt(0, Qt::black); gradient.setColorAt(f, Qt::green); painter.fillRect(rect(), Qt::black); painter.setBrush(gradient); painter.drawRect(0, 0, (int)(width() * f), height()); painter.setPen(QPen(Qt::green)); QString str = QString().setNum(m_nProgress) + "%"; painter.drawText(rect(), Qt::AlignCenter, str); drawFrame(&painter); } // ---------------------------------------------------------------------- void CustomWidget::slotSetProgress(int n) { m_nProgress = n > 100 ? 100 : n < 0 ? 0 : n; repaint(); emit progressChanged(m_nProgress); } // ---------------------------------------------------------------------- /*virtual*/ QSize CustomWidget::sizeHint() const { return QSize(200, 30); } он жестко задал размер Сообщение отредактировал Litkevich Yuriy - 17.3.2008, 23:03 |
|
|
0xF |
![]()
Сообщение
#20
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
.
Сообщение отредактировал 0xF - 18.3.2008, 0:29 |
|
|
0xF |
![]()
Сообщение
#21
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Так, новая запарка возникла
![]() Вот код, добавляющий страницу в мой контрол:
И ф-ция Layout для расстановки страниц в нужном порядке:
Прошелся дебагером по коду: сразу же после вставки страницы вызывается ф-ция Layout(см. код), но метод isVisible почему-то возвращает false, хотя я вызвал в коде вставки страницы button->setVisible( true ) и group->setVisible( true ) Почему isVisible возвращает false? О_о |
|
|
0xF |
![]()
Сообщение
#22
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Думал, может у меня в коде какая-нить ошибка, написал:
WTF?!! ![]() ![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#23
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
а кнопку видно?
|
|
|
0xF |
![]()
Сообщение
#24
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Так, решил проблему переопределением QWidget::showEvent: вставил туда ф-цию QFoldout::Layout
|
|
|
0xF |
![]()
Сообщение
#25
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Цитата а кнопку видно? Нет, она не появлялась... т.е. просто пустой виджет без кнопок и групп |
|
|
Litkevich Yuriy |
![]()
Сообщение
#26
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
обычно даже и не надо делать setVisible, уже видно должно быть, он случаем задом неперет не работает?
![]() |
|
|
0xF |
![]()
Сообщение
#27
|
Студент ![]() Группа: Участник Сообщений: 71 Регистрация: 12.11.2007 Пользователь №: 20 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
А хз. Не думаю
![]() |
|
|
Litkevich Yuriy |
![]()
Сообщение
#28
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
запросто, т.к. родитель - контейнер.
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 28.5.2025, 6:30 |