Чи вивчає C ++ через Qt Framework, що дійсно навчається C ++ [закрито]


32

Проблема в тому, що більшість прочитаних нами книг C ++ майже вічно витрачають на синтаксис та основи мови, наприклад, forпетлі while, масиви, списки, покажчики тощо.

Але вони, здається, ніколи не будують нічого, що є досить простим для використання для навчання, але достатньо практичним, щоб зрозуміти філософію та силу мови.

Тоді я натрапив на QT, який є дивовижною бібліотекою!

Але опрацьовуючи демонстрації, які вони мають, здається, я зараз перебуваю у звороті дилеми. Я відчуваю, що син багатія їздить у спортивній машині, субсидованої батьком. Як би я міг створити фантастичне програмне забезпечення, але не маю поняття, що відбувається під капотом.

Як приклад моєї дилеми візьміть завдання створити простий веб-браузер. У чистому C ++ я навіть не знав, з чого почати, але з бібліотекою Qt це можна зробити за декілька рядків у коді.

Я не скаржусь на це. Мені просто цікаво, як заповнити порожнечу знань між базовою структурою мови та інтерфейсом високого рівня, який надає Qt-рамка?


Я не знайомий з програмуванням в Qt. Чи насправді це вводить якийсь новий синтаксис чи змінює мову, чи це просто деякі дуже складні бібліотеки?
FrustratedWithFormsDesigner

@FrustratedWithFormsDesigner Це не QT - це GUI Framework qt.nokia.com, якщо вас цікавить
Карлсон

Qt також пропонує альтернативу стандартним класам і контейнерам (наприклад, QString, QList тощо) та безлічі інших засобів. Деякі з них я вважаю навіть більш інтуїтивними, ніж стандартні. Я думаю, що це приємне середовище програмування, але я б радив вивчати основні мови C ++ окремо.
Джорджіо

3
Якщо ви хочете дізнатися, як реалізується Qt, просто завантажте і подивіться його вихідний код.
user16764

1
@Karlson Qt додає деякі речі до мови, отже, необхідність у компіляторі moc aka metaobject. Це додає деякої рефлексії та складає основу системи сигналів / слотів Qt.
Tamás Szelei

Відповіді:


11

Чи хочете ви знати, як наступати на прискорювач змушує автомобіль їхати швидше, чи вас хвилює лише те, що наступаючи на акселератор, автомобіль рухається швидше?

Ви бачите перевагу програмування чорної скриньки, що є прекрасним способом проектування системи, коли всі коробки працюють. Хтось повинен зробити чорні скриньки, і якщо ви хочете бути тим хлопцем / дівчиною, тоді вам потрібно знати більше про мову, ніж хлопець, який використовує коробку.

Є роботи, які є хорошими роботами в кожному стилі, тож саме від вас залежить те, що ви хочете запрограмувати. ІМО, ви б робили собі загрозу, хоча якби не доклали зусиль, щоб зняти частину абстракції, яку QT дає вам врешті-решт.


2
"IMO, ви б робили собі загрозу, хоча, якби ви не доклали зусиль, щоб зняти частину абстракції, яку QT дає вам врешті". Твоє право - це відчуття кишечника у мене
user866190

18

Найбільше шкоди, яку ви завдасте собі, якщо ви хочете сказати це так, це те, що ви взагалі не навчитесь використовувати стандартні структури даних C ++, ітератори, алгоритми та рядки. Qt має власні бібліотеки для всіх цих цілей, і ви майже не змушені використовувати їх замість стандартних об'єктів C ++, оскільки API інтерфейсів Qt приймають лише власні структури даних.

Можна стверджувати, що навчитися використовувати одну бібліотеку алгоритмів після засвоєння інших - це тривіальне завдання. Перш ніж їхати на співбесіду, де інтерв'юери очікують, що ви освоїте C ++, переконайтеся, що ви заздалегідь розібралися з цією дрібницею.


3
Погоджено - Qt використовує зовсім інший набір інструментів, як правило, для стандарту C ++.
DeadMG

У нашій компанії тривали дискусії про те, чи варто використовувати стандартні контейнери та ітератори чи Qt, і ми ще не знайшли рішення: ми в кінцевому підсумку використовували обидва, хоча ми не змішуємо два стилі в заданий модуль. У мене таке відчуття, що перейти від Qt до стандарту концептуально дуже просто, хоча це займе певний час.
Джорджіо

9
Я використовую стандартні контейнери та алгоритми всередині моїх інженерних моделей - тобто моєї бізнес-логіки. Я використовую контейнери Qt всередині свого GUI-коду. Таким чином мої інженерні моделі захищені від змін Qt і навпаки. Qt має способи з'єднання стандартних контейнерів та їх контейнерів.
emsr

2
Мене все одно не хвилює контейнер. Вони не є найбільш корисною частиною STL; алгоритми набагато важливіші. Завдяки конструкції STL, його алгоритми можуть легко працювати з іншими контейнерами, а контейнери Qt розроблені для роботи з алгоритмами STL. Безпрограшна, справді.
MSalters

12

Зважаючи на те, що у Qt є власний метакомпілятор, з яким ви повинні обробляти вихідні файли, важко вважати код Qt "просто C ++".

Але що ще важливіше, стиль C ++, який Qt використовує та заохочує, - це те, що для нас в останній раз бачилося в 1995 році.

Дійсно, це спроба зробити C ++ максимально схожим на Java. Це не вистачає на або відштовхує від усіх дивовижних речей, які фактично роблять C ++ сьогодні корисним . Натомість ви заблоковані у підмножину, яка найбільше відчуває себе неповноцінною Java.

Отже, якщо мета полягає у вивченні C ++, я б сказав, що ні, не тримайтеся подалі від Qt. Можливо, подивіться замість Boost, якщо ви хочете використовувати створену бібліотеку як вихідну точку. Підвищення втілює в собі методи, які вважаються добре сьогодні .

Але якщо чесно, якщо ви хочете вивчити мову C ++ , то підберіть хороший підручник та зосередитесь на мові .

Написання веб-браузера, незалежно від того, як ви це зробите, в кращому випадку навчать вас про веб-браузери. Це не навчить вас багато про мову, якою ви користуєтесь.

У мові C ++ немає вбудованого класу WebBrowser. Якщо ви читаєте стандарт C ++, він нічого не говорить про браузери. Він навіть не згадує програми GUI.

Це тому, що ці речі побудовані зверху, надані такими бібліотеками , як Qt. C ++, як і будь-яка мова програмування, - це про логіку, про те, як виразити цю логіку. І так, це означає роботу з масивами та покажчиками та петлями та всіма цими речами.

Чи зможете ви написати веб-браузер, використовуючи лише ті вбудовані інструменти, надаючи достатній час ? Чи знаєте ви, як виразити програмну логіку? Якщо ні, то вам потрібно більше часу витрачати на цикли та покажчики, а менше - на дзвінки new QWebKit()та просто копіювання готових бібліотек.

"Філософія та сила мови" є в масивах, списках і циклах, а не у веб-браузерах.


4
Я ніколи не говорив, що вони кращі, бо вони нові . Вони нові, і вони кращі. Справа в тому, що C ++ як мова просто не дуже підходить для цього подібного до Java підходу. У C ++ поліморфізм успадкування та часу виконання - це біль, тому що він практично вимагає від вас купівлі-розподілу об'єктів по всьому місцю, саме це і дало мові свою репутацію щодо протікання пам’яті в першу чергу, тому що вона схильна до помилок нарізання, оскільки це ускладнює копіювання об'єктів. Він також неефективний, менш розширюваний і вимагає більш виснажливого кодового коду.
jalf

2
Хек, Qt потрібен власний метакомпілятор лише для того, щоб зробити їхній стиль програмування терплячим . Це вам щось не говорить?
jalf

4
Я не захищав Qt сам по собі (я в цьому бачу дуже багато обмежень). Твоє твердження "стиль C ++, який Qt використовує та заохочує, - це те, що для інших нас востаннє бачили близько 1995 року." З цією формулюванням незрозуміло, що поганого з цим стилем (крім того, що йому 15 років) і які поточні, кращі альтернативи. Можливо, якщо ви більш конкретні, то, що ви маєте на увазі, стане зрозумілішим.
Джорджіо

3
@JimInTexas: він також передує C ++. Ваша думка? На початку середини 90-х С ++ був зовсім іншим звіром. Це було набагато ближче до того, що зрештою стала Явою, ніж сьогодні.
jalf

3
@JimInTexas: Так, це неправильно, але, мабуть, також слід зрозуміти, що я маю на увазі. Це спроба досягти цілей дизайну Java, на C ++. Це спроба втілити ту саму недосконалу модель OOP, яку реалізує java.
jalf

9

Навчається C ++ за допомогою Qt Framework. Дійсно навчається C ++

Можливо.

Я повинен побачити код, який ви вводите в обробники подій.

Насправді, не одержимий тим, наскільки ти "знаєш". Усі ми використовуємо віконні рамки і ми все ще вчимося. Просто продовжуйте кодувати / читати нові речі, і ви продовжите вивчати C ++. Вивчення нової віконної системи - чудове доповнення до ваших навичок, навіть якщо це може не означати, що ви можете реалізувати нейронну мережу або швидкий корт в C ++.


5

Не хвилюйтесь; спочатку більшість вашого коду просто використовуватиме фреймворк, але через деякий час вам доведеться розширити його, навіть якщо трохи. Тоді вам доведеться використовувати більше і більше C ++.

Також пам’ятайте, що у вас є все джерело Qt, IDE з радістю підведе вас до визначення будь-якої функції / методу / класу, яку ви хочете. Чим глибше ви заходите, тим більше C ++ ви побачите.

Інші згадували про різницю між Qt C ++ і стандартним C ++. Вони потрапляють у два табори:

  • інша бібліотека: Qt включає всі звичні контейнери: масиви, списки, набори, хешмапи тощо. Вони дуже добре поєднуються і є гарними реалізаціями, але вони не є STD різноманітністю. Тим не менш, в останніх версіях (4.1, і пізніших, я думаю) вони мають "STD-подібні" API на додаток до старої різноманітності (і Java-подібний API). Зрештою, вибір дизайну (коли використовувати масив, коли використовувати хешмап) однаковий, тож змінити STD для проектів, що не належать до Qt, не так вже й складно.

  • mocсинтаксичні доповнення: здебільшого для обробки сигналів, але також і пару приємніших циклічних конструкцій. Багато людей відчувають, що цей інструмент означає, що це вже не C ++; але IMHO, вони відчувають себе як трохи розумніші макроси. Гарне керування сигналом, що має слабке з'єднання, є величезною перевагою хорошого фреймворка, і це, як відомо, важко зробити на статичній мові. У сучасних C ++ це можливо з великою дозою шаблонів; але це було далеко не стандартно, коли Qt вперше отримав moc. Зрештою, якщо ви згодом хочете робити проекти, що не належать до Qt, спочатку перевірте, чи використовуєте ви будь-яку структуру та чи є у неї сигнали. Якщо так, то застосовуватиметься більшість того, що ви звикли робити з Qt, тому ніякого «шкоди» в навчанні Qt спочатку не буде.


Які поліпшення циклу задаються moc?
Василь Старинкевич

@Basile Starynkevitch: Можливо, він посилається на цикл foreach (яким я сильно користуюся). Це синтаксичне доповнення, але, ASAIK, це не має нічого спільного з moc. Отже, ви праві, що, можливо, відповідь слід сформулювати по-іншому.
Джорджіо

foreachце лише макрос .... (власне "псевдонім", Q_FOREACHвизначений в <Qt/qglobal.h>). Я не думаю, що mocце переробляє. І C ++ 11 має for (auto it : container)конструкцію!
Василь Старинкевич

@Basile Starynkevitch: Ймовірно, Qt знадобиться в глибокій переробці, якщо йому доведеться перейти до C ++ 11: Qt був розроблений для C ++ (а також намагався подолати деякі його обмеження), тому деякі з його рішень не потрібні C ++ 11.
Джорджіо

1
Я використовую і Qt, і Boost. Між двома бібліотеками існує велике перекриття, але вивчити Qt набагато простіше.
Джим У Техасі

4

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

Він також повністю підтримує інтернаціоналізацію, включаючи чудовий інструмент "Лінгвіст".

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

І так, Qt - це C ++, і ви можете змішати в стандартних і збільшити вміст у ваших серцях вмісту, якщо це допоможе вам почуватися краще.


3

Це погана ідея вивчати C ++ через Qt. Спочатку ви повинні вивчити мовні поняття, незалежні від будь-яких рамок, і саме цього навчатимуться книжки c ++, і вони мають рацію. В основному, "для і циклів у той час, як масиви, списки, покажчики" - це те, про що мова мови програмування. Додаткові функціональні можливості забезпечуються рамками. Як тільки ви вивчите мову програмування, ви зможете вивчити будь-які рамки, такі як Qt або MFC, побудовані за допомогою мови, так що програми можна швидко розробити. Що стосується Qt, то коли ви вивчаєте c ++, це відмінний фреймворк, який робить вас таким же продуктивним, як і будь-який розробник Java або .Net. Незабаром ви зможете розробляти додатки ios та Android за допомогою Qt.


2

Ну, я думаю, що найкращий спосіб вивчити C ++ - це використовувати САМО власний синтаксис (Стандартний C ++), тож ви зможете використовувати речі МОВА, а НЕ Qt (або будь-які інші рамки, бібліотеки ... тощо).

Чому? тому що як початківець, дивлячись на будь-який код C ++, змішаний з іншим кодом, що не стосується C ++ (Qt в даному випадку), ви не зможете побачити, що таке речі C ++, а що ні, скоріше це буде складнішим процесом.

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