crossplatform.ru

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


  Ответ в Помощь новичку
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
SABROG Дата 15.4.2009, 8: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 идет проход по обоим спискам окон и их уничтожение.

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

Цитата(narik1985 @ 15.4.2009, 4:00) *
если будет несколько объектов QApplication,
если ты внимательно прочитаешь документацию по этому классу, то узнаешь что объект QApplication/QCoreApplication должен быть в программе в единственном экземпляре.
narik1985 Дата 15.4.2009, 0:00
  есть следующий код:

#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, как программа разрулит ситуацию, к каком именно объектом свяжется виджет, и как связывать их с конкретными объектами?"
Просмотр темы полностью (откроется в новом окне)
RSS Текстовая версия Сейчас: 19.4.2024, 4:13