Russian Qt Forum
Ноябрь 24, 2024, 05:40
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Вопросы новичков
>
Когда нужно объявлять свойства со звездочкой (*), а когда без
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Когда нужно объявлять свойства со звездочкой (*), а когда без (Прочитано 7377 раз)
ZicoRio
Гость
Когда нужно объявлять свойства со звездочкой (*), а когда без
«
:
Январь 14, 2012, 13:04 »
Всем добрый день.
Начал изучать Qt.
Решил смастерить для пробы браузер. С сигналами и слотами разобрался.
Но не пойму когда нужно объявлять свойства со звездочкой (*), а когда без?
К примеру:
QStringList var1;
QStringList *var1;
Пишу: QObject::connect(req,SIGNAL(daSend(int,QString*,QStringList*,QStringList*)),this,SLOT(preView(int,QString*,QStringList*,QStringList*)));
Слот объявлен: void preView(int tat,QString *A2,QStringList *B2,QStringList *C2);
При компиляции говорит, что B2 не соответствует типу QStringList *
Записан
andrew.k
Гость
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #1 :
Январь 14, 2012, 13:33 »
уж сколько раз твердили миру, что изучение qt нужно начинать с изучения c++, а не наоборот.
qt-шные классы принято передавать по константной ссылке.
что-то не так делаешь, раз даже не компилится.
Записан
ZicoRio
Гость
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #2 :
Январь 14, 2012, 13:43 »
Полностью с вами согласен.
Купил книжулю - уже читаю.
Но прошу не ругать меня а конкретно ответить на мой вопрос (если можно односложно).
Когда нужно объявлять свойства со звездочкой (*), а когда без?
К примеру:
QString var1="tratata";
или
QString *var1=new QString("tratata");
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #3 :
Январь 14, 2012, 14:16 »
кратко: звёздочка означает указатель. переменные, объявленные без звёздочки, автоматически уничтожаются при выходе из области видимости (почитаешь в книжке что это такое и как её определять), а объявленные со звёздочкой надо уничтожать самому оператором delete (если конечно ты выделял под них память оператором new).
указатели - одно из самых основных понятий в С и С++, с ними надо разобраться очень хорошо.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
ZicoRio
Гость
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #4 :
Январь 14, 2012, 14:23 »
Спасибо за человеческий ответ, но в том-то и дело, что для Qt это не совсем так.
В книжке про Qt (Шлее) сказано, что вроде как все нужно объявлять динамически (как я понял это тождественно - со звездочкой). Что Qt сам позаботиться о памяти в этом случае...
Поэтому и возник у меня такой на первый взгляд простой вопрос применительно к Qt!
Хотелось бы услышать комментарий гуру по Qt...
Записан
kambala
Джедай : наставник для всех
Offline
Сообщений: 4747
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #5 :
Январь 14, 2012, 14:28 »
если при создании какого-либо Qt-объекта (наследника QObject) ты указываешь ему родителя (в конструкторе всегда есть параметр parent), тогда да, руками удалять память не нужно. так обычно делают с виджетами. но всякие строки, массивы и т.п. обычно объявляют без звёздочки.
Записан
Изучением C++ вымощена дорога в Qt.
UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
ZicoRio
Гость
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #6 :
Январь 14, 2012, 14:42 »
ага, тогда такой вопрос:
почему при компиляции (изначально я создавал QStringList без звезды)
при передаче в сигнале QStringList выдается сообщение, что нету в нем свойства .size() - которое я далее использую?
Записан
lit-uriy
Джедай : наставник для всех
Offline
Сообщений: 3880
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #7 :
Январь 14, 2012, 14:48 »
ZicoRio забудь про слово "свойство", в Си++ нет такого понятия. Есть переменные.
Записан
Юра.
mutineer
Гость
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #8 :
Январь 14, 2012, 15:45 »
Цитата: ZicoRio от Январь 14, 2012, 14:23
Спасибо за человеческий ответ, но в том-то и дело, что для Qt это не совсем так.
Выучи сначала плюсы хотя бы на базовом уровне. А то потом будет каша в голове и непонимание происходящего. Qt позаботится об удалении только если у созданного класса будет родитель. Ну и если самого верхнего родителя в цепочке кто-нить удалит
Записан
Igors
Джедай : наставник для всех
Offline
Сообщений: 11445
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #9 :
Январь 14, 2012, 16:28 »
Полезно потренироваться с ** (двумя звездочками), тогда "просто *" станет ясной. Напр на такой задачке
- дан массив целых чисел, удалить повторяющиеся элементы не меняя порядка следования оставшихся. Массив большой, "просто перебор" нельзя. Контейнеров ++/Qt нет, есть только ф-ция qsort (stdlib.h)
Записан
ZicoRio
Гость
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #10 :
Январь 14, 2012, 17:01 »
По поводу [Выучи сначала] - уже учу.
Чтобы потренироваться с ** (двумя звездочками) надо знать что это такое.
А я только начал читать С++.
Но логика-то у задачки понятна.
Понятно, что я сейчас голопом по европам скачу.
Просто очень нужно было сделать подключалку к нескольким DB.
Пришлось сделать (работает), а потом разбираться в тонкостях (разные там потоки наладить).
«
Последнее редактирование: Январь 14, 2012, 17:03 от ZicoRio
»
Записан
mutineer
Гость
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #11 :
Январь 14, 2012, 17:25 »
Писать на плюсах без знания об указателях очень сложно и опасно
Записан
andrew.k
Гость
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #12 :
Январь 14, 2012, 22:57 »
если ты себе не враг и хочешь добиться четких знаний, отложи qt на пару месяцев хотя бы и плотно займись с++.
поделай задачки такого плана как игорс сказал.
а то потом будешь как
чечино
на этом форуме "пишу как хочу черти что, лишь бы работало".
а сейчас ответы на твои вопросы - это медвежья услуга.
«
Последнее редактирование: Январь 14, 2012, 23:00 от andrew.k
»
Записан
ZicoRio
Гость
Re: Когда нужно объявлять свойства со звездочкой (*), а когда без
«
Ответ #13 :
Январь 15, 2012, 11:12 »
Учу-учу уже (стараюсь взять себя в руки и не бежать).
Вообще немного непривычно после веб технологий (много лет) - о какой-то памяти надо думать
)
переменные только одного типа и т.д...
Хочу сделать гибрид этих технологий - потому как у каждой свои плюсы.
Ну раз уж разговор пошел - вот еще вопрос:
решил вживить статически драйвер MySql в Qt (лучше бы не делал).
Все сделал по оф.доке но перекомпиляция Qt завершилась с ошибкой (памяти на что-то не хватило).
И после этого WebKit в приложении начал глючить - неверно отрисовывать элементы на странице и ловить ошибки там где их нет (Ajax).
Может ли это быть связано и что делать теперь (переустановка Qt не помогает)?
«
Последнее редактирование: Январь 15, 2012, 11:27 от ZicoRio
»
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...