Russian Qt Forum
Ноябрь 24, 2024, 11:55 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Голосование
Вопрос: Всегда ли вы используете QString для строк? (примеры в сообщении)
Всегда - 17 (73.9%)
Не всегда - 6 (26.1%)
Всего голосов: 6

Страниц: 1 [2]   Вниз
  Печать  
Автор Тема: Всегда ли вы используете QString?  (Прочитано 7792 раз)
andrew.k
Гость
« Ответ #15 : Октябрь 31, 2011, 02:25 »

В qt3 name был как раз батареем, если мне не изменяет память, но в 4 стал уже QString.
objectName() используется частенько в qt-проектах. Поэтому совершенно логично его было проапргейдить до QString.

У QPushButton я не нашел что-то UserData.

Код
C++ (Qt)
{
 QList<QPushButton *> list = this->findChild<QPushButton *>( QRegExp( "PushButton" ) );
 foreach ( QPushButton * pb, list )
    connect( pb, SIGNAL( clicked() ), SLOT( someSlot() ) );
}
 
someSlot()
{
 // проверить sender()!
 input += sender()->objectName().right(1);
}
 
 
Что может быть элегантнее?

С кучей однотипных элементов иногда удобнее работать по имени, чем где-то еще данные для них хранить.
« Последнее редактирование: Октябрь 31, 2011, 02:28 от andrew.k » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #16 : Октябрь 31, 2011, 02:39 »

andrew.k
В qt3 не было нормального батарея; обжект нейм там был тупо char*, с к-оторым ничего действительно сделать нельзя. В 4ке же было повальное увлечение делать все подряд QString'ом не думая.
Обжект нейм _не_предназначен_ для того, чтобы хранить данные. Обжект нейм _не_предназначен_ для перевода на другие языки. Следовательно QString здесь излишен.

Элегантнее может быть только код, который сторонний человек может понять, а не гадать, какого хрена вы выцепляете из имени объекта последний символ, и чем этот символ так значим. Метод через проперти ему удовлетворяет. Еще _специально_ для таких вещей есть сигнал мапппер.
А в 1й функции вам еще придется следить за тем, чтобы _другие_ кнопки не подпадали под регэксп. Удачной отладки через годик.
Ну и напоследок - метод sender()
Цитировать
Warning: This function violates the object-oriented principle of modularity.
Записан
andrew.k
Гость
« Ответ #17 : Октябрь 31, 2011, 03:11 »

В неэлегантности убедил.
По сабжу не убедил.

Ну и напоследок - метод sender()
Цитировать
Warning: This function violates the object-oriented principle of modularity.
Порадовал)
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #18 : Октябрь 31, 2011, 10:28 »

Экономим на спичках?
Задач в которых эти спички измеряются порядками не так уж мало. Напр при разборе текстовика хотя бы метров 10 разница уже будет видна невооруженным глазом.

по идее, он должен быть быстрее, чем std::vector, т.к. использует механизм copy-on-write.
std::string использует copy-on-write. QString использует implicit sharing. Это не одно и то же.

Да и вообще, сырые указатели - это не модно и не безопасно.
Конечно QString безумно удобен, но за это приходится платить. Мое мнение: если человек не умеет работать с char * значит он не знает языка, сколько бы чужих классов он не выучил  Улыбающийся
Записан
Sancho_s_rancho
Гость
« Ответ #19 : Октябрь 31, 2011, 11:25 »


по идее, он должен быть быстрее, чем std::vector, т.к. использует механизм copy-on-write.
std::string использует copy-on-write. QString использует implicit sharing. Это не одно и то же.
Разработчики Qt с вами не согласны: "QString uses implicit sharing (copy-on-write) to reduce memory usage and to avoid the needless copying of data... " copy-on-write является более общим определением, вот и все.
Записан
andrew.k
Гость
« Ответ #20 : Октябрь 31, 2011, 17:05 »


Да и вообще, сырые указатели - это не модно и не безопасно.
Конечно QString безумно удобен, но за это приходится платить. Мое мнение: если человек не умеет работать с char * значит он не знает языка, сколько бы чужих классов он не выучил  Улыбающийся
Это почти то же самое, что говорить, что тот, кто никогда не ездил на автомате, не умеет водить машину.
Записан
Страниц: 1 [2]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.099 секунд. Запросов: 25.