Често постављена питања

1. Место гткмм-а у свету

Шта је ГТК?

ГТК је скуп алата за ГУИ елементе, написан у језику Ц, који служи као основа за Гном пројекат као и за многе самосталне програме. ГТК је основа на којој је изграђен гткмм. Погледајте https://www.gtk.org.

Зашто се зове гткмм?

гткмм се првобитно звао гтк-- зато што се ГТК првобитно звао ГТК+ и имао је + у називу. Међутим, пошто претраживачи не индексирају лако --, пакет је углавном био познат под именом гткмм, и то је оно код чега смо остали.

Зашто користити гткмм уместо ГТК-а?

  • гткмм вам омогућава да пишете код користећи уобичајене Ц++ технике као што су енкапсулација, извођење и полиморфизам. Као Ц++ програмер вероватно већ увиђате да ово води ка јаснијем и боље организованом коду.
  • гткмм је безбеднији у погледу типова, па преводилац може открити грешке које би биле откривене тек при извршавању када се користи Ц. Ова употреба специфичних типова такође чини АПИ јаснијим јер можете видети који типови треба да се користе само гледањем у декларацију метода.
  • Наслеђивање се може користити за извођење нових елемената. Извођење нових елемената у ГТК Ц коду је толико компликовано и подложно грешкама да то скоро ниједан Ц програмер не ради. Као Ц++ програмер знате да је извођење суштинска објектно оријентисана техника.
  • Могу се користити примерци чланова, што поједностављује управљање меморијом. Свим ГТК Ц елементима се рукује помоћу показивача. Као Ц++ програмер знате да показиваче треба избегавати где год је то могуће.
  • Мање кода. ГТК Ц објектни модел користи префиксна имена функција и макрое за претварање типова. На пример: gtk_button_set_text(GTK_BUTTON(button), "sometext"); гткмм Ц++ код је краћи и јаснији. На пример: button.set_text("sometext");
  • Нема потребе за бригом о ГТК политици бројања референци.

Зашто користити libsigc++? Зашто не користити ГТК функције сигнала?

  • ГТК сигнали нису безбедни у погледу типова. Преводилац вам не може рећи да ли ваш повратни позив има погрешан број или тип аргумената или повратну вредност.
  • Они се могу користити само са функцијама или статичким методима. Са libsigc++ повратни позиви могу бити и методи примерака, користећи податке чланова одређеног објекта. Такође могу бити виртуелни методи које можете заменити у изведеној класи.

Зашто сами ГТК/Гном нису написани у Ц++-у?

  • Ц је једноставнији језик па га више људи познаје, нарочито на Јуниксу.
  • Ц се може обмотати било којим другим језиком, чинећи АПИ доступним већем броју програмера.
  • ГТК и Гном имају веома добро организован Ц код, много разумнији од већине Ц кода на који наилазимо. Ово је делимично због његове објектно оријентисане структуре засноване на Ц-у.

Зашто не користите Кут (Qt) ако толико волите Ц++?

Програмери гткмм-а (gtkmm) обично више воле гткмм него Кут, јер гткмм ради ствари на начин који више приличи Ц++-у. Кут потиче из времена када Ц++ и стандардна библиотека нису били стандардизовани или добро подржани од стране компајлера. Стога он дуплира много ствари које су сада у стандардној библиотеци, као што су контејнери и подаци о врстама. Најзначајније је то што су они изменили језик Ц++ како би обезбедили сигнале, тако да се Кут разреди не могу лако користити са разредима који нису из Кута. гткмм је могао да користи стандардни Ц++ за пружање сигнала без мењања језика Ц++.

Такође, гткмм и остали *mm модули омогућавају вам да изградите софтвер који тешње сарађује са Гномовом радном површи.

2. Колико је добар гткмм?

Под којим системима се покреће?

гткмм би требало да се покреће под било којим системом налик Јуниксу са инсталираним одговарајућим компајлерима и библиотекама. ГНУ-ов Ц++ компајлер (g++, део gcc-а) заједно са ГНУ-овим скупом алата (какав се налази на Линукс и *BSD системима) чине његово подразумевано окружење за изградњу. Такође се може изградити и користити на Виндоузу помоћу mingw алата за изградњу или MSVC-а.

Колико је потпун?

гткмм покушава да понуди сву функционалност коју нуди ГТК. То значи да би требало да будете у могућности да урадите било шта са гткмм-ом што је подржано у ГТК-у, и то једноставније. Ако нешто није покривено, желимо да знамо за то.

ГЛиб садржи разреде са сличном функционалношћу као стандардни Ц++ разреди, на пример GThread и GTree. Такви ГЛиб разреди нису обухваћени у glibmm-у.

Да ли гткmm користи стандардне Ц++ контејнере као што су std::string и std::vector?

Да, верујемо в поновно коришћење стандардног Ц++ кода где год је то могуће. Ово можда неће бити очигледно на први поглед јер гткмм има Glib::ustring који има скоро исто прочеље као std::string. Glib::ustring постоји јер Ц++ стандард не подржава добро ниске кодиране у УТФ-8.

Како се гткмм пореди са Кутом?

  • гткмм користи чист Ц++. Кут захтева проширења за Ц++ која се обрађују помоћу moc предпроцесора.
  • гткмм користи std::string, std::vector, итераторе итд. Кут има сопствене контејнере специфичне за Кут.
  • Са гткмм-ом се може користити нормално Ц++ управљање меморијом. Кут захтева да се са свим елементима рукује као са показивачима, и да се брисање елемената делегира родитељским елементима.
  • Чини се да је распоређивање елемената лакше у гткмм-у. У Куту су контејнери и распореди засебни разреди, а садржани елементи морају бити додати у оба.
  • гткмм АПИ тежи да буде изричитији. Понашање Кут разреда често зависи од имплицитних ефеката преклопљених конструктора.

3. Додатни подаци

Где се може разговарати о gtkmm-у?

Погледајте страницу за дискусију.

Каква документација постоји за гткмм?

Погледајте страницу са документацијом.

Где могу да пронађем неки пример кода?

Погледајте директоријум са примерима у модулу gtkmm-documentation. Већина њих се појављује у књизи за gtkmm.

4. Коришћење gtkmm-а

Које аргументе преводиоца треба да користим за превођење gtkmm програма?

Погледајте референтну документацију.

Како могу да добијем GTK објекат из gtkmm објекта?

Ако вам је потребна нека GTK функционалност која није подржана кроз gtkmm, можете позвати метод gobj() у одговарајућој класи, који ће вратити показивач на обичан C GTK објекат. Тада можете директно управљати овим C објектом као што бисте то радили у било ком GTK програму.

Како могу да умотам GTK елемент у gtkmm инстанцу?

Glib::wrap() ће вам дати показивач на gtkmm објекат. То је преоптерећена функција, па ће вам дати инстанцу одговарајуће класе.

Могу ли да користим C++ изузетке са gtkmm-ом?

Да, али постоје ограничења. Пошто обичан C не зна шта је C++ изузетак, можете користити изузетке у свом gtkmm коду све док нема C функција у вашем стеку позива између бацача и хватача. То значи да свој изузетак морате ухватити локално.

Бићете упозорени током извршавања о неухваћеним изузецима, а можете одредити и другачији руковалац за неухваћене изузетке. Неки gtkmm методи користе изузетке за пријављивање грешака. Врсте изузетака који могу бити бачени су наведени у референтној документацији тих метода.

Како могу да користим Cambalache или Glade са gtkmm-ом?

Погледајте поглавље Gtk::Builder у књизи за gtkmm. Cambalache замењује програм Glade. Glade се не може користити са GTK4/gtkmm4.

Шта ради Gtk::make_managed<T>(args)?

Ово значи Елемент садржалац ће обрисати овај подређени елемент. Користите га ако не желите да бринете о томе када треба обрисати динамички додељене елементе.

Како могу да научим о распоређивању елемеаната? Збуњен сам опцијама паковања.

Cambalache је одличан начин да видите шта се може урадити са GTK и Гномовим елементима. Користите Cambalache да истражите избор елемената и да видите како се они могу спојити.

Навикао сам на MFC (Microsoft Foundation Class Library). Где су Документ и Преглед?

Document/View (што је варијанта Model–View–Controller (MVC) обрасца за дизајн софтвера) није директно подржан од стране GTK-а. Међутим, класе Gtk::TextView и Gtk::ListView су подељене на модел и приказ.

Како да учитам слике за коришћење са gtkmm-ом?

Користите Gdk::Pixbuf и/или Gtk::Image. Оба су једноставна за коришћење и подржавају широк спектар врста датотека слика.

Да ли је gtkmm безбедан за нити?

Ни GTK ни gtkmm нису безбедни за нити. Сав GUI код мора да се извршава у истој нити. Ако би ваш програм могао имати користи од коришћења више нити, погледајте поглавље Вишенитни програми у књизи о gtkmm-у.