Які небезпечні куточки Qt? [зачинено]


10

Нічого ідеального під сонцем немає. Qt не є винятком, і він має обмеження: ми не можемо використовувати піксельні карти в потоці, відмінному від GUI, ми не можемо використовувати QImage з 16-бітним форматом зображення на канал та ін.

Які ситуації змусили вас зіпсувати дизайн через обмеження Qt?
Які найвиразніші примхи?
Яких дизайнерських рішень слід уникати, використовуючи Qt у своїх проектах?


Можете чи ви сказати , в Qt? Якщо розгорнути його в «Q Toolkit», ви можете додати «до» перед ним, але це виправити / передову практику , щоб сказати в Qt? Просто цікаво.
Анто

@Anto: Я гадаю, theтут зв'язаний corners, ні Qt, але це лише моє інтуїтивне відчуття, оскільки я росіянин :)
лози

Одна з можливих небезпечних кривих полягає в тому, що проект може опинитися у фінансових проблемах. Нещодавно Nokia підписала угоду з Microsoft (використовувати Win7 на своїх телефонах), що ставить майбутнє Qt на хиткі місця.
Пітер Роуелл

Мені дуже цікаво знати цю відповідь, тому що я є
нобієм

@Vines: Як щодо "Які небезпечні куточки QT?"
Кріс

Відповіді:


12

Як не дивно, я б сказав, що сила Qt також є одним з недоліків. Існує так багато потужних конструкцій і розширень, що код, який ви пишете в Qt, легко стає сильно закріпленим "Qt шляху". Намагаючись витягнути функціональність на іншу мову, означає не лише перезапис, потрібно знати багато Qt-специфічних технологій.

Ширина Qt означає, що наймати програмістів означає або зобов’язання когось із досвідом Qt, або підготовку для цього досвіду. Потрапити на підрядника і досягти швидкості складніше, ніж ванільний С ++.

Коли Qt змінився з 3.x на 4.x, нашій команді було потрібно майже 9 місяців, щоб зробити порт, за цей час було додано мало нових функціональних можливостей. Ви сподіваєтесь компенсувати цю велику вартість оновлення для підвищення ефективності розвитку інший час. (Зауважте, я пропустив переваги Qt, яких також багато)


2
Порт від Qt3 до Qt4 був важким для більшості людей, яких я знаю. Цей QML та подібні речі, які були представлені у новіших версіях, викликають занепокоєння, оскільки це може означати, що ще раз з'явиться складний порт.
Вітор Пі

10

Qt не використовує стандартну бібліотеку C ++ , але має власні QString, QVector, QMap, ...

Це означає, що ви повинні прийняти важливе дизайнерське рішення: в яких частинах програми буде використовуватися QString та в яких частинах буде використовуватися std :: string?

Використання std :: string в деяких частинах та QString в інших частинах, означає, що вам доведеться конвертувати між QString і std :: string в бундеріях.

Щоб уникнути накладних витрат, можна вирішити використовувати QString у всій програмі. Але це значно ускладнює використання сторонніх бібліотек, які не базуються на Qt, наприклад, boost.

(Зверніть увагу, що те саме стосується std :: map vs QMap, std :: vector vs QVector тощо)

Визначення того, які деталі використовують типи Qt, а в яких частинах використовується STL, є головним дизайнерським рішенням з великими наслідками. І лише тому, що Qt відмовляється від використання стандартної C ++ бібліотеки.

ІМХО, це рішення може піти в будь-який бік, залежно від проекту. Тому я не можу відповісти на ваше запитання, якого слід уникати.


1
Я згоден, але я хотів би вийти на край і сказати, що QString (тощо) також є однією з сильних сторін, оскільки так приємно працювати з ними.
Йоган

1
Крім того, не все так складно використовувати бібліотеку, яка не використовує QString. Існує простий метод перетворення QString в строку std :: і навпаки. Не дуже до цього.

@Glenn Nelson: Так, нині існують функції перетворення для QString; дуже корисно і зручно! Але особливо для QVector та QMap, конвертування буде накладати великі витрати (а прості рішення не працюватимуть, наприклад, для QVector <QString>); Це накладні витрати слід враховувати під час проектування, щоб уникнути проблем з експлуатацією вниз.
Sjoerd

3

Це не відповідає безпосередньо на питання, але я думаю, що варто згадати: мабуть, самий "небезпечний" аспект Qt полягає в тому, що Nokia потрапила в ліжко з MSoft ...


2
Але вони відмовилися від Qt, щоб це зробити.
Мартін Бекетт

1
Для повноти - комерційна частина Qt зараз належить Digia, тоді як Qt перейшов до системи "відкритого управління", де інші можуть легко зробити свій внесок. Також є фундамент KDE Free Qt, який захищає Qt від закритого джерела.
Вішеш Ханда

2

Нещодавно я дізнався, що QChar, незважаючи на свою назву, насправді не відповідає одному символу, а кодовій одиниці UTF-16. Таким чином, коли ви хочете сканувати довільний текстовий символ Unicode за символом, вам слід додати алгоритми для роботи з високими та низькими сурогатами, комбінуючи символи тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.