Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: Пантер от Февраль 10, 2009, 19:14



Название: Qt 4.5.0-rc1 и QToolBar - не показывается без show().
Отправлено: Пантер от Февраль 10, 2009, 19:14
Есть главное окно (MainWindow), есть класс (MyClass). Делал раньше так:
Код
C++ (Qt)
MainWindow::createClass()
{
   MyClass=new QMyClass(this);
   this->addToolBar(MyClass->getToolBar());//getToolBar() передает указатель на уже созданный в MyClass QToolBar
}
Раньше все нормально показывалось и работало. Сегодня попробовал на Qt 4.5.0-rc1 и обломался, без MyClass->getToolBar()->show() тулбар не показывается. Глюк или фича?


Название: Re: Qt 4.5.0-rc1 и QToolBar - не показывается без show().
Отправлено: pastor от Февраль 10, 2009, 19:35
1) От чего наследован QMyClass?
2) Покажи методе getToolBar()


Название: Re: Qt 4.5.0-rc1 и QToolBar - не показывается без show().
Отправлено: Пантер от Февраль 10, 2009, 19:40
1. QWidget
2. :)
Код
C++ (Qt)
QMyClass::getToolBar() {return qtbarToolBar;}

Код
C++ (Qt)
QMyClass::createToolBar()
{
   qtbarToolBar=new QToolBar(tr("References"),this);
   qtbarToolBar->addAction(actionAddReference);
}


Название: Re: Qt 4.5.0-rc1 и QToolBar - не показывается без show().
Отправлено: SABROG от Февраль 10, 2009, 20:52
Вообще если делается show() главному окну, то у всех дочерних виджетов должен вызываться show() автоматически, если стоит флаг setVisible(). В main.cpp show() вызывается? Возможно что и косяк, в консоль ругательств нет?


Название: Re: Qt 4.5.0-rc1 и QToolBar - не показывается без show().
Отправлено: pastor от Февраль 10, 2009, 22:47
Вобще какой-то странный подход ты выбрал. :) Мож пересмотришь логику работы с tool bar?

qtbarToolBar это child QMyClass. Ты экземпляру QMyClass гдето делаешь show()?

Как вариант попробуй так:

Код
C++ (Qt)
qtbarToolBar=new QToolBar(tr("References"),NULL);


Название: Re: Qt 4.5.0-rc1 и QToolBar - не показывается без show().
Отправлено: Пантер от Февраль 11, 2009, 07:29
Логику вроде правильная, в будущем QMyClass закину в плагин. Пока QMyClass создаю и закидываю на QTabWidget, его меню добавляю в меню, а тулбар на тулбар главного окна. Самое интересное, что раньше все было нормально и проблем не возникало... Тулбар устанавливается, если потом кликнуть в окне (вызвать меню тулбаров), то мой там светится, но чекбокс у него снят.
Код
C++ (Qt)
qtbarToolBar=new QToolBar(tr("References"),NULL);
Попробую, может и поможет.


Название: Re: Qt 4.5.0-rc1 и QToolBar - не показывается без show().
Отправлено: Dendy от Февраль 12, 2009, 09:34
Насколько я помню логика такая:

Вариант 1. Дочерние окна появляются скрытыми, чтобы избежать мелькания, так как родительское окно видимо. Им нужно явно вызывать show(), например как после троеточия:

Код
C++ (Qt)
QWidget * widget = new QWidget;
widget->show();
QWidget * firstChildWidget = new QWidget( widget );
QWidget * secondChildWidget = new QWidget( widget );
...
widget->setUpdatesEnabled( false );
firstChildWidget->show();
secondChildWidget->show();
widget->setUpdatesEnabled( true );

Вариант 2. Дочерние окна появляются видимыми, так как родительсткое окно скрыто. Дополнительных телодвижений не требуется:

Код
C++ (Qt)
QWidget * widget = new QWidget;
QWidget * firstChildWidget = new QWidget( widget );
QWidget * secondChildWidget = new QWidget( widget );
widget->show();


Название: Re: Qt 4.5.0-rc1 и QToolBar - не показывается без show().
Отправлено: Пантер от Февраль 12, 2009, 17:48
Тут интересно то, что сам виджет показывается нормально, а вот созданный в этом же классе тулбар создается, но не отображается. Ну и фиг с ним, мне не жалко show() вызвать. :)