Здравствуйте, уважаемый SaZ, Вы писали:
SaZ>Здравствуйте, AlexGin, Вы писали:
AG>>Не уверен, насколько корректно примеры под Qt4 подойдут для Qt5. AG>>Также не уверен, насколько хорошо будет стыковаться MSVS-2013 и Qt5.
SaZ>Я поясню. Qt гарантирует совместимость в рамках мажорной версии. Т.е. то, что написано под Qt 4.5 будет 100% так же выглядеть под Qt 4.8. С учётом того, что в последней версии исправлены многие баги.
Огромное спасибо, буду знать! SaZ>Я не особо агитирую на переход сразу на Qt5x.
...согласен...
AG>>Ну, а все остальное — в смысле MSVS-2013 — у меня установлено, и активно применяется.
SaZ>Я сам использую msvs 2013 / 2015. Отличная среда разработки. И официально поддерживается Qt. Но, Qt4x под 2013 студию придётся компилировать вручную, т.к. готовых бинарников Qt не выкладывает.
Приспособил MSVS-2010 под Qt 4.8.7.
Однако, обнаружил, что многое из того, что умеет QtCreator, НЕ умеет MSVS приспособленная к работе с Qt
AG>>Если делать первые шаги в C++ (а я именно только начал изучать Qt), ИМХО не важно C++03 или C++11/14 — конструктор и деструктор своё назначение НЕ МЕНЯЛИ.
SaZ>Как рядом заметили, появился конструктор перемещения. И он активно используется. В Qt отказываются от велосипедов: советуют переходить на алгоритмы из STL, те же конструкторы перемещения позволяют значительно оптимизировать производительность при работе со строками и т.п. Плюс лямбды — значительно облегчают жизнь.
Попутный вопрос: значит на все контейнеры Qt (QVector, QList, etc.) можно свободно "забить" и применять вместо них STL контейнеры?
Ещё вопрос: насколько на сегодняшний день Qt поддерживает новые стандарты C++? (тот же C++11)
Здравствуйте, уважаемый Denwer, Вы писали:
D>Отладчик в креаторе — дерьмо полное, плюс тормозной. Но свои проекты все равно на креаторе делаю, все же кроссплатформенность и хорошая интеграция библиотеки в ИДЕ. Например в студии нельзя добавлять сигналы виджета и тут же их редактировать.
+100500
Я уже заметил, что добавить связи сигнал->слот в редакторе студии невозможно — приходится вызывать QtCreator
Здравствуйте, Submitter, Вы писали:
S>Здравствуйте, Serpuh, Вы писали:
S>>Стоит, по удобству VS гораздо лучше Креатора.
S>Вы не могли бы, тоже как новичку, перечислить преимущества чем он лучше Креатора? Пока большой минус для VS 2013 — он тормозит на моем компе.
о, помню, как день мучался, искал ошибку, а оказалось, что креатор из-за каких-то там своих прибабахов просто проводил дебаг по старому коду (то есть, картинка показывается нового кода, а пошаговое выполнение идет, будто бы это старый код (например, там, где в новом коде стоит i = 2, а в старом стояло i = 0, он показывает на код "i = 2" и при этом заносит в переменную i значение 0).
никакие перестроения "начисто" (как в вижуале) не помогли.
да и вообще, одно то, что они даже не потрудились сделать дополнительные окна в виде всплывающих (как в вижуале), чтоб те не мешались, когда не надо, ив то же время легко были дсотупны, говорит об отношении к программисту (это как после windows переходить на консольный unix — все ручками).
Здравствуйте, AlexGin, Вы писали:
D>>Отладчик в креаторе — дерьмо полное, плюс тормозной. Но свои проекты все равно на креаторе делаю, все же кроссплатформенность и хорошая интеграция библиотеки в ИДЕ. Например в студии нельзя добавлять сигналы виджета и тут же их редактировать. AG>+100500 AG>Я уже заметил, что добавить связи сигнал->слот в редакторе студии невозможно — приходится вызывать QtCreator
Интеграция дизайнера форм для студии только в комерческой версии вроде. А так, использую Qt Designer(bin\designer.exe) + студия.
Здравствуйте, AlexGin, Вы писали:
AG>... AG>Попутный вопрос: значит на все контейнеры Qt (QVector, QList, etc.) можно свободно "забить" и применять вместо них STL контейнеры?
Все Qt контейнеры (включая строки) поддерживают COW. Причём, потокобезопасно. А вот для STL контейнеров придётся значительно больше думать. В том числе при размещении элементов, для которых не реализован конструктор перемещения. Я пока сам не особо владею навыками использования конструктора перемещения.
Но, главный аргумент в пользу Qt контейнеров для Qt приложений это то, что Qt использует свои контейнеры внутри своего фреймворка. Нужно вам, например, получить список дочерних классов — вам вернут QList< QObject * >. Нужно получить или передать список строк, берётся QStringList. Потом, есть замечательный класс QVariant, который не имеет STL аналогов. Придётся тащить буст.
Про контейнеры так же надо помнить, что есть различия. std::set хранит элементы в виде map, а QSet в виде хэш таблицы.
AG>Ещё вопрос: насколько на сегодняшний день Qt поддерживает новые стандарты C++? (тот же C++11)
С++ 11 поддерживается начиная с 5-й версии. Причём, если я не ошибаюсь, начиная с Qt 5.7 поддержка компиляторов С++03 будет или убрана совсем или получит статус deprecated.
Реализован цикл for для всех Qt контейнеров (можно писать for ( auto text : stringList ) {...}. Активно пишутся конструкторы перемещения (за счёт их наличия значительно ускоряется работа со строками).
Очень важная фича, это дополнительный синтаксис QObject::connect. Теперь сигналы и слоты передаются как указатели на методы, а не через строки, завёрнутые в макросы, и проверка совместимости сигнала и слота делается в compile-time, а не в runtime. Т.е. можно писать connect( button, &QPushButton::clicked, this, &MyWidget::onBtnClicked );, что выглядит намного лаконичнее (и лучше поддерживается всякими autocomplete утилитами, типа ReSharper'а).
P.S. что на вскидку могу вспомнить, про нововведения в Qt5, которые надо помнить при переходе с Qt4.
— Модуль Qt4Gui разделён на Qt5Gui + Qt5Widgets. Сделано это для лучшей модульности кода. Например, QStandardItemModel теперь лежит в QtGui, и может использоваться как в QtWidgets, так и в QtQuick. А вот уже виджеты не будут подгружаться, если вы используете QtQuick/QML для GUI.
— Многопоточность частично вынесена в отдельный модуль QtConcurrent.
— Сигналы стали public методами, а не protected, как было ранее.
— По самим виджетам немного поменялись некоторые классы (например, по работе с шириной заголовков в QTreeView). Но это мелочи.
— Сложнее стало делать платформозависимые вещи с виджетами. Например, у виджета убрали метод winEvent, попутно внеся пару багов.
— qDebug, теперь макрос. Сделано это для того, чтобы можно было в обработчике использовать контекст, откуда было выведено сообщение (передаются __FILE__, __LINE__ и т.п.).
Но в целом, много хороших и удобных нововведений, о которых лучше читать блог разработчиков.
Здравствуйте, SaZ, Вы писали:
SaZ>Здравствуйте, AlexGin, Вы писали:
AG>>... AG>>Попутный вопрос: значит на все контейнеры Qt (QVector, QList, etc.) можно свободно "забить" и применять вместо них STL контейнеры?
SaZ>Все Qt контейнеры (включая строки) поддерживают COW. Причём, потокобезопасно. А вот для STL контейнеров придётся значительно больше думать. В том числе при размещении элементов, для которых не реализован конструктор перемещения. Я пока сам не особо владею навыками использования конструктора перемещения.
SaZ>Но, главный аргумент в пользу Qt контейнеров для Qt приложений это то, что Qt использует свои контейнеры внутри своего фреймворка. Нужно вам, например, получить список дочерних классов — вам вернут QList< QObject * >. Нужно получить или передать список строк, берётся QStringList. Потом, есть замечательный класс QVariant, который не имеет STL аналогов. Придётся тащить буст.
Это мне напоминает ситуацию с MFC — там также есть свои контейнеры, которые используются в библиотеке классов, однако мне (если не требовелось что-то спицифичное, что потребует работы с мфсишными контейнерами) было удобнее работать с STL контейнерами. VARIANT — помню по технологии COM, похоже что в Qt используется та же идея универсального типа данных.
SaZ>Про контейнеры так же надо помнить, что есть различия. std::set хранит элементы в виде map, а QSet в виде хэш таблицы.
+100500
AG>>Ещё вопрос: насколько на сегодняшний день Qt поддерживает новые стандарты C++? (тот же C++11)
SaZ>С++ 11 поддерживается начиная с 5-й версии. Причём, если я не ошибаюсь, начиная с Qt 5.7 поддержка компиляторов С++03 будет или убрана совсем или получит статус deprecated. SaZ>Реализован цикл for для всех Qt контейнеров (можно писать for ( auto text : stringList ) {...}. Активно пишутся конструкторы перемещения (за счёт их наличия значительно ускоряется работа со строками). SaZ>Очень важная фича, это дополнительный синтаксис QObject::connect. Теперь сигналы и слоты передаются как указатели на методы, а не через строки, завёрнутые в макросы, и проверка совместимости сигнала и слота делается в compile-time, а не в runtime. Т.е. можно писать connect( button, &QPushButton::clicked, this, &MyWidget::onBtnClicked );, что выглядит намного лаконичнее (и лучше поддерживается всякими autocomplete утилитами, типа ReSharper'а).
SaZ>P.S. что на вскидку могу вспомнить, про нововведения в Qt5, которые надо помнить при переходе с Qt4. SaZ>- Модуль Qt4Gui разделён на Qt5Gui + Qt5Widgets. Сделано это для лучшей модульности кода. Например, QStandardItemModel теперь лежит в QtGui, и может использоваться как в QtWidgets, так и в QtQuick. А вот уже виджеты не будут подгружаться, если вы используете QtQuick/QML для GUI. SaZ>- Многопоточность частично вынесена в отдельный модуль QtConcurrent. SaZ>- Сигналы стали public методами, а не protected, как было ранее. SaZ>- По самим виджетам немного поменялись некоторые классы (например, по работе с шириной заголовков в QTreeView). Но это мелочи. SaZ>- Сложнее стало делать платформозависимые вещи с виджетами. Например, у виджета убрали метод winEvent, попутно внеся пару багов. SaZ>- qDebug, теперь макрос. Сделано это для того, чтобы можно было в обработчике использовать контекст, откуда было выведено сообщение (передаются __FILE__, __LINE__ и т.п.).
...интересно...
SaZ>Но в целом, много хороших и удобных нововведений, о которых лучше читать блог разработчиков.
Спасибо, уважаемый SaZ!
Огромное спасибо, земляк
Здравствуйте, уважаемый Igore, Вы писали:
I>Интеграция дизайнера форм для студии только в комерческой версии вроде. А так, использую Qt Designer(bin\designer.exe) + студия.
Но в дизайнере форм (Qt Designer) мне не удалось найти инструмента для генерации сигналов —
при нажатии пользователем кнопки в окне или при выборе пункта меню.
То есть — я ожидал что там будет удобный инструментарий для автоматической генерации кода сигнал/слот (для *.h и *.cpp файлов).
Однако, ИМХО, ничего такого в Qt Designer нет.
Очень похоже, что данные задачи нужно делать при помощи Qt Creator, даже если и проект правится в студии.
P.S. Пока решил работать всё-таки с Qt Creator, так как ожидал более приличную интеграцию пакета Qt с MSVS.
AG>Ещё вопрос: насколько на сегодняшний день Qt поддерживает новые стандарты C++? (тот же C++11)
Это зависит от компилятора.
Если вы установите QtCreator c MinGW, то там, начиная с версии gcc 4.9, поддерживается С++11 полностью.
Компилятор Студии 2010 практически не поддерживает С++11 за исключением некоторых мелочей.
Рекомендую подружить Qt и студию 2012 (минимум) — там уже вся стандартная библиотека С++11.
А еще лучше — Студия 2013. Там уже и язык почти полностью реализован в стандарте С++11.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
SaZ>Про контейнеры так же надо помнить, что есть различия. std::set хранит элементы в виде map, а QSet в виде хэш таблицы.
В стандартной библиотеке есть set и map — это красно-черное дерево.
А есть unodered_set и unordered_map — это хеш-таблица.
Да еще микрософтовские hash_set и hash_map есть.
Хочешь быть счастливым — будь им!
Без булдырабыз!!!
Здравствуйте, уважаемый DiPaolo, Вы писали:
DP>1) Например, в Windows при установке Qt Add-in появляется шорткат в Пуске "Qt 4.8.4 Command Prompt", который вызывает нужный батник для настройки конкретного окружения:
DP>
DP>echo Setting up a Qt environment...
DP>set QTDIR=C:\apps\Qt\4.8.4
DP>echo -- QTDIR set to C:\apps\Qt\4.8.4
DP>set PATH=C:\apps\Qt\4.8.4\bin;%PATH%
DP>echo -- Added C:\apps\Qt\4.8.4\bin to PATH
DP>set QMAKESPEC=win32-msvc2010
DP>echo -- QMAKESPEC set to "win32-msvc2010"
DP>
Огромное спасибо, уважаемый DiPaolo!
Я именно таким образом настроил конфигурацию с моими Qt-шками
Убрал всё из системных настроек PATH!
Теперь применяю отдельные бат-нички для каждой из конфигураций.
Здравствуйте, AlexGin, Вы писали:
AG>Здравствуйте, уважаемый Igore, Вы писали:
I>>Интеграция дизайнера форм для студии только в комерческой версии вроде. А так, использую Qt Designer(bin\designer.exe) + студия. AG>Но в дизайнере форм (Qt Designer) мне не удалось найти инструмента для генерации сигналов — AG>при нажатии пользователем кнопки в окне или при выборе пункта меню. AG>То есть — я ожидал что там будет удобный инструментарий для автоматической генерации кода сигнал/слот (для *.h и *.cpp файлов). AG>Однако, ИМХО, ничего такого в Qt Designer нет. AG>Очень похоже, что данные задачи нужно делать при помощи Qt Creator, даже если и проект правится в студии.
AG>P.S. Пока решил работать всё-таки с Qt Creator, так как ожидал более приличную интеграцию пакета Qt с MSVS.
Мне кажется, что написать 3 строки кода — это не проблема. Лично я в дизайнере только расставляю контролы — всю логику уже руками делаю.
P.S. Меня ещё со времён универа раздражало, когда преподавали формошлёпство, и получалось, что студенты вообще не имели представления о том, что за код там генерирует редактор.
И я очень благодарен своему преподавателю по WinAPI, который заставлял нас руками делать весь GUI (с целью обучения), и благодарен Кириллу Суркову, который читал ООП на базе Дэлфи, при этом все лабораторные делались как консольные приложения. Никаких форм.
Здравствуйте, Honduras, Вы писали:
H>Здравствуйте, AlexGin, Вы писали:
AG>>Возможна ли интеграция MSVS и Qt4?
H>возможна — у меня на студии 2010 32 стоит — где скачал не помню.
Здравствуйте, Honduras, Вы писали:
H>Здравствуйте, AlexGin, Вы писали:
AG>>Возможна ли интеграция MSVS и Qt4?
H>возможна — у меня на студии 2010 32 стоит — где скачал не помню.
Уже полтора месяца, как разобрался в этом вопросе
Теперь я использую:
Qt 4.8.7 под студию 2010
Qt 5.5.1 под студию 2013
H>А вот это куда пойдет — кто знает?
H>https://download.qt.io/official_releases/vsaddin/ H>qt-vs-addin-1.2.5.exe 22-Feb-2016 10:07 202M