Название: Qt 4.7 или 5. Отправлено: Alexu007 от Декабрь 27, 2014, 22:03 Щас чего-то многие на пятый Qt перешли - нужно оно или нет? Какие преимущества, недостатки?
Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Декабрь 27, 2014, 22:59 Преимущества - хз, больше dll.
С одной стороны там вроде opengl, qml и прочая. С другой стороны я ими не пользуюсь, просто последние проекты которые я делал были уже сделаны на пятерке. PS а так то новое в массы :D Название: Re: Qt 4.7 или 5. Отправлено: Susenin от Декабрь 28, 2014, 04:59 Баги правятся, фичи реализуются :) Чтобы не натыкаться на новые баги ждите версий 5.x.2.
Новый синтаксис signal/slot, с проверкой на стадии компиляции. Если у вас приложение на виджетах, они мало развиваются, но немного есть развитие. Мне наоборот интересно, почему люди держаться за Qt4? Понятно, что часто это требование начальства, но интересны аргументы? Слишком большое и сложное приложение, что уже нет смысла портировать на Qt5? Название: Re: Qt 4.7 или 5. Отправлено: xokc от Декабрь 28, 2014, 13:03 Много мелких бонусов, связанных с поддержкой C++ 0x. Довольно часто встречаю в help на используемые методы: "This function was introduced in Qt 5.x".
Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Декабрь 28, 2014, 13:06 Я б сравнивал как
Qt 4.* - Крестьянская лошадка, неприхотливая, маленькая, тягает плуг и ничего особо не требует. Qt 5.* - Ухоженный конь на выгул, умеет ходить боком, задом, галопом, рысью, перепрыгивать через барьеры, умеет пользоваться смартфонами, тягает плуг :) Название: Re: Qt 4.7 или 5. Отправлено: Igors от Декабрь 28, 2014, 13:54 Мне наоборот интересно, почему люди держаться за Qt4? Понятно, что часто это требование начальства, но интересны аргументы? Слишком большое и сложное приложение, что уже нет смысла портировать на Qt5? Мой случай: 4.7 еще поддерживает Carbon, а 5 уже нет. А избавиться от Carbon - не один месяц работы (этим сейчас и занимаюсь). Ну конечно если таких завязок нет - то просто "чем новее - тем лучше".Щас чего-то многие на пятый Qt перешли - нужно оно или нет? Какие преимущества, недостатки? Так вопрос вообще не стоит. Если есть возможность переходить - надо переходить. Иначе почувствуете себя отстающим, и чем дальше - тем больше.Напр возникла проблема, наверное баг в Qt. Но на старой версии трудно найти решение, мало шансов на форуме и писать репорт бесполезно - старье уже никого не интересует. Решать самому, варианты - как-то залатать/обойти, возможно потратив неск дней - перейти на новую версию где это уже пофиксили Последний выглядит как-то поприятнее :) Название: Re: Qt 4.7 или 5. Отправлено: kambala от Декабрь 28, 2014, 14:12 почему, кстати, 4.7, а не 4.8? ;)
Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Декабрь 28, 2014, 14:33 Тут, Igors, ситуация наоборот. На Qt 4.7 проще найти решение, чем на Qt 5 :D Инфы гораздо больше в интернете :)
4.7 потому, что в 4.8 первых версиях летало всё. Ну лично когда я пробовал 4.8 у меня были и вылеты в рабочих проектах и сбросы стилей и прочая. Потом конечно это всё доработали, но впечатление осталось :D Название: Re: Qt 4.7 или 5. Отправлено: kuzulis от Декабрь 28, 2014, 14:41 Код: Новый синтаксис signal/slot, с проверкой на стадии компиляции. Сомнительная вещь, да и область применения очень узкая - когда сигнатуры сигналов/слотов совпадают 1:1 и нет перекрытых сигналов/слотов. Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Декабрь 28, 2014, 16:03 Эта вещь скорее для новичков, но и в ней довольно просто ошибиться. Я так привязал сигналы к обычным методам в начале. Потом весь вымучался, выискивая где же вылетает.
А вот более простой проект, без потоков, нормально работал :D Название: Re: Qt 4.7 или 5. Отправлено: Igors от Декабрь 28, 2014, 17:40 Тут, Igors, ситуация наоборот. На Qt 4.7 проще найти решение, чем на Qt 5 :D Инфы гораздо больше в интернете :) Это "было так" - но сейчас это уже не так. И перестроиться, признать это довольно трудно. Но упорствование совершенно бесперспективно :)Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Декабрь 28, 2014, 17:52 Решения проблем для 4.7 описаны. Для пятерки все отписываются в баг трекер :D
Название: Re: Qt 4.7 или 5. Отправлено: Alexu007 от Декабрь 28, 2014, 20:13 почему, кстати, 4.7, а не 4.8? ;) У меня вот такое меню выскакивает, из этого я сделал вывод, что 4.7 и 4.8 примерно одно и то же.Ну вот к примеру недостаток: в пятёрке больше dll тащить с собой надо, чтобы самый простой exe-шник заработал. Ещё недостаток: 4.7 устанавливается простым запуском установочного файла, в пятёрке вроде вручную нада что-то колдовать... Название: Re: Qt 4.7 или 5. Отправлено: gil9red от Декабрь 28, 2014, 20:20 Ещё недостаток: 4.7 устанавливается простым запуском установочного файла, в пятёрке вроде вручную нада что-то колдовать... Впервые слышу :) С офф. сайта для винды установщик Qt5 и Qt поставит, и Qt Creator вместе с компилятором. Название: Re: Qt 4.7 или 5. Отправлено: kambala от Декабрь 28, 2014, 21:26 почему, кстати, 4.7, а не 4.8? ;) У меня вот такое меню выскакивает, из этого я сделал вывод, что 4.7 и 4.8 примерно одно и то же.Ну вот к примеру недостаток: в пятёрке больше dll тащить с собой надо, чтобы самый простой exe-шник заработал. Ещё недостаток: 4.7 устанавливается простым запуском установочного файла, в пятёрке вроде вручную нада что-то колдовать... Название: Re: Qt 4.7 или 5. Отправлено: Susenin от Декабрь 29, 2014, 02:22 Код: Новый синтаксис signal/slot, с проверкой на стадии компиляции. Сомнительная вещь, да и область применения очень узкая - когда сигнатуры сигналов/слотов совпадают 1:1 и нет перекрытых сигналов/слотов. Обойти оба случая можно, просто будет не очень красиво. Перегруженные сигналы. Код
Несовпадение сигнатур. Код
Зато преимущества нового подхода очевидны - не нужно проверять на работоспособность каждое соединение сигнал/слот в приложении. Название: Re: Qt 4.7 или 5. Отправлено: navrocky от Декабрь 29, 2014, 20:45 В пятерке пофиксили визуальный баг с квадратной дыркой в скролле под Win8, только ради этого уже можно перейти ;D
Название: Re: Qt 4.7 или 5. Отправлено: panAlexey от Декабрь 30, 2014, 23:58 Мне наоборот интересно, почему люди держаться за Qt4? Шустрее работает. Когда скорость важна, а приложению не нужны печеньки, то я и от 4.2.1 не откажусь. Меньше вес, шустрее ворочается. Хотя надо смотреть, что там требуется. Название: Re: Qt 4.7 или 5. Отправлено: navrocky от Январь 01, 2015, 14:40 Мне наоборот интересно, почему люди держаться за Qt4? Шустрее работает. Когда скорость важна, а приложению не нужны печеньки, то я и от 4.2.1 не откажусь. Меньше вес, шустрее ворочается. Хотя надо смотреть, что там требуется. Ну вот как раз с разницей в скорости можно поспорить. Если не сравнивать Quick в Qt4 и Qt5, то в остальном там мало что изменилось. Просто была проведена работа по разделению Qt4 на большее количество модулей. Во всяком случае это совсем не такая разница, как между Qt3 и Qt4. Более того, если нужна консольная утилита, например, для обработки картинок, то теперь можно не тащить за собой весь GUI с виджетами как в четверке. Я считаю что всё это держание за Qt4 ретроградством если нет реальных проблем с переходом на Qt5. Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Январь 01, 2015, 15:24 А зачем для консоли для обработки картинок тянуть с собой всё UI? Отродясь такого в Qt не видывал, тем более в 4 :D
Название: Re: Qt 4.7 или 5. Отправлено: Akon от Январь 02, 2015, 00:27 Код: Новый синтаксис signal/slot, с проверкой на стадии компиляции. Сомнительная вещь, да и область применения очень узкая - когда сигнатуры сигналов/слотов совпадают 1:1 и нет перекрытых сигналов/слотов. Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Январь 02, 2015, 01:38 Мне кажется или какой то бред написан?
Как сигнал может быть константным? Сигнал уже по определению константен, ибо он не может быть издан извне объекта и не может поменять ничего... Ну или чего то я в этой жизни не понимаю. Название: Re: Qt 4.7 или 5. Отправлено: Авварон от Январь 02, 2015, 21:19 Bepec
Во-первых, сигналы неконcтантны (зачем кидать сигнал из конст метода?) Akon Во-вторах, QObject::connect всегда принимает константный указатель на объект (так как сам connect не меняет видимое состояние объекта) Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Январь 02, 2015, 21:26 Сигнал же не изменяет состояние своего объекта , следовательно является константным.
Откуда не кинешь сигнал, он не изменит состояния объекта. Следовательно изменить какие либо данные в объекте не может. "Константный метод гарантирует, что мы не изменим состояние класса в процессе его работы." © Название: Re: Qt 4.7 или 5. Отправлено: Akon от Январь 02, 2015, 21:37 Цитировать Во-вторах, QObject::connect всегда принимает константный указатель на объект (так как сам connect не меняет видимое состояние объекта) Это как-то противоречит моей мысли?Вот пара функций из QVector: Код: T & operator[] ( int i ) Если эту логику экстраполировать на сигналы, то было бы как-то так: Код: void itemChanged(T& item); Название: Re: Qt 4.7 или 5. Отправлено: m_ax от Январь 02, 2015, 21:49 "Константный метод гарантирует, что мы не изменим состояние класса в процессе его работы." © Нет, на самом деле не гарантирует.. (и не класса, а объекта)Код
Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Январь 02, 2015, 21:52 Вы сейчас хитросмудрили, а я говорю про общий случай, а не частный.
Название: Re: Qt 4.7 или 5. Отправлено: Авварон от Январь 02, 2015, 23:40 Сигнал же не изменяет состояние своего объекта , следовательно является константным. Откуда не кинешь сигнал, он не изменит состояния объекта. Следовательно изменить какие либо данные в объекте не может. "Константный метод гарантирует, что мы не изменим состояние класса в процессе его работы." © Сигнал - это уведомление об ИЗМЕНЕНИИ видимого состояния объекта. Т.е. он ВСЕГДА зовется из не-конст ф-ии. При этом, в слоте, законнекченном на сигнал, мы можем поменять sender()'a. Я уж молчу что сигнал - это вызов QMetaObject::activate(QObject *sender...) к-ый принимает неконстантный this. Это как-то противоречит моей мысли? Вот пара функций из QVector: Код: T & operator[] ( int i ) Если эту логику экстраполировать на сигналы, то было бы как-то так: Код: void itemChanged(T& item); Простите, ШТО? const T & QVector<T>::operator[] ( int i ) const не меняет объект, какой нафиг itemChanged? Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Январь 03, 2015, 03:08 Сигнал САМ ПО СЕБЕ ничего изменить в объекте не может. Вот тупо не может.
Он не может изменить объект класса никак, никоим образом. А откуда его вызывать значения не имеет. Приведите мне пример изменение объекта класса при помощи сигнала (только сигнала) :) PS Сигнал - это уведомление об ИЗМЕНЕНИИ видимого состояния объекта. Т.е. он ВСЕГДА зовется из не-конст ф-ии. При этом, в слоте, законнекченном на сигнал, мы можем поменять sender()'a. Я уж молчу что сигнал - это вызов QMetaObject::activate(QObject *sender...) к-ый принимает неконстантный this. Сигнал это метод не изменяющий видимого состояния объекта. А кем и когда он зовётся, не имеет значения. Сигнал НЕ МОЖЕТ изменить объект, повторюсь. Он лишь извещает о чем либо с какими либо аргументами. А вот уже в слоте можно и получить объект класса и изменить, но СЛОТ это не СИГНАЛ :)Название: Re: Qt 4.7 или 5. Отправлено: Igors от Январь 03, 2015, 09:20 Сигнал САМ ПО СЕБЕ ничего изменить в объекте не может. Вот тупо не может. Это касается только тех данных что Вы сами объявили/видите. А внутренняя начинка QObject может меняться. Напр 2 нитки вызвали один слот с DirectConnection - будет выполнен сначала один, потом второй (но не оба вместе). Внутренний мутекс был захвачен/освобожден. Он не может изменить объект класса никак, никоим образом. Название: Re: Qt 4.7 или 5. Отправлено: Akon от Январь 03, 2015, 09:43 Цитировать Простите, ШТО? const T & QVector<T>::operator[] ( int i ) const не меняет объект, какой нафиг itemChanged? Вы не поняли мою мысль. Пусть в контейнере меняется элемент, контейнер кидает сигнал об изменении (itemChanged). Далее необходимо предоставить доступ к контейнеру и его объектам как полный, так и только на чтение (т.е. использовать const). Как вы будете проектировать сигналы? Название: Re: Qt 4.7 или 5. Отправлено: Авварон от Январь 03, 2015, 11:43 Сигнал это метод не изменяющий видимого состояния объекта. А кем и когда он зовётся, не имеет значения. Сигнал НЕ МОЖЕТ изменить объект, повторюсь. Он лишь извещает о чем либо с какими либо аргументами. А вот уже в слоте можно и получить объект класса и изменить, но СЛОТ это не СИГНАЛ :) Сигнал вызывает (!) слоты, приконченные к нему (при директ коннекшне). Как вы собрались из кост ф-ии вызывать неконст слоты? Название: Re: Qt 4.7 или 5. Отправлено: Akon от Январь 03, 2015, 12:35 ??
Типичный код приложения. Указатели используются для обобщения на полиморфизм. Код: class Container Имея const Coontainer* вам доступен только const QList<const Item*>& items() const; Неужели по аналогии вы не хотите доступ только к void itemChanged(const Item* item) const? C MOCом вы имея const Coontainer* можете подписаться на void itemChanged(Item* item) и изменить объект. С новыми сигналами/слотами (опирающимися на С++11) принципиально возможно такое ограничение, что вам будет доступен только void itemChanged(const Item* item) const, т.е. константность не теряется: по конст. указателю только конст. сигналы (как и методы). Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Январь 03, 2015, 12:40 To Авварон:
Сигнал ничего не делает, он только извещает о своём прибытии. А дальше уже система сигнал слотов на основании характеристик сигнала либо помещает его в очередь, либо вызывает слот. to Akon: Можно подписаться на константный сигнал и изменить данные, получив указатель на объект. Или неужто даже это проверяется моком? :D Название: Re: Qt 4.7 или 5. Отправлено: Igors от Январь 03, 2015, 13:02 Интересны др аспекты пятерки. Вот напр QWindow и связанные с ним классы. Там довольно много нового, и событийный цикл сильно изменен - сначала событие обрабатывается QWindow и только потом QWidget. Зачем так сделано? Зачем много нового кода "за сценой" (т.е. прямых выгод не дает)?
Название: Re: Qt 4.7 или 5. Отправлено: Авварон от Январь 03, 2015, 15:48 ?? Не хотим. Вообще, передавать указатели через сигналы - фу.Типичный код приложения. Указатели используются для обобщения на полиморфизм. Код: class Container Имея const Coontainer* вам доступен только const QList<const Item*>& items() const; Неужели по аналогии вы не хотите доступ только к void itemChanged(const Item* item) const? C MOCом вы имея const Coontainer* можете подписаться на void itemChanged(Item* item) и изменить объект. С новыми сигналами/слотами (опирающимися на С++11) принципиально возможно такое ограничение, что вам будет доступен только void itemChanged(const Item* item) const, т.е. константность не теряется: по конст. указателю только конст. сигналы (как и методы). Кстати вот код константного сигнала. Нафиг такое надо?) Код: // SIGNAL 1 Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Январь 03, 2015, 18:59 В общем исходя из обсуждаемого вопроса получаем ответ - Да, мок теперь проверяет соответствие написания const сигналов и объектов, но это ничего не значит :D
Название: Re: Qt 4.7 или 5. Отправлено: Akon от Январь 05, 2015, 05:35 Цитировать Вообще, передавать указатели через сигналы - фу. С чего бы? Хорошо, если не хотите, на чем основывается ваш вывод? Или в рамках класса Container предложите вашу реализацию.Название: Re: Qt 4.7 или 5. Отправлено: Авварон от Январь 05, 2015, 11:56 В общем исходя из обсуждаемого вопроса получаем ответ - Да, мок теперь проверяет соответствие написания const сигналов и объектов, но это ничего не значит :D Ммм, что он проверяет? Цитировать Вообще, передавать указатели через сигналы - фу. С чего бы? Хорошо, если не хотите, на чем основывается ваш вывод? Или в рамках класса Container предложите вашу реализацию.Если вам так хочется перегружать сигнал для const Item*, так и перегружайте, зачем вам помечать сигнал как const? Тем более, что connect не проверяет на соответствие константность сигнала и слота (да и зачем?): Код: class Application Название: Re: Qt 4.7 или 5. Отправлено: Igors от Январь 05, 2015, 12:36 ... что лучше передавать по значению. Это разумно, так как, Передача аргумента по указателю/ссылке ясно показывает что слот может (и вероятно должен) изменить данные, поэтому по значению - не альтернатива.Вообще хотя передача классов по значению в Qt обычно безболезненна - это заметно развращает. Единственный способ навести порядок - рассматривать такую передачу как ошибку. А соглашаясь что "так можно" - концов уже не найти. На худой конец юзать пресловутый шаред пойнтер. Название: Re: Qt 4.7 или 5. Отправлено: Авварон от Январь 05, 2015, 16:25 Передача аргумента по указателю/ссылке ясно показывает что слот может (и вероятно должен) изменить данные, поэтому по значению - не альтернатива. Но в исходной задаче изменение айтема не подразумевается, там указатели для полиморфизма. Вообще хотя передача классов по значению в Qt обычно безболезненна - это заметно развращает. Единственный способ навести порядок - рассматривать такую передачу как ошибку. Рассматривать передачу по значению (читай - по const ссылке) как ошибку? Што?Название: Re: Qt 4.7 или 5. Отправлено: Bepec от Январь 05, 2015, 16:27 Как обычно Igors выдвигает идеи будущего :D
Название: Re: Qt 4.7 или 5. Отправлено: Igors от Январь 05, 2015, 16:40 передачу по значению (читай - по const ссылке) Это сосем не одно и то же, не надо мухлевать :)Название: Re: Qt 4.7 или 5. Отправлено: Авварон от Январь 05, 2015, 23:20 передачу по значению (читай - по const ссылке) Это сосем не одно и то же, не надо мухлевать :)Ну понятно же по контексту, что имелась ввиду передача по конст ссылке:) Кстати, вот тут (http://m.blog.csdn.net/blog/CPP_CHEN/17528669) всякие адепты с++ говорят, что передавать по конст ссылке - плохо. Название: Re: Qt 4.7 или 5. Отправлено: Гурман от Январь 16, 2015, 15:36 В тему - вот у меня проект, часть которого была сделана на 4.7, когда он появился. Сейчас проект существенно развивается, причем старая часть - не так существенно. Поскольку она используется в виде динамической библиотеки, её можно было бы оставить. Но я решил всё продолжать делать на 4.7. Почему? Я лучше сначала сделаю первую версию на 4.7. Это предсказуемо. А потом, если заказчик захочет побольше возможностей, которые потенциально может дать 5.х, я с заказчика возьму деньги за их реализацию, и заложу в них стоимость перевода на новую версию Qt. ;) Объем проекта сейчас около 65000 строк, в финале ожидается около 100000.
Название: Re: Qt 4.7 или 5. Отправлено: Igors от Январь 16, 2015, 17:35 Поскольку она используется в виде динамической библиотеки, её можно было бы оставить. Т.е. плагины на четверке, ядро на пятерке? Так не выйдетА потом, если заказчик захочет побольше возможностей, которые потенциально может дать 5.х, я с заказчика возьму деньги за их реализацию, и заложу в них стоимость перевода на новую версию Qt. ;) Ах эти мечты, грезы :) Если рассматривать любое новое Qt с точки зрения "что оно (конкретно) даст моему проекту", то ответ всегда будет один: почти ничего (или совсем ничего). Заказчика интересует предметная часть, новые фичи и.т.п., а не внутренняя модернизация |