crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> локальные объекты конструктора. ошибка
__ilya__
  опции профиля:
сообщение 9.7.2012, 9:55
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 57
Регистрация: 19.1.2012
Пользователь №: 3143

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




Репутация:   0  


читал макса шлее Qt4.5.
там в примерах все объекты, кнопки, слайдеры, надписи и Т.П. создаются в конструкторе локально. почему-то когда я создаю локальный обьект( динамически), в конструкторе при сборке выдает ошибку. может потому-что я использую Qt4.8.
[code]
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
//...
QPushButton *button = new QPushButton("button");
//...
}

D:\QtCreator_test\SoundPlaer\widget.cpp:-1: In constructor 'Widget::Widget(QWidget*)':

но все работает -если я создаю кнопки как члены класса(указатели). а уже в конструкторе динамически выделяю для них память.

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
__ilya__
  опции профиля:
сообщение 9.7.2012, 12:27
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 57
Регистрация: 19.1.2012
Пользователь №: 3143

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




Репутация:   0  


и есче вопрос-
если у меня члены класса(унаследаваного от QWidget), указатели, а в конструкторе я для них динамически выделяю память(new), нужен-ли деструктор?
везде написано что Qt сама заботится об удалении объектов.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
sidsukana
  опции профиля:
сообщение 9.7.2012, 13:26
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 158
Регистрация: 23.12.2010
Из: Челябинск
Пользователь №: 2296

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




Репутация:   2  


Qt Заботится об удалении QObject объектов, родителями которых были QObject объекты тоже.

Obj1* obj1 = new Obj1();
Obj2* obj2 = new Obj2(obj1);

delete obj1;


В данном контексте obj1 удалит за собой и obj2 (на сколько я знаю)

Еще есть метод deleteLater() он вроде как ставит в очередь на удаление.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
__ilya__
  опции профиля:
сообщение 9.7.2012, 17:23
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 57
Регистрация: 19.1.2012
Пользователь №: 3143

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




Репутация:   0  


и все-же почему не получается создать, динамически, локально в конструкторе
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 11.7.2012, 12:00
Сообщение #5


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

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


Цитата
class Widget:public QWidget
{
Q_OBJECT //не забыто ?

}


ну и

Цитата
QPushButton *button = new QPushButton("button", this);


Сообщение отредактировал Алексей1153 - 11.7.2012, 12:01
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Гость_Гость___ilya___*_*
сообщение 11.7.2012, 23:20
Сообщение #6





Гости








    


спасибо помогло! Скажите а в чем смысл создавать объекты локально, в конструкторе? Почему.бы их не сделать членами класса? Я имею в виду кнопки, индикаторы и т.п.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 12.7.2012, 8:54
Сообщение #7


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

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


ты не создаёшь тут локальных объектов.

Локальный тут только указатель button - он уничтожится по выходу из функции конструктора
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
__ilya__
  опции профиля:
сообщение 12.7.2012, 14:07
Сообщение #8


Студент
*

Группа: Участник
Сообщений: 57
Регистрация: 19.1.2012
Пользователь №: 3143

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




Репутация:   0  


Алексей1153,
Тогда получается что все действия программы происходят внутри тела конструктора?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Алексей1153
  опции профиля:
сообщение 12.7.2012, 19:19
Сообщение #9


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

Группа: Участник
Сообщений: 2939
Регистрация: 19.6.2010
Из: Обливион
Пользователь №: 1822

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




Репутация:   34  


нет, конечно

С чего ты это решил ? )
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 29.3.2024, 4:32