Russian Qt Forum

Qt => Общие вопросы => Тема начата: кып от Июль 28, 2009, 18:46



Название: Почему полями класса являются указатели, а не объекты
Отправлено: кып от Июль 28, 2009, 18:46
Почему во всех виденных мной примерах полями класса являются указатели на виджеты,
Код:
class Dialog : public QDialog
{
    Q_OBJECT
private:
    QLineEdit *lineEdits;
};
а не сами объекты виджетов?
Код:
class Dialog : public QDialog
{
    Q_OBJECT
private:
    QLineEdit *lineEdits;
};
Я, пока, особой разницы не вижу.


Название: Re: Почему полями класса являются указатели, а не объекты
Отправлено: Rcus от Июль 28, 2009, 19:12
Я тоже не вижу разницы в приведенных фрагментах :)
Есть несколько причин:
  виджеты без parent'а это окна, так что все равно придется передавать указатель на родительский виджет;
  при использовании layout'ов происходит передача прав владения объектом;
  инстанцировать виджеты в списке инициализации неудобно: обычно есть необходимость в некоторых действиях до и после создания объекта;
  уменьшение зависимостей, и, как побочное следствие слабой связности ускорение компиляции;
  полиморфная природа наследников QObject (указатель на QLineEdit вполне может указывать и на KLineEdit :D)


Название: Re: Почему полями класса являются указатели, а не объекты
Отправлено: кып от Июль 29, 2009, 10:30
Спасибо.  Я примерно так все и предполагал, но думал что есть еще какая-то причина.
Не понял насчет ускорения компиляции, но это ладно, мне пока наверное рановато об этом заморачиваться.
А вот это
Цитировать
виджеты без parent'а это окна, так что все равно придется передавать указатель на родительский виджет;
при использовании layout'ов происходит передача прав владения объектом;
мне не совсем ясно. Если я положу объект в layout разве передачи прав не произойдет?


Название: Re: Почему полями класса являются указатели, а не объекты
Отправлено: Авварон от Июль 29, 2009, 10:49
Конечно произойдет. И для того, чтобы было очевидно, что что-то с объектом делается и передается указатель а не ссылка (а по значению его передавать вообще бессмысленно, тк получишь копию - а копия виджета есть бред)


Название: Re: Почему полями класса являются указатели, а не объекты
Отправлено: кып от Июль 29, 2009, 11:01
Ну и я про это же.
Наверное я не ясно выразился. Но я имел ввиду что шаг "придется передавать указатель на родительский виджет;" не нужен в данном случае.