crossplatform.ru

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

RazrFalcon
  опции профиля:
сообщение 11.11.2011, 19:09
Сообщение #1


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Нужно передать: 2-а QStringList, QString, QList<bool>, и возможно что-то еще.
Как лучше это сделать? Передавать кучу аргументов как то тупо.
Правильно ли будет, создать свой собственный маленький класс, который будет сначала заполнятся, потом пересылаться, а затем считываться?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
2 страниц V   1 2 >  
Начать новую тему
Ответов (1 - 11)
silver47
  опции профиля:
сообщение 11.11.2011, 19:59
Сообщение #2


Активный участник
***

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

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




Репутация:   6  


Гм. Возможно, класс слишком громоздко.... тут за глаза струтуры хватит, хотя не знаю подоплеку передачи данных в Qt, возможно, будет даже экономнее передвать впрямую строки. Я бы по старинке -структуру или указатель на нее бы передал, дешево и сердито.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.11.2011, 20:39
Сообщение #3


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Дык разницы то между структурой с классом фактически нет, уж лучше класс.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 11.11.2011, 20:42
Сообщение #4


Активный участник
***

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

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




Репутация:   3  


Цитата
Дык разницы то между структурой с классом фактически нет, уж лучше класс.

Угу, только передавать лучше через указатель.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 11.11.2011, 23:07
Сообщение #5


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


То есть передавать только указатель, а не весь класс?

Имеено:
void someFunc(MyClass *myClass);
или хватит и:
void someFunc(const MyClass &myClass);
? А то я в этом путаюсь <_<
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 12.11.2011, 10:55
Сообщение #6


Активный участник
***

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

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




Репутация:   3  


Цитата(RazrFalcon @ 12.11.2011, 2:07) *
То есть передавать только указатель, а не весь класс?

Имеено:
void someFunc(MyClass *myClass);
или хватит и:
void someFunc(const MyClass &myClass);
? А то я в этом путаюсь <_<


В первом случае через указатель, во втором по ссылке. Хватит и ссылки, и даже без "const".
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 12.11.2011, 14:03
Сообщение #7


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Как я понимаю, ссылка лучше, так как если через указатель передавать, то нужно потом еще delete вызывать. Да?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 12.11.2011, 15:37
Сообщение #8


Активный участник
***

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

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




Репутация:   3  


Цитата
если через указатель передавать, то нужно потом еще delete вызывать. Да?

Нет. Если вызвать delete то уничтожиться объект на который будет указывать указатель, т.е. ваш класс. А зачем вам его удалять? Сам же указатель, как переменная, уничтожиться при выходе из функции.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 12.11.2011, 15:51
Сообщение #9


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Ну так он нужен чтобы передать инфу, после передачи он больше не нужен. Просто будет еще морока с удалением. А так, как я понял, ссылка даст то же результат.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ilyabvt
  опции профиля:
сообщение 12.11.2011, 16:10
Сообщение #10


Активный участник
***

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

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




Репутация:   3  


Цитата
А так, как я понял, ссылка даст то же результат.

В целом, да. Различаться будет только вызов функции.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
RazrFalcon
  опции профиля:
сообщение 12.11.2011, 16:25
Сообщение #11


Zombie Mod
*****

Группа: Участник
Сообщений: 1654
Регистрация: 24.5.2010
Из: Харьков
Пользователь №: 1752

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




Репутация:   212  


Все ясно, спасибо.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
ssoft
  опции профиля:
сообщение 14.11.2011, 7:48
Сообщение #12


Участник
**

Группа: Участник
Сообщений: 130
Регистрация: 17.2.2010
Из: Москва
Пользователь №: 1470

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




Репутация:   3  


Если хочется передавать собственную структуру, то, однозначно, лучше.
Особенно, если планируется это использовать в сигнал-слот взаимодействии.

    void someFunc (const MyClass &myClass);


Связать signal(const MyClass &myClass) можно с slot(const MyClass &myClass) или с slot(MyClass myClass) любым способом,
а вот signal(MyClass &myClass) только с slot(MyClass &myClass) и, по моему, только Qt::DirectConnection.

Если передавать через "голый" указатель, то необходимо следить за корректным удалением данных.
Если хочется все-таки использовать указатель, тогда уж "умный", например, QSharedPointer.
Передача структуры через "умный" указатель м.б. полезна при многопоточном программировании.

Цитата
В первом случае через указатель, во втором по ссылке. Хватит и ссылки, и даже без "const".


Ссылка без "const", если данные не изменяются внутри вызываемого метода, мягко сказать не культурно или небрежно.
Нужно также учесть, что в Qt обращение к не константным методам контейнеров, и всем классам Qt, использующим внутри QSharedData, могут быть связаны с полным копированием внутренних данных.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 18.6.2025, 13:20