crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Помощь новичку, не могу понять где связывается в программе QWidget с QApplication
narik1985
  опции профиля:
сообщение 15.4.2009, 0:00
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 9
Регистрация: 14.4.2009
Пользователь №: 681

Спасибо сказали: 0 раз(а)




Репутация:   0  


есть следующий код:

#include <QApplication>
#include <QHBoxLayout>
#include <QSlider>
#include <QSpinBox>

int main(int argc, char *argvp[])
{
QApplication app(argc,argv);
QWidget *window = new QWidget;
window->setWindowTitle("enter your age");
QSpinBox *spinBox = new QSpinBox;
QSlider    *slider = new QSlider(Qt::Horizontal);
spinBox->setRange(0,130);
slider->setRange(0,130);
QObject::connect(spinBox, SIGNAL(valueChanged(int)), slider, SLOT(setValue(int)));
QObject::connect(slider, SIGNAL(valueChanged(int)), spinBox, SLOT(setValue(int)));
spinBox->setValue(35);
QHBoxLayout *layout = new QHBoxLayout;
layout->addWidget(spinBox);
layout->addWidget(slider);
window->setLayout(layout);
window->show();
return app.exec();
}



Теперь вопрос: "Не могу понять в каком месте происходит связывание window с app, если будет несколько объектов QApplication, как программа разрулит ситуацию, к каком именно объектом свяжется виджет, и как связывать их с конкретными объектами?"
Причина редактирования: используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 15.4.2009, 1:04
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9656
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(narik1985 @ 15.4.2009, 4:00) *
Не могу понять в каком месте происходит связывание window с app
явного связывания нет, этот класс создает цикл событий всего приложения.

Цитата(narik1985 @ 15.4.2009, 4:00) *
если будет несколько объектов QApplication,
если ты внимательно прочитаешь документацию по этому классу, то узнаешь что объект QApplication/QCoreApplication должен быть в программе в единственном экземпляре.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 15.4.2009, 8:34
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Когда ты создаешь экземпляр объекта QApplication, то он инициализирует 2 статических указателя:

    static QWidgetMapper *mapper;
    static QWidgetSet *uncreatedWidgets;


typedef QHash<WId, QWidget *> QWidgetMapper;
typedef QSet<QWidget *> QWidgetSet;


Они относятся к области видимости QWidgetPrivate.

mapper - окна, которые имеют winId. Обычно это окна типа QMainWindow, QDialog. О таких окнах знает ОС и может их найти средствами API.
uncreatedWidgets - alien widgets, окна, которые Qt рисует сама без помощи ОС.

В момент создания любого окна в эти списки заносятся указатели. К этим указателям есть доступ и у QApplication и у любого другого класса на базе QWidget. В деструкторе ~QApplication идет проход по обоим спискам окон и их уничтожение.

Таким образом связывание происходит через статические члены.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 12.8.2020, 14:47