Название: Как создать панель инструментов не на главном окне? Отправлено: babutta от Май 27, 2010, 09:28 Доброго всем времени суток! :)
Хочу создать QToolBar, но не располагать его сразу на главном окне, а что б он сразу был плавающим, свободным... таким каким он становится когда его вытаскивают из его пространства панелей где он находился на главном окне, и не вставляют в новое пространство (Qt::ToolBarAreas). Если при создании панели в качестве parent передать NULL, то его просто не видно. А если ему сказать show(), то он появляется как отдельное окно - со своим заголовком, кнопками свернуть, распахнуть, закрыть и т.п. И естественно он не хочет встраиваться в пространства панелей главного окна. А если панели в качестве parent'а передать главное окно, но не вызывать у главного окна addToolBar(), то происходят глюки отображения (панель становится какой-то полупрозрачной), которые приводят к падению программы при попытке перетащить такую панель... ...использую Qt 4.5.1 Есть какие-нибудь варианты создать панель и при создании не размещать ее на главном окне, а сделать сразу отдельно плавающей, но естественно с возможностью дальнейшего размещения ее на главном окне? =) Название: Re: Как создать панель инструментов не на главном окне? Отправлено: GreatSnake от Май 27, 2010, 09:31 void QDockWidget::setFloating ( bool floating )
Название: Re: Как создать панель инструментов не на главном окне? Отправлено: babutta от Май 27, 2010, 10:05 Не понял... бррр-р-р... =)
Будь добр, поясни... Вообще я спрашивал о том как создать панель, т.е. QToolBar, а не док виджет... Название: Re: Как создать панель инструментов не на главном окне? Отправлено: GreatSnake от Май 27, 2010, 10:41 Виноват, ляпнул не разобравшись наивно полагая, что Qt использует QDockWidget и для тулбаров тоже.
После исследования исходников, могу сказать, что используя публичный API отцепить toolbar от mainwindow не получится. Если сильно хочется, то можно использовать void QToolBarPrivate::setWindowState(bool floating, bool unplug, const QRect &rect). Но это будет скорее всего уже hack. Название: Re: Как создать панель инструментов не на главном окне? Отправлено: babutta от Май 27, 2010, 11:07 ...а как получить доступ к QToolBarPrivate?
судя по названию, экземпляр этого класса скрывается в приватной секции QToolBar... Название: Re: Как создать панель инструментов не на главном окне? Отправлено: GreatSnake от Май 27, 2010, 11:43 #include "qtoolbar_p.h"
toolBar->d_func()->setWindowState( true, true, QRect( 100, 100, 200, 40 )); Название: Re: Как создать панель инструментов не на главном окне? Отправлено: babutta от Май 27, 2010, 11:54 Код: QToolBar* pTB = new QToolBar( tr( "Панель 1" ), this ); компилятор выдает: error C2248: 'QToolBar::d_func' : cannot access private member declared in class 'QToolBar' Получается и в наследнике не добраться, т.к. это приватная тема =( Название: Re: Как создать панель инструментов не на главном окне? Отправлено: MoPDoBoPoT от Май 27, 2010, 12:28 ...а как получить доступ к QToolBarPrivate? http://www.forum.crossplatform.ru/index.php?showtopic=981&view=findpost&p=32527Название: Re: Как создать панель инструментов не на главном окне? Отправлено: GreatSnake от Май 27, 2010, 13:16 babutta
Ничего не получится, т.к. класс QToolBarPrivate не экспортится :( Мде, тролли запрятали опять от нас всё - близ локоток, а не укусишь... Название: Re: Как создать панель инструментов не на главном окне? Отправлено: babutta от Май 27, 2010, 13:35 ...а как получить доступ к QToolBarPrivate? http://www.forum.crossplatform.ru/index.php?showtopic=981&view=findpost&p=32527Благодарю, почитаю. Название: Re: Как создать панель инструментов не на главном окне? Отправлено: babutta от Май 27, 2010, 13:36 babutta Ничего не получится, т.к. класс QToolBarPrivate не экспортится :( Мде, тролли запрятали опять от нас всё - близ локоток, а не укусишь... ну может быть когда-нибудь это станет доступным =) Название: Re: Как создать панель инструментов не на главном окне? Отправлено: GreatSnake от Май 27, 2010, 13:59 На самом деле всё оказалось намного проще:
Код
Название: Re: Как создать панель инструментов не на главном окне? Отправлено: babutta от Май 27, 2010, 15:06 Попробовал...
Вот этот вариант не подходит, т.к. созданный тулбар невозможно таскать - не перетаскивается за сам тулбар, и кэпшина для таскания тоже нет... Код: pTB = new QToolBar( tr( "Панель 2" ), NULL ); а этот: Код: pTB = new QToolBar( tr( "Панель 2" ), this ); // this - это QMainWindow Название: Re: Как создать панель инструментов не на главном окне? Отправлено: GreatSnake от Май 27, 2010, 15:12 Нужно toolbar поместить на QMainWindow используя QMainWindow::addToolBar и заполнить его и уже потом отсоединять.
Название: Re: Как создать панель инструментов не на главном окне? Отправлено: babutta от Май 27, 2010, 15:18 Нужно toolbar поместить на QMainWindow используя QMainWindow::addToolBar и заполнить его и уже потом отсоединять. ага, работает! :) Благодарю! :) |