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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Qt 4.5.0-rc1 и QToolBar - не показывается без show().  (Прочитано 4919 раз)
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« : Февраль 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() тулбар не показывается. Глюк или фича?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Февраль 10, 2009, 19:35 »

1) От чего наследован QMyClass?
2) Покажи методе getToolBar()
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #2 : Февраль 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);
}
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
SABROG
Гость
« Ответ #3 : Февраль 10, 2009, 20:52 »

Вообще если делается show() главному окну, то у всех дочерних виджетов должен вызываться show() автоматически, если стоит флаг setVisible(). В main.cpp show() вызывается? Возможно что и косяк, в консоль ругательств нет?
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #4 : Февраль 10, 2009, 22:47 »

Вобще какой-то странный подход ты выбрал. Улыбающийся Мож пересмотришь логику работы с tool bar?

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

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

Код
C++ (Qt)
qtbarToolBar=new QToolBar(tr("References"),NULL);
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Февраль 11, 2009, 07:29 »

Логику вроде правильная, в будущем QMyClass закину в плагин. Пока QMyClass создаю и закидываю на QTabWidget, его меню добавляю в меню, а тулбар на тулбар главного окна. Самое интересное, что раньше все было нормально и проблем не возникало... Тулбар устанавливается, если потом кликнуть в окне (вызвать меню тулбаров), то мой там светится, но чекбокс у него снят.
Код
C++ (Qt)
qtbarToolBar=new QToolBar(tr("References"),NULL);
Попробую, может и поможет.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Dendy
Гость
« Ответ #6 : Февраль 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();
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #7 : Февраль 12, 2009, 17:48 »

Тут интересно то, что сам виджет показывается нормально, а вот созданный в этом же классе тулбар создается, но не отображается. Ну и фиг с ним, мне не жалко show() вызвать. Улыбающийся
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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