LINUX.ORG.RU

Qt 5.8

 


2

6

Выпуск Qt 5.8 должен был состояться ещё в ноябре, но задержался до сегодняшнего дня.

Основные нововведения:

  • полная поддержка Qt Wayland Compositor API (ранее была доступна как технологическое превью);
  • модуль Qt Network Authorization с поддержкой OAuth;
  • экспериментальный бекенд Direct3D 12 для Qt Quick;
  • обновление Qt WebEngine до новой версии Chromium;
  • полная поддержка Qt SCXML;
  • Qt Speech — новый модуль преобразования текста в голос.

В связи с задержками релиза, заморозка функций (feature freeze) Qt 5.9 произойдёт в ближайшее время.

>>> Подробности

★★

Проверено: jollheef ()
Последнее исправление: sudopacman (всего исправлений: 7)
Ответ на: комментарий от anonymous

о, первый неосилятор со своим экспертным мнением, я уж думал их тут не будет

диванный эксперт, ты умные указатели используешь? Или в hello world они не нужны? Или тебя не напрягает длиннокод типа unique_ptr<vector<some_class>>? И подобных примеров многословности куча.

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

диванный эксперт, ты умные указатели используешь? Или в hello world они не нужны? Или тебя не напрягает длиннокод типа unique_ptr<vector<some_class>>? И подобных примеров многословности куча.

ты уроки сделал?

anonymous
()
Ответ на: комментарий от BlackRaven86

Зачем вектор помещать в unique_ptr?

Это частая болезнь тех, кто пишет преимущественно на языках с GC, например, Java. Они по инерции везде пишут new, а т.к. просто new писать плохо, то пихают заодно unique_ptr и shared_ptr.

anonymous
()
Ответ на: комментарий от BlackRaven86

Я на плюсах писал не так уж и много могу делать некоторые ошибки.

Помню что в некоторых случаях надо было использовать указатели иначе действие происходило не над тем объектом. К примеру при добавлении объекта в вектор. так как там часто создавалась копия а оригинал в векторе был неизменным. Плюс утомляла необходимость помнить об освобождении памяти.

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

в некоторых случаях надо было использовать указатели иначе действие происходило не над тем объектом. К примеру при добавлении объекта в вектор. так как там часто создавалась копия а оригинал в векторе был неизменным

Тогда это вектор указателей, а не указатель на вектор.

Вообще, я бы рекомендовал подучить плюсы ;)

BlackRaven86
()
Ответ на: комментарий от tnemo

Я скажу Вам по секрету, шо Ви таки ничего не потеряли.

anonymous
()
Ответ на: комментарий от NextGenenration

Я на плюсах писал не так уж и много могу делать некоторые ошибки.

все знают что в школе Паскаль проходят

anonymous
()
Ответ на: комментарий от Aceler

В том, что в Qt всё уже сделано за тебя.

бугага)) я вот пишу на boost, а не на c++, а также пишу на flask, а не на python

anonymous
()
Ответ на: комментарий от anonymous

Для новичка, который «на плюсах писал не так уж и много могу делать некоторые ошибки», и который вдруг захотел писать на чистом C++ это выглядит именно так.

Aceler ★★★★★
()
Ответ на: комментарий от fluorite

Для таких неосиляторов прямо из коробки есть vector::emplace_back и std::reference_wrapper.

Уродливо. Как и куча других вещей вроде препроцессора, обязательного в определённых случаях объявления сигнатур функций. Всё равно код получается многословнее. емнип для удаления элемента из вектора требовалось складывать итератор на первый элемент с номером удаляемого. вот зачем такое уродство?

NextGenenration ★★
()
Ответ на: комментарий от anonymous

бугага)) я вот пишу на boost, а не на c++, а также пишу на flask, а не на python

для хороших языков не нужно ставить дополнительные библиотеки, чтоб не страдать от уродства.

NextGenenration ★★
()
Ответ на: комментарий от BlackRaven86

Это не так: http://en.cppreference.com/w/cpp/container/vector/erase

Перехожу по ссылке и думаю, неужели моя память повреждена? И там я вижу:

c.erase(c.begin());
c.erase(c.begin()+2, c.begin()+5);

Мне уже случалось отлаживать весьма неприятный баг. Проблема была в том что я брал begin от одного вектора и удалял в другом. Ошибка копипаста. Можно конечно самому написать класс прослойку, но у мнея есть чем занятся ещё.

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

откуда я должен догадаться что проходят в школах? я со школьниками не общаюсь

твоя мамка-то знает что ты прогуливаешь?

anonymous
()
Ответ на: комментарий от NextGenenration

Проблема была в том что я брал begin от одного вектора и удалял в другом

закапываешь себя))

anonymous
()
Ответ на: комментарий от NextGenenration

Перехожу по ссылке и думаю, неужели моя память повреждена? И там я вижу:

Так используй итератор на удаляемый элемент, а не begin().

BlackRaven86
()
Ответ на: комментарий от NextGenenration

Ты ещё предложи с указателями руками работать

предлагаю тебе заняться быдлокодерствомC# и забыть про плюсы, это не для тебя

anonymous
()
Ответ на: комментарий от BlackRaven86

Так используй итератор на удаляемый элемент, а не begin().

каждый раз когда я рассказываю эту историю, я в тайне надеюсь на то что мне объяснят зачем вообще нужен этот цирк с итераторами и почему нельзя было содать функцию которая получает к примеру int и удаляет элемент по этому номеру. но похоже зря.

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

каждый раз когда я рассказываю эту историю, я в тайне надеюсь на то что мне объяснят зачем вообще нужен этот цирк с итераторами и почему нельзя было содать функцию которая получает к примеру int и удаляет элемент по этому номеру. но похоже зря.

ахаха) ты даже для школьника слишком глуп

обычно к девятому классу класса коррекции человек уже способен сам разобраться в понятиях метапрограммирования и начинает отличать связный список от массива

anonymous
()
Ответ на: комментарий от anonymous

и начинает отличать связный список от массива

ты хочешь сказать что vector в c++ это связный список, о уважаемый эксперт? Просвети меня своей неземной красотой мудростью, как в случае связного списка обеспечить константную сложность доступа? Я с нетерпением жду ответа, сенсей.

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

нет, вам говорят обратное. вектор - массив, а вы требуете от массива поведения связанного списка (типа удаление элемента из середины по индексу)

jcdr
()
Ответ на: комментарий от jcdr

вы требуете от массива поведения связанного списка (типа удаление элемента из середины по индексу)

А в чём проблема? массив обсеспечивает константную сложность доступа к элементу. для этого элементы располагаются линейно. для удаления требуется взять и сдвинуть элементы располагающиеся за удаляемым. Здесь скорость напрямую зависит от размера массива. плюс не обязательно каждый раз перевыделять память после удаления.

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

взять и сдвинуть элементы располагающиеся за удаляемым

во-первых, для больших массивов/частых операций - это неэффективно во-вторых, а как быть с тем, что пользователь сохранил у себя указатель на элемент после удаленного? он будет валидным, но указывать будет на другой элемент вектора

jcdr
()
Ответ на: комментарий от jcdr

во-первых, для больших массивов/частых операций - это неэффективно

это уже вопрос выбора структуры для хранения данных. я не утверждал что другие структуры не нужны

а как быть с тем, что пользователь сохранил у себя указатель на элемент после удаленного?

удаление из массива отдельно, удаление на совсем - отдельно. этот элемент вполне себе может жить в ещё одном массиве.

он будет валидным, но указывать будет на другой элемент вектора

решил руками с памятю работать - работай до конца

NextGenenration ★★
()
Ответ на: комментарий от NextGenenration

решил руками с памятью работать - работай до конца

тогда что вас останавливает от использования С? элементы стандартной библиотеки с++ должны предоставлять прозрачные решения, по возможности уменьшая число случайных ошибок. а undefined behaviour и прочих out of memory и так предостаточно

jcdr
()
Ответ на: комментарий от ZenitharChampion

а вы пишете лишь фронтэнды.

остальное просто ненужно в этих странах

FiXer ★★☆☆☆
()
Ответ на: комментарий от NextGenenration

решил руками с памятю работать - работай до конца

вот ты, например, даже такое простое решение принять не смог)

anonymous
()
Ответ на: комментарий от NextGenenration

каждый раз когда я рассказываю эту историю, я в тайне надеюсь на то что мне объяснят зачем вообще нужен этот цирк с итераторами

Итераторы обеспечивают абстракцию над контейнером. Например, это нужно для алгоритмов стандартной библиотеки - алгоритмы не привязаны к контейнерам и просто работают с итераторами.

и почему нельзя было содать функцию которая получает к примеру int и удаляет элемент по этому номеру.

В контейнерах Qt можно, кстати.

Еще стоит учесть, что в стандартной библиотеке некоторое удобство принесено в жертву корректности и надежности (особенно в случае исключений). Например, если хочется вытащить элемент из очереди/стека, то такой вариант не сработает:

elem = queue.pop();

Нужно это делать двумя разными операциями:

elem = queue.top();
queue.pop();

Qt же наоборот, ориентирован на удобство.

BlackRaven86
()
Ответ на: комментарий от alexws54tk

Им уже можно пользоваться ещё со времён Qt 5.1

Нет.

EXL ★★★★★
()
Ответ на: комментарий от jcdr

тогда что вас останавливает от использования С?

нет необходимости ручной работы с памятью.

NextGenenration ★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.