Как современный язык C++ используется в QT?

У меня та же проблема. Я попробовал способ, предложенный лунатизмом, но он не работал для меня. Я использовал это немного по-другому с хуком api, useRef и useLayoutEffect. Поэтому я предложил другое решение, использующее foreignObject в svg. Таким образом, мы можем использовать стандартные решения html и css.

  <foreignObject x={0} y={0} width={maxTextwidth} height={20}>
    <div style={{textOverflow: 'ellipsis', with: maxTextwidth, overflow: 'hidden', whiteSpace: 'nowrap'}}>
      Long text to use ellipsis on
    </div>
  </foreignObject>
10
задан GEOCHET 1 June 2009 в 14:58
поделиться

9 ответов

Мне действительно не нравится, как Qt удалось реализовать свой механизм сигналов / слотов. Их прекомпилятор moc действительно кажется мне хакерским приемом, и он даже не поддерживает стандартный C ++.

Я думаю, было бы здорово, если бы Qt мог модернизироваться для использования хотя бы классов STL. Было бы здорово, если бы Qt по возможности использовал Boost (особенно Boost.Signals).

4
ответ дан 3 December 2019 в 13:11
поделиться

Известно, что Qt не использует шаблоны, это одна очень полезная современная функция C ++. Но это не означает, что нужна оболочка для Qt API. Qt использует собственные прекомпиляторы для решения тех же проблем. Некоторым не нравится такой подход, но API Qt очень прост и эффективен, и я не верю, что существует реальная необходимость его модернизации. В частности, сигналы и слоты, очень впечатляющая функция Qt, может быть реализована с использованием шаблонов (см. Библиотеку boost.signals ), но способ, которым Qt реализовал это, все еще намного более эффективен.

Я бы скажите «не волнуйтесь и используйте Qt как есть».

РЕДАКТИРОВАТЬ: Извините, я забыл о контейнерах шаблонов, поставляемых с Qt. Но все же Qt API очень мало использует классы шаблонов. Это не означает, что они не используют их внутри Qt или что их способ кодирования устарел.

Boost.Signals, вероятно, более мощные, чем сигналы / слоты Qt, но, насколько я могу судить, нет спорить о том, что проще использовать. Одна очень убедительная реализация принципа KISS .

27
ответ дан 3 December 2019 в 13:11
поделиться

Qt использует современные варианты языка C ++ - в настоящее время C ++ 98, да и шаблоны также используются там, где это целесообразно. Qt имеет некоторую поддержку STL. См., Например, http://qt-project.org/doc/qt-5.1/qtcore/containers.html - и вспомогательные функции, например, std :: string. Все это в документации: http://qt-project.org/doc/qt-5.1/qtdoc/index.html ;) Вопрос о шаблонах и moc - это тот, который мы получаем так часто, что добавляли это в нашу документацию; http://qt-project.org/doc/qt-4.8/templates.html

17
ответ дан 3 December 2019 в 13:11
поделиться

Исходники Qt содержат шаблон "template <" 1280 раз только в src / corelib. Я не понимаю, как это может быть ошибочно принято, поскольку «известно, что Qt не использует шаблоны»

11
ответ дан 3 December 2019 в 13:11
поделиться

В отличие от Boost.Signals, реализация сигналов / слотов в Qt является поточно-ориентированной за счет использования поставленные в очередь соединения. Однако 2 мая 2009 года был выпущен Boost.Signals2, который принес столь желанную потокобезопасность. С точки зрения разработчика, реализация сигналов / слотов в Qt намного проще в использовании, в основном из-за того, что она не использует шаблоны. Для более подробного ознакомления с тем, почему Qt использует moc вместо шаблонов для сигналов и слотов, вот страница из их документации.

Для тех, кто задается вопросом, почему Qt имеет свой собственный набор контейнерных классов, я почти уверен, что основной мотивацией было предложить неявный обмен. Все классы контейнера неявно разделяются, поэтому всякий раз, когда QList копируется, копируется только указатель на данные. См. здесь для получения дополнительной информации о неглубоком копировании в Qt.

8
ответ дан 3 December 2019 в 13:11
поделиться

Мне тоже не нравится, как Qt добавляет магию вуду в C ++. В нем используется так много макросов, что он ужасно напоминает мне C. На данный момент нет ничего, что указывало бы на то, что Qt будет более доброжелательным к возможностям C ++ в будущем. Мне бы очень хотелось, чтобы он был больше похож на C ++, а не на отдельный язык (например, зачем нам std :: vector <> и QVector <>? Или сигналы Qt, Boost.Signals и sigc ++?)

2
ответ дан 3 December 2019 в 13:11
поделиться

Qt - это библиотека, которая должна поддерживать широкий спектр компиляторов. Он по-прежнему поддерживает MSVC6, например (хотя я думаю, что Qt Software постепенно прекращает поддержку этого). Это ограничивает более современные возможности C ++, которые Qt может использовать.

Но это не означает, что вы не можете использовать их в своей программе Qt.

1
ответ дан 3 December 2019 в 13:11
поделиться

Чтобы напрямую ответить на ваш вопрос, Qt API исчерпывающий . Я почти уверен, что когда-нибудь они появятся с функцией QApp :: ParkMyCar (). Иногда они реализуют несколько способов сделать одно и то же, с разными позициями в отношении эффективности и простоты использования. Ознакомьтесь с их (отличной) документацией. Он такой же всеобъемлющий и не раз спасал меня.

Судя по тому, что я видел в исходном коде Qt, этот код очень эффективен.
Взгляните на функции в конфигурации установки - вы можете включить / выключить поддержку различных функций (включая STL, многопоточность и даже графический интерфейс). Более того, когда Тролли сделали Qt 4 с нуля, они не стали жертвовать функциональностью и кодовым джазом - они просто предоставили больше и того, и другого. Учитывая качество их программистов и их способ обновления основных версий, я не думаю, что нам нужно беспокоиться об устаревании Qt (или его частей).

Целевым рынком Qt (для настольных компьютеров) является компания MamaPapa, которая делает Hello Kitty настольные будильники, и хочет Кодировать один раз и быть уверенным, что он работает на всех «нормальных» системах - Windows 98 и выше, популярных дистрибутивах Linux и Mac OS X. Это означает потворство ЖК-дисплеям всех основные компиляторы в каждом виде системы. Если это означает сведение к минимуму шаблонного волшебства в их коде, пусть будет так.

6
ответ дан 3 December 2019 в 13:11
поделиться

На протяжении всего времени существования Qt 4.x я сомневаюсь, что имеет смысл переписывать части Qt для использования, например, «более современного» C ++. Это из-за предпосылки, что все выпуски одной и той же основной версии Qt должны быть двоично-совместимыми . Мы также не можем просто отказаться от классов, которые до сих пор используют клиенты (хотя вполне нормально вводить новые вещи, даже для ограниченного набора поддерживаемых компиляторов).

Если, наконец, Qt 5 уже почти готов, и современные конструкции и функции C ++ наконец-то стали доступны на целевых поддерживаемых платформах и компиляторах, и это поможет разработчикам C ++ и клиентам писать лучший и более мощный код, тогда почему бы и нет?

4
ответ дан 3 December 2019 в 13:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: