Як створити графічний інтерфейс користувача на C ++? [зачинено]


270

Всі мої програми C ++ до цих пір використовували інтерфейс командного рядка, і єдиною іншою мовою, з якою я маю досвід, є PHP, яка не підтримує графічний інтерфейс.

З чого почати графічне програмування користувальницького інтерфейсу на C ++? Як створити його?


4
Це залежить. На яку операційну систему ви орієнтуєтесь? Багато фреймворків графічного інтерфейсу залежать від ОС.
Майкл Ратанапінта

3
Що ОС / платформа? Або якщо вам цікаво писати міжплатформові програми GUI, будь ласка, скажіть так - ці речі мають величезну
зміну

3
PHP підтримує написання програм GUI. Ви не можете запускати програми PHP з командного рядка, і є бібліотеки gui, такі як PHP-GTK gtk.php.net і PHP-Qt php-qt.org, які можуть допомогти Вам також можливо оцінити, для чого вам потрібно c ++. Писати графічні інтерфейси в c ++ важче, ніж на багатьох інших мовах, і ви, можливо, зможете зв’язати свій код C ++ в бібліотеки, на які можна дзвонити з Python або C # або PHP, або щось трохи простіше кодувати графічні інтерфейси.
kibibu

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

6
"Писати графічні інтерфейси в C ++ важче, ніж на багатьох інших мовах". На чому ви базуєте цю заяву?
piotr

Відповіді:


163

По суті, система вікон операційної системи відкриває деякі виклики API, які ви можете виконувати для виконання завдань, таких як створення вікна або наведення кнопки на вікно. В основному, ви отримуєте набір файлів заголовків, і ви можете викликати функції в імпортованих бібліотеках, як і у випадку з stdlib та printf.

Кожна операційна система має свій власний набір інструментів GUI, набір файлів заголовків та викликів API та власний спосіб робити. Існують також набір інструментів для різних платформ, таких як GTK , Qt та wxWidgets, які допомагають створювати програми, які працюють у будь-якому місці. Вони досягають цього, використовуючи однакові дзвінки API на кожній платформі, але іншу реалізацію для тих функцій API, які зводяться до викликів на рідній ОС OS.

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

  • перевірити чергу подій, чи є якісь нові події
  • якщо є, відправте ці події відповідним обробникам
  • коли ви закінчите, поверніть дохід до операційної системи (як правило, за допомогою спеціального дзвінка функції "сну" або "вибору" або "виходу")
  • тоді функція урожайності повернеться, коли операційна система виконана, а у вас ще один обхід циклу.

Є багато ресурсів щодо програмування на основі подій. Якщо у вас є досвід роботи з JavaScript, це та сама основна ідея, за винятком того, що ви, скриптер, не маєте доступу та контролю над самим циклом подій або якими подіями є, ваше єдине завдання - написати та зареєструвати обробники.

Вам слід пам’ятати, що програмування GUI неймовірно складна і загалом складна. Якщо у вас є можливість, насправді набагато простіше просто інтегрувати вбудований веб-сервер у свою програму та мати HTML / веб-інтерфейс. Єдине виняток, з яким я стикався - це Apple Cocoa + Xcode + Builder інтерфейсу + навчальні посібники, які роблять його легко найбільш доступним середовищем для людей, що не знають про програмування GUI, що я бачив.


" Насправді набагато простіше просто інтегрувати вбудований веб-сервер у свою програму та мати html / веб-інтерфейс ". Це залежить. Якщо ви хочете робити модні речі (складний інтерфейс користувача, користувацькі елементи управління, анімації тощо), так. Якщо ви просто хочете типовий графічний інтерфейс (зі звичайними елементами управління та відчуттям рідного), ні.
Жолудь

167

Існує безліч безкоштовних переносних бібліотек GUI , кожна з яких має свої сильні та слабкі сторони:

Особливо Qt має приємні підручники та інструменти, які допомагають вам розпочати роботу. Насолоджуйтесь!

Однак зауважте, що вам слід уникати конкретних функцій платформи, таких як API Win32 або MFC. Це непотрібно зв’язує вас на певній платформі і майже не має переваг.


25
Особисто я вважаю, що програмування до Win32 API прекрасне. Мені це подобається набагато більше, ніж використання Qt, і саме по собі це користь. Можливо, це тільки я.
mrduclaw

6
Мій особистий досвід якраз навпаки. API Win32 викликав у мене більше клопоту, ніж будь-який інший API.
vog

17
@mrduclaw, "Я думаю, що програмування для Win32 API прекрасне". Я СПРАВЮ за будь-яку ціну, щоб написати портативний код. (зауважте, я використав слово "спробувати", оскільки є винятки ...) Як написання непереносного коду вважається "красивим"?
Тревор Бойд Сміт

11
@Trevor Бойд Сміт: Я думаю, різні цілі. Майже жоден код, який я коли-небудь писав професійно, не міг би бути кросплатформенним, тому мене це ніколи не хвилювало.
mrduclaw

1
Питання про мільйон доларів полягає в тому, що хлопці, які роблять тренерів з ігор, просто постачають невеликий exe, а їхні програми мають гарний інтерфейс, тому мені цікаво, як вони будують інтерфейс, вони не постачають цим стороннім бібліотекам?
user889030

74

Незалежний алгоритм ОС " Створення програм GUI в C ++ в три етапи ":

  1. Встановити Qt Creator

    введіть тут опис зображення

  2. Створення нового проекту (додаток віджетів Qt)

    введіть тут опис зображення

  3. Побудуйте його.

Вітаємо, у вас перший графічний інтерфейс на C ++.

Тепер ви готові прочитати багато документації, щоб створити щось більш складне, ніж додаток GUI "Hello world".


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

23

Враховуючи коментар "скажіть Windows XP як приклад", ваші варіанти:

  • Взаємодійте безпосередньо з операційною системою через її API, що для Microsoft Windows є несподіваним викликом Windows API . Остаточним посиланням для WinAPI є веб- сайт Microsoft MSDN . Популярним онлайн-підручником для початківців для цього є навчальний посібник з програмування API Forger's Win32 . Класична книга для цього - Програмування Windows Чарльза Петцольда , 5-е видання .

  • Використовуйте для платформи (як з точки зору ОС, так і компілятора) конкретну бібліотеку, таку як MFC , яка перетворює WinAPI у клас C ++. Посилання на це знову-таки MSDN. Класичною книгою для цього є програмування Windows Джеффа Просіза з MFC, 2-е видання . Якщо ви використовуєте, скажімо, CodeGear C ++ Builder, то тут варіант VCL .

  • Використовуйте бібліотеку крос-платформ, такі як GTK + (обгортка C ++: gtkmm ), Qt , wxWidgets або FLTKякі обгортають API конкретної ОС. Переваги при цьому полягають у тому, що загалом ваша програма може бути складена для різних ОС без необхідності зміни вихідних кодів. Як уже було сказано, у кожного вони є свої сильні та слабкі сторони. Одне врахування при виборі, якою користуватися - це його ліцензія. Для наведених прикладів GTK + & gtkmm є ліцензією під LGPL, Qt знаходиться під різними ліцензіями, включаючи власницький варіант, wxWidgets є власною ліцензією wxWindows (з перейменом на ліцензію wxWidgets), а FLTK - за винятком LGPL. Для довідок, навчального посібника чи книг див. Докладні відомості на веб-сайті кожного.


9
MFC - це зло. Я вважаю за краще використовувати API WIN, якби у мене не було іншого вибору.
the_drow


18

Оскільки я вже був там, де ти зараз, я думаю, що можу "відповісти" тобі.

Справа в тому, що немає простого способу зробити графічний інтерфейс. GUI сильно залежать від конкретного коду платформи та ОС, тому слід почати читати документацію цільової платформи / ОС на API управління вікнами. Хороша річ: є багато бібліотек, які вирішують ці обмеження та абстрактні відмінності архітектури в єдиний багатоплатформенний API. Пропоновані раніше GTK та Qt - деякі з цих бібліотек.

Але навіть це трохи надто складно, оскільки вводиться багато нових понять, типів даних, просторів імен та класів, і все відразу. З цієї причини вони використовуються в комплекті з редактором GUI WYSIWYG. Вони в значній мірі роблять можливим програмування програмного забезпечення з графічними інтерфейсами.

Підсумовуючи це, також існують невільні "середовища" для розробки графічного інтерфейсу, такі як Visual Studio від Microsoft. Для тих, хто має досвід роботи з Delphi , Visual Studio може бути більш знайомим. Існують також безкоштовні альтернативи повному середовищу Visual Studio, що постачається від Microsoft: Visual Studio Express , що більш ніж достатньо для початку роботи з графічним інтерфейсом.


15

Я знайшов веб-сайт із "простим" підручником: http://www.winprog.org/tutorial/start.html


8
Це представляє API Win32, підхід дуже низького рівня до програмування графічного інтерфейсу, який прив'язує вас до платформи Windows. Я б цього не рекомендував.
vog

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

1
Я знаю, що це не ідеальне рішення, але воно допомагає дізнатися, як працює система gui в Windows. Я прочитав цей підручник пару років тому і тепер знаю, що таке цикл повідомлень і як він працює. Під час роботи з winforms в .net ці знання можуть стати в нагоді.
ZippyV

7
Якщо ви збираєтеся писати настільні додатки, заміни на те, як ОС дійсно надає та взаємодіє з користувачем, немає. Якщо ви просто користуєтеся бібліотекою, не розуміючи основ, то ви ніколи не зрозумієте, що відбувається. Навчившись трішки програмування wini gu32 низького рівня, буде витрачено час добре.
Джим у Техасі,

@Jim У Техасі: Я згоден, але цей "трохи низький рівень" слід вивчити після основ, тому я все ще вважаю цю рекомендацію неприйнятною для початківців.
vog

3

Створити інтерфейс .NET Windows GUI в C ++ легко.

Дивіться наступний підручник від MSDN . Ви можете завантажити все необхідне (Visual C ++ Express) безкоштовно .

Звичайно, ви прив'язуєте себе до .NET, але якщо ви просто граєте або потрібна лише програма для Windows, вам все буде добре (у більшості людей поки що є Windows ... поки що).


3

Я використовую FLTK, оскільки Qt не є безкоштовним. Я не вибираю wxWidgets , тому що мій перший тест із простим Hello, World! Програма створила виконуваний файл в 24 МБ, FLTK 0,8 Мб ...


4
Через зміни ліцензії QT я планую перейти на QT
pernecker

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