{"id":1204,"date":"2019-07-26T17:03:33","date_gmt":"2019-07-26T17:03:33","guid":{"rendered":"http:\/\/www.yazilimperver.com\/?p=1204"},"modified":"2019-08-23T18:12:57","modified_gmt":"2019-08-23T18:12:57","slug":"qt-bcom-serisi-2","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/","title":{"rendered":"QT (B\u00c7OM Serisi &#8211; 2)"},"content":{"rendered":"<p>Basit \u00c7oklu Oyun Motoru (B\u00c7OM) serisinin ikinci yaz\u0131s\u0131 ile ser\u00fcvenimize devam edelim. \u0130lk yaz\u0131ya a\u015fa\u011f\u0131daki adresten ula\u015fabilirsiniz:<\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"http:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/\">Basit \u00c7oklu Oyuncu Motoru \u2013 Snake v2.0 \u2013 Giri\u015f<\/a><\/strong><\/span><\/p>\n<p>Bu yaz\u0131m\u0131, geli\u015ftirece\u011fim uygulamalarda ve yaz\u0131lar\u0131mda bundan sonra s\u0131k\u00e7a bahsedece\u011fim <span style=\"color: #339966;\"><strong><a style=\"color: #339966;\" href=\"https:\/\/www.qt.io\/\">QT&#8217;ye<\/a> <\/strong><\/span>ay\u0131rmak istiyorum. Yaz\u0131n\u0131n kapsam\u0131 her \u015feyiyle QT&#8217;yi anlatmak de\u011fil ki ona zaten bir yaz\u0131 yetmez, apayr\u0131 bir yaz\u0131 dizi gerekir ki yeri geldik\u00e7e kullan\u0131ma g\u00f6re ilgili kabiliyetlerine yaz\u0131lar\u0131mda yer verece\u011fim. Duruma g\u00f6re kendine ait bir yaz\u0131 dizisi haline de \u00e7evirebiliriz \ud83d\ude09 Bu arada, gerek k\u00fct\u00fcphanenin kendisinin dok\u00fcmantasyonu, gerekse QT&#8217;ye ili\u015fkin kitaplar olduk\u00e7a \u00e7e\u015fitli ve yeterli materyal i\u00e7eriyor. Tak\u0131ld\u0131\u011f\u0131n\u0131zda google&#8217;a ba\u015fvurmaktan \u00e7ekinmeyin. Elbette, her yaz\u0131mda oldu\u011fu gibi, faydaland\u0131\u011f\u0131m, daha detayl\u0131 bilgiler i\u00e7eren ve benzeri kaynaklar\u0131 yaz\u0131m\u0131nda sonundaki kaynaklar ba\u015fl\u0131\u011f\u0131 alt\u0131nda sizler ile payla\u015f\u0131yor olaca\u011f\u0131m. Bunlar\u0131n da sizlere faydal\u0131 olaca\u011f\u0131n\u0131 umuyorum.<\/p>\n<p>Gelelim yaz\u0131m\u0131n kapsam\u0131na, bu yaz\u0131mda QT ile ilgili \u00e7ok fazla teknik detaya girmeden genel olarak QT tarih\u00e7esi, \u00f6ne \u00e7\u0131kan kabiliyetleri, en \u00f6nemli \u00f6zelliklerinden bahsetmeye \u00e7al\u0131\u015faca\u011f\u0131m. Bunu da yaparken asl\u0131nda bu ekosistemi kullan\u0131rken denk gelebilece\u011finiz kavramlar ve terimler \u00fczerinden yapmaya gayret g\u00f6sterece\u011fim. Son olarak kurulum ile yaz\u0131m\u0131 tamamlamay\u0131 planl\u0131yorum (ilk etapta Visual Studio kullanarak \u00f6rnek bir QT uygulamas\u0131 geli\u015ftirmeyi de planl\u0131yordum ama yaz\u0131n\u0131n gerek kapsam\u0131 gerekse uzun olmas\u0131 sebebi ile \u00e7\u0131karmaya karar verdim, tabi arada kod \u00f6rnekleri olacak). Ee o zaman, daha fazla vakit kaybetmeden ba\u015flayal\u0131m.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Giri\u015f<\/strong><\/span><\/h2>\n<p>\u00d6ncelikle QT&#8217;yi ingilizce harfleri ile seslendirenler oldu\u011fu gibi (&#8216;Q&#8217; ve &#8216;T&#8217;), &#8216;cute&#8217; \u015feklinde seslendirenler de mevcut. Hatta \u00e7o\u011funlukla, ikinci \u015fekilde seslendirilmekte. \u015eimdi k\u0131sa bir tarih\u00e7e. QT&#8217;nin tohumlar\u0131 Norve\u00e7&#8217;li iki \u00f6\u011frenci\u00a0taraf\u0131ndan 1990&#8217;l\u0131 y\u0131llarda bir tez \u00e7al\u0131\u015fmas\u0131 kapsam\u0131nda at\u0131lm\u0131\u015f.<\/p>\n<p id=\"tzmXnEQ\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1272 \" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360f88b7c34.png\" alt=\"\" width=\"246\" height=\"180\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360f88b7c34.png 907w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360f88b7c34-300x219.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360f88b7c34-768x561.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360f88b7c34-500x365.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360f88b7c34-150x109.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360f88b7c34-400x292.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360f88b7c34-800x584.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360f88b7c34-200x146.png 200w\" sizes=\"auto, (max-width: 246px) 100vw, 246px\" \/><\/p>\n<p>\u0130lk geli\u015ftirilme amac\u0131 da Unix ve Mac OS i\u00e7in kullan\u0131labilecek bir grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fc geli\u015ftirmekmi\u015f ve bunu kolay ve e\u011flenceli bir \u015fekilde yapmak (o zaman\u0131n \u015fartlar\u0131nda ger\u00e7ekten \u00f6nemli bir hedef). Bunu yaparken de, o zamanlar olduk\u00e7a pop\u00fcler olan Nesne Y\u00f6nelimli Yaz\u0131l\u0131m geli\u015ftirme ilkelerini kendilerine \u015fiar edinmi\u015fler. Asl\u0131nda bakarsan\u0131z, k\u00fct\u00fcphanenin geldi\u011fi nokta da g\u00f6z \u00f6n\u00fcne al\u0131nd\u0131\u011f\u0131nda, ne kadar do\u011fru bir motivasyon ve hedef belirlendi\u011fini g\u00f6receksiniz. O zamanlar bu arkada\u015flar\u0131n QT anlam\u0131nda ortaya koyduklar\u0131m\u0131 ilk tasar\u0131mlardan birisi a\u015fa\u011f\u0131daki gibidir. Bunu payla\u015f\u0131yorum, \u00e7\u00fcnk\u00fc QT kulland\u0131k\u00e7a g\u00f6rece\u011finiz \u00fczere bu s\u0131n\u0131flar\u0131n bir \u00e7o\u011fu halen kullan\u0131l\u0131yor \ud83d\ude42<\/p>\n<p id=\"QXQyyuy\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1269 \" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360e6a5e0b6.png\" alt=\"\" width=\"790\" height=\"456\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360e6a5e0b6.png 1751w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360e6a5e0b6-300x173.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360e6a5e0b6-768x443.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360e6a5e0b6-1024x590.png 1024w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360e6a5e0b6-500x288.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360e6a5e0b6-150x86.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360e6a5e0b6-1200x691.png 1200w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360e6a5e0b6-400x230.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360e6a5e0b6-800x461.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d360e6a5e0b6-200x115.png 200w\" sizes=\"auto, (max-width: 790px) 100vw, 790px\" \/><\/p>\n<p>\u00d6zet olarak QT yakla\u015f\u0131k olarak 25-28 y\u0131ll\u0131k bir ge\u00e7mi\u015fe sahip, olduk\u00e7a olgun ve yayg\u0131n olarak kullan\u0131lmakta olan bir k\u00fct\u00fcphane seti. Son olarak 5.13 s\u00fcr\u00fcm\u00fc yay\u0131nlanm\u0131\u015f durumda. A\u015fa\u011f\u0131da da, bu zamana kadar ge\u00e7mi\u015fi \u00f6zetleyen bir resim g\u00f6rebilirsiniz (t\u0131klad\u0131\u011f\u0131n\u0131z takdirde daha detayl\u0131 bir g\u00f6r\u00fcn\u00fcm g\u00f6receksiniz):<\/p>\n<p><a href=\"https:\/\/d21tv0wm5mksdn.cloudfront.net\/wp-content\/uploads\/2015\/05\/Qt-infographic-online.jpg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone\" src=\"https:\/\/d21tv0wm5mksdn.cloudfront.net\/wp-content\/uploads\/2015\/05\/Qt-infographic-online.jpg\" alt=\"\" width=\"626\" height=\"587\" \/><\/a><\/p>\n<h2><span style=\"color: #0000ff;\"><strong>QT Nedir?<\/strong><\/span><\/h2>\n<p>Peki QT nedir ve neden kullan\u0131labilir? \u00d6ncelikle neden kullan\u0131labilir sorusuna bakacak olursak. A\u00e7\u0131k\u00e7as\u0131 bu noktada a\u015fa\u011f\u0131daki hususlar\u0131 de\u011ferlendirmek de fayda var. Bunlardan bir yada birden fazlas\u0131 sizin i\u00e7in \u00f6nemli ise, QT sizin i\u00e7in do\u011fru bir tercih olacakt\u0131r.<\/p>\n<ul>\n<li>C++ tabanl\u0131 \u00e7oklu platform deste\u011fi sunan (bunlardan baz\u0131lar\u0131 Linux, MacOS, Windows, Android ve iOS) bir Grafiksel Kullan\u0131c\u0131 Aray\u00fcz\u00fc k\u00fct\u00fcphanesi,<\/li>\n<li>C++ tabanl\u0131 Grafiksel Kullan\u0131c\u0131 Aray\u00fcz\u00fc k\u00fct\u00fcphanesi :),<\/li>\n<li>Grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fc bile\u015fenleri yan\u0131nda a\u011f programlama, veri taban\u0131 eri\u015fimi ve benzeri kabiliyetleri \u00e7oklu platformlarda kullanabilme,<\/li>\n<li>Olgun bir C++ k\u00fct\u00fcphanesi ve yayg\u0131n kullan\u0131c\u0131 kitlesi,<\/li>\n<li>Bildirimsel (&#8220;<em>declarative<\/em>&#8220;) bir dil kullanarak (bu durumda QML oluyor) h\u0131zl\u0131 grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fc geli\u015ftirme,<\/li>\n<li>C++ yan\u0131nda farkl\u0131 dilleri kullanarak da (Java, Phyton, Ruby, C#, vb.) aray\u00fczler geli\u015ftirmeye olanak sa\u011flama,<\/li>\n<li>QT&#8217;yi \u00e7ok duyuyorum ve nedir merak ediyorum.<\/li>\n<\/ul>\n<p>Art\u0131k bu noktada QT nin kapsam\u0131 hakk\u0131nda bir fikriniz oldu\u011funu d\u00fc\u015f\u00fcn\u00fcyorum. Her ne kadar a\u011f\u0131rl\u0131kl\u0131 olarak C++ kullanarak, grafiksel kullan\u0131c\u0131 aray\u00fcz tabanl\u0131 uygulamalar geli\u015ftirme i\u00e7in kullan\u0131l\u0131yor olsa da, kendi ifadeleri ile &#8220;<em>Complete Cross Software Development Framework for Desktop, Mobile and Embedded Systems<\/em>&#8220;, yani hem masa\u00fcst\u00fc hem mobil hem de g\u00f6m\u00fcl\u00fc sistemler i\u00e7in yaz\u0131l\u0131m geli\u015ftirme \u00e7er\u00e7evesi olarak tan\u0131mlanabilir.<\/p>\n<p>QT k\u00fct\u00fcphanesi b\u00fct\u00fcn d\u00fcnyada \u00e7ok \u00e7e\u015fitli firmalar taraf\u0131ndan kullan\u0131lmakta. Bunlardan bir k\u0131sm\u0131 KDE, Opera, VLC, Google Earth, EASA olarak say\u0131labilir.<\/p>\n<p>QT sundu\u011fu kabiliyetleri \u00e7e\u015fitli mod\u00fcller alt\u0131nda topluyor (Core, Network, GUI, vb.).\u00a0 Bunlar\u0131n yan\u0131nda gerek aray\u00fczleri geli\u015ftirmek, gerekse \u00e7oklu dil deste\u011fi, uygulama olu\u015fturma (qmake), kurulum dosyalar\u0131 haz\u0131rlama ve benzeri i\u015fler i\u00e7in de ara\u00e7lar sunmakta. Benzer \u015fekilde VS gibi geli\u015ftirme ortamlar\u0131 i\u00e7in eklentileri de mevcut. \u00d6n\u00fcm\u00fczdeki ba\u015fl\u0131klarda bunlara s\u0131ra ile de\u011finece\u011fim. B\u00fct\u00fcn bunlar\u0131n yan\u0131nda da, en \u00e7ok ba\u015fvuraca\u011f\u0131n\u0131z (ba\u015fvurman\u0131z\u0131 \u015fiddetle tavsiye etti\u011fim) ise &#8220;<strong>Qt Assistant<\/strong>&#8221; arac\u0131d\u0131r. Her t\u00fcrl\u00fc API, \u00f6rnek kod ve benzeri dok\u00fcmantasyona \u00e7evrim i\u00e7i eri\u015fime ihtiya\u00e7 duymadan h\u0131zl\u0131 bir \u015fekilde ula\u015fabilirsiniz. Bunun d\u0131\u015f\u0131nda QT&#8217;ye ili\u015fkin internet \u00fczerinde de bir \u00e7ok kayna\u011fa kolayca ula\u015fabilirsiniz.<\/p>\n<p>QT&#8217;yi kullan\u0131rken dikkat etmeniz gereken bir di\u011fer husus da lisanslama. Ger\u00e7i buna ayr\u0131 bir yaz\u0131 da ayr\u0131labilir, ama k\u0131saca bahsedecek olursak, QT iki lisans alt\u0131nda sunuluyor bunlar Ticari ve A\u00e7\u0131k Kaynak Lisanslar. Ticari lisans ile her t\u00fcrl\u00fc da\u011f\u0131t\u0131m ve kullan\u0131m haklar\u0131n\u0131 elde ediyorsunuz, ayr\u0131ca teknik destek ve benzeri konularda firma size yard\u0131mc\u0131 oluyor. Bunun d\u0131\u015f\u0131ndaki kullan\u0131mlarda ise a\u00e7\u0131k kaynakl\u0131 lisans (GPL, LGPLv3) kullan\u0131labilir. Burada da, kulland\u0131\u011f\u0131n\u0131z k\u00fct\u00fcphane ve ara\u00e7lara g\u00f6re lisanslamalar farkl\u0131l\u0131k g\u00f6sterebiliyor. Hatta s\u00fcr\u00fcmler aras\u0131nda da farkl\u0131l\u0131klar mevcut. Bunun ile ilgili olarak <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/www.qt.io\/download\">indirme sayfas\u0131nda<\/a><\/span><\/strong> detayl\u0131 bilgi bulabilirsiniz.<\/p>\n<p>Bunun yan\u0131nda QT&#8217;ye ili\u015fkin genel hususlar i\u00e7in de a\u015fa\u011f\u0131daki sayfa olduk\u00e7a bilgilendirici ve y\u00f6nlendirici olacakt\u0131r.<\/p>\n<p><strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/overviews-main.html#\">https:\/\/doc.qt.io\/qt-5\/overviews-main.html#<\/a><\/span><\/strong><\/p>\n<h2><span style=\"color: #0000ff;\"><strong>\u00d6nemli Kavramlar<\/strong><\/span><\/h2>\n<p>Evet geldik, QT ile ilgili bundan sonra s\u0131k\u00e7a kar\u015f\u0131la\u015faca\u011f\u0131n\u0131z ve bence \u00f6nemli oldu\u011funu d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm kavramlara. Elbette bunlar b\u00fct\u00fcn bir k\u00fcmeyi kapsam\u0131yor ama QT ile uygulama geli\u015ftirecekseniz bunlara g\u00f6z atmakta fayda var. \u00d6ncelikle k\u00fct\u00fcphanenin genel yap\u0131s\u0131na ili\u015fkin bir tak\u0131m bilgiler verece\u011fim, yaz\u0131m\u0131n ba\u015f\u0131nda neden QT kullanman\u0131z gerekti\u011fine g\u00f6z atm\u0131\u015ft\u0131k. \u015eimdi bu k\u00fct\u00fcphanenin \u00f6nemli \u00f6zelliklerine k\u0131saca (yaz\u0131 da k\u0131sa olacakt\u0131 \ud83d\ude42 g\u00f6z ataca\u011f\u0131z.<br \/>\nQT&#8217;yi anlamak i\u00e7in, \u00f6rnek bir QT uygulama ak\u0131\u015f\u0131n\u0131 anlamak olduk\u00e7a \u00f6nemli. Bu ba\u011flamda da \u00f6ncelikli olarak bakmam\u0131z gereken iki husus, olaylar ve bu olaylar\u0131n asl\u0131nda y\u00f6netildi\u011fi ana olay d\u00f6ng\u00fcs\u00fc olacak. QT bir \u00e7ok farkl\u0131 Grafiksel Kullan\u0131c\u0131 Aray\u00fcz\u00fc (GKA) k\u00fct\u00fcphanesi gibi olay g\u00fcd\u00fcml\u00fc bir alt yap\u0131ya sahip. Peki bu ne demek? \u015eu demek, uygulaman\u0131n genel ak\u0131\u015f\u0131n\u0131, ortaya \u00e7\u0131kan olaylar belirliyor (\u00d6r. bir d\u00fc\u011fmeye bas\u0131lmas\u0131, pencerenin g\u00f6sterilmesi ya da kapanmas\u0131, vb.).<br \/>\nQT i\u00e7erisinde bu olaylar <em>QEvent<\/em> temel s\u0131n\u0131f\u0131 ile temsil edilmekte ve olay\u0131n tipine g\u00f6re \u00f6zelle\u015fmektedir (\u00d6r. klavye olaylar\u0131 i\u00e7in <em>QKeyEvent<\/em>, fare olaylar\u0131 i\u00e7in de <em>QMouseEvent<\/em>). Bu olaylar\u0131n her birinde, bu olaylar\u0131 i\u015fleyecek hedef nesneler ve olaya ili\u015fkin parametreler bulunur. Bu hedef nesneler bu olaylar\u0131n kotar\u0131lmas\u0131na ili\u015fkin mant\u0131\u011f\u0131 kendi i\u00e7lerinde bar\u0131nd\u0131r\u0131r ve gerekli i\u015fleri ger\u00e7ekle\u015ftirirler. Bu olaylar hem uygulaman\u0131n i\u00e7erisinden (d\u00fc\u011fmeye bas\u0131lmas\u0131) hem de d\u0131\u015far\u0131dan (klavye\/fare olaylar\u0131) tetiklenebilir.<br \/>\nBu olaylar\u0131n iletilmesi i\u00e7in kullan\u0131lan iki temel y\u00f6ntem (API) vard\u0131r bunlar: <em>sendEvent<\/em> ve bir kuyruk kullanan <em>postEvent<\/em>. Yukar\u0131da da bahsetti\u011fim gibi, bir d\u00f6ng\u00fc bu olaylar\u0131 tek tek i\u015fleyerek da\u011f\u0131t\u0131r. A\u015fa\u011f\u0131da bu kullan\u0131mlara ili\u015fkin \u00f6rnek kullan\u0131mlar\u0131 ve d\u00f6ng\u00fcy\u00fc g\u00f6rebilirsiniz. Tabi \u015funu da ifade etmekte fayda var, normal \u015fartlarda, \u00e7o\u011fu zaman haz\u0131r QT s\u0131n\u0131flar\u0131n\u0131 ya da g\u00f6rsel bile\u015fenleri kullanaca\u011f\u0131n\u0131z i\u00e7in bu seviyede API \u00e7a\u011fr\u0131lar\u0131 ile u\u011fra\u015fm\u0131yor olacaks\u0131n\u0131z ama genel mant\u0131\u011f\u0131 anlatmak ad\u0131na bunlar\u0131n \u00f6nemli oldu\u011funu d\u00fc\u015f\u00fcn\u00fcyorum.<\/p>\n<pre class=\"lang:c++ decode:true\">\/\/ Fare olay\u0131n\u0131 g\u00f6ndermek i\u00e7in\r\nQMouseEvent event(QEvent::MouseButtonPress, pos, 0, 0, 0);\r\nQApplication::sendEvent(mainWindow, &amp;event);\r\n\r\n\/\/ Klavye olay\u0131n\u0131 g\u00f6ndermek i\u00e7in\r\nQApplication::postEvent(mainWin, new QKeyEvent(QEvent::KeyPress, Key_X, 'X', 0));\r\n\r\n\/\/ \u00d6rnek bir olay d\u00f6ng\u00fcs\u00fc nasil g\u00f6r\u00fcn\u00fcr?\r\nwhile (is_active)\r\n{\r\n   while (!event_queue_is_empty)\r\n      dispatch_next_event();\r\n\r\n   wait_for_more_events();\r\n}<\/pre>\n<p>yukar\u0131daki d\u00f6ng\u00fc, uygulamadan \u00e7\u0131k\u0131lmas\u0131na ili\u015fkin API&#8217;ler (<em>QCoreApplication::exit()<\/em> veya <em>QCoreApplication::quit())<\/em> \u00e7a\u011fr\u0131lana kadar devam eder.<br \/>\nYava\u015f yava\u015f, as\u0131l varmak istedi\u011fimiz noktaya geliyoruz. \u015eimdi herhangi bir QT uygulamas\u0131n\u0131 a\u00e7t\u0131\u011f\u0131n\u0131zda a\u015fa\u011f\u0131daki gibi bir kod dizilimi g\u00f6receksiniz:<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;QCoreApplication&gt;\r\n\r\nint main(int argc, char* argv[]) \r\n{\r\n   QCoreApplication app(argc, argv);\r\n\r\n   \/\/ Gerekli hazirliklar\r\n   return app.exec();\r\n}<\/pre>\n<p>i\u015fte burada bulunan <em>exec()<\/em> API&#8217;si ile birlikte uygulaman\u0131n ana olay d\u00f6ng\u00fcs\u00fc ba\u015flar. Yukar\u0131da bahsetti\u011fim olay mekanizmas\u0131n\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in, birazdan anlataca\u011f\u0131m sinyal\/slot mekanizmalar\u0131n\u0131n \u00e7al\u0131\u015fmas\u0131 i\u00e7in, bu d\u00f6ng\u00fcn\u00fcn \u00e7al\u0131\u015fmas\u0131 gerekmektedir. Ba\u015fka neler buna ihtiya\u00e7 duyar diyecek olursan\u0131z: g\u00f6rsel bile\u015fenler, zamanlay\u0131c\u0131lar, a\u011f kabiliyetleri.<br \/>\nBurada dikkat edilmesi gereken hususlardan birisi de, pahal\u0131 i\u015fleri yapt\u0131\u011f\u0131n\u0131z yer. E\u011fer bu tarz olaylar\u0131n kotaranlar, bu kotar\u0131c\u0131 metotlar i\u00e7erisinde \u00e7ok uzun i\u015flemler yaparlarsa, bu genel olay d\u00f6ng\u00fcs\u00fcn\u00fc, ilgili i\u015flem bitene kadar bloklar. Bunu \u00f6nlemek i\u00e7in bu tarz i\u015fleri ayr\u0131 bir thread&#8217;de kotarmakta fayda var. Bu konuda da daha detayl\u0131 bilgi edinmek i\u00e7in <span style=\"color: #008000;\"><strong>https:\/\/wiki.qt.io\/Threads_Events_QObjects#Events_and_the_event_loop<\/strong><\/span> kayna\u011f\u0131 olduk\u00e7a yeterli, bir g\u00f6z atman\u0131z\u0131 tavsiye ediyorum. Burada ayr\u0131ca thread&#8217;lere ili\u015fkin bilgiler de bulunmakta. \u015eimdi de di\u011fer \u00f6nemli kavramlara bir g\u00f6z atal\u0131m.<\/p>\n<h3><span style=\"color: #0000ff;\"><strong>Meta-Nesne Sistem (<em>Meta-Object System<\/em>)<\/strong><\/span><\/h3>\n<p>Olaylar ve olay d\u00f6ng\u00fclerinden sonra kar\u015f\u0131n\u0131za \u00e7\u0131kacak olan bir di\u011fer \u00f6nemli kavram da Meta-Nesne Sistemidir. Asl\u0131nda e\u011fer QT ile yaz\u0131lm\u0131\u015f herhangi bir kodu derledi\u011finiz zaman, kendi yazd\u0131\u011f\u0131n\u0131 dosyalar\u0131n ve kodlar\u0131n yan\u0131nda, otomatik olarak \u00fcretilmi\u015f &#8220;moc_&#8221; uzant\u0131l\u0131 dosyalar ve otomatik olarak \u00fcretilmi\u015f kodlar\u0131 g\u00f6receksiniz ki, bunlar da QT uygulamas\u0131 olu\u015fturulurken, nihai uygulamaya dahil olurlar. Bu i\u015ften sorumlu olan ara\u00e7 ise Meta-Nesne Derleyicisi (<em>Meta-Object Compiler)<\/em> d\u0131r, k\u0131saca MOC diye de kullan\u0131l\u0131r. Bu derleyici yazm\u0131\u015f oldu\u011funu kodlar\u0131 tarar ve QT&#8217;nin <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/metaobjects.html\">C++ i\u00e7in olan eklentilerin<\/a>i<\/strong><\/span> tarar (\u00f6r. i\u00e7erisinde buldu\u011fu Q_OBJECT gibi anahtar kelimelere bakar) ve bunlara g\u00f6re bahsedilen dosyalar\u0131 otomatik olarak olu\u015fturur. Bu a\u015famada asl\u0131nda, uygulamay\u0131 olu\u015fturdu\u011funuz derleme a\u015famas\u0131na benzer fakat ek bir a\u015famad\u0131r. Burada olu\u015fturulan dosyalar ne yapar diye soracak olursan\u0131z? Bunlardan en \u00f6nemlileri sinyal\/slot mekanizmalar\u0131, \u00e7al\u0131\u015fma zaman\u0131 tip bilgisi (RTTI) kabiliyetler ve dinamik \u00f6zellik sistemidir. MOC sisteminin de ilk etapta olu\u015fturulmas\u0131n\u0131n sebebi de sinyal ve slot mekanizmas\u0131 imi\u015f (bunu ayr\u0131 bir ba\u015fl\u0131k alt\u0131nda irdeleyece\u011fim). MOC ile ilgili daha detayl\u0131 bilgi ve burada bahsetmedi\u011fim bir tak\u0131m kabiliyetleri i\u00e7in\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/moc.html\"><strong><span style=\"color: #008000;\">https:\/\/doc.qt.io\/qt-5\/moc.html<\/span><\/strong><\/a> adresine bakabilirsiniz.<\/p>\n<p>\u015eimdi gelelim bu QObject s\u0131n\u0131f\u0131na. QT&#8217;de en \u00e7ok duyaca\u011f\u0131n\u0131z s\u0131n\u0131flardan birisi de QObject&#8217;tir. \u00d6ncelikle QT&#8217;ye dair \u015fu ana kadar ve bundan sonra bahsedece\u011fim bir \u00e7ok kabiliyeti (\u00f6r. sinyal\/slot) kullanabilmeniz i\u00e7in, s\u0131n\u0131flar\u0131n\u0131z\u0131 QObject&#8217;ten t\u00fcretmeniz gerekmekte ve genelde Q_OBJECT makrosunu s\u0131n\u0131f\u0131n\u0131z i\u00e7erisine yerle\u015ftirmeniz. Q_OBJECT MOC&#8217;un bakt\u0131\u011f\u0131 en \u00f6nemli anahtar kelimedir. \u015eimdi, QT kullanacak \u00f6rnek bir s\u0131n\u0131f tan\u0131mlayal\u0131m birlikte:<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;QObject&gt;\r\n\r\nclass MyQtClass : public QObject \r\n{\r\n  Q_OBJECT\r\n  \/\/ \u00f6zellikler\r\n\r\npublic:\r\n  MyQtClass ();\r\n\r\n  \/\/ fonksiyonlar ve \u00fcye de\u011fi\u015fkenler\r\n};<\/pre>\n<p>QT i\u00e7in tan\u0131mlayaca\u011f\u0131n\u0131z ve haz\u0131r gelen b\u00fct\u00fcn s\u0131n\u0131flar\u0131n genel yap\u0131s\u0131 basit olarak bu \u015fekildedir. QObject&#8217;ten s\u0131n\u0131f\u0131m\u0131z\u0131 t\u00fcretip, Q_OBJECT ekleyerek, art\u0131k s\u0131n\u0131f\u0131m\u0131z\u0131 MOC sistemi taraf\u0131ndan tan\u0131n\u0131r hale getirdik. Bu sayede uygulamam\u0131z\u0131 derlerken MOC da bu dosyaya bakarak ek dosyalar\u0131 \u00fcretecek. Ayr\u0131ca bu s\u0131n\u0131fa ili\u015fkin\u00a0<em>meta-nesne <\/em>bilgilerine de \u00e7al\u0131\u015fma zaman\u0131nda a\u015fa\u011f\u0131daki gibi ula\u015fabilece\u011fiz:<\/p>\n<pre class=\"lang:c++ decode:true\">MyQtClass myclass;\r\nqDebug() &lt;&lt; myclass.metaObject()-&gt;className();<\/pre>\n<p>Tabi bunu zaten RTTI arac\u0131l\u0131\u011f\u0131 ile &#8220;typeid(myclass).name()&#8221; \u00e7a\u011fr\u0131s\u0131 ile yapabilirdiniz ama QT bunu RTTI deste\u011fi olmadan da yapabilmekte. Bu da bize bu deste\u011fi olmayan veya bunun kapat\u0131ld\u0131\u011f\u0131 durumlarda da bu kabiliyeti kullanabilece\u011fimiz anlam\u0131na geliyor. Bunun yan\u0131nda, yine RTTI&#8217;\u0131 aktifle\u015ftirmeden &#8220;<em>qobject_cast&lt;&gt;()&#8221; &#8216;i dynamic_cast<\/em> gibi kullanabilirsiniz.<\/p>\n<p>K\u0131saca s\u0131n\u0131f\u0131m\u0131z\u0131 yukar\u0131daki hale getirince, a\u015fa\u011f\u0131daki nimetlerden faydalanabiliyoruz:<\/p>\n<ul>\n<li>RTTI deste\u011fi olmazsa bile s\u0131n\u0131f\u0131m\u0131za ili\u015fkin &#8220;meta-nesne&#8221; bilgilerine eri\u015fim (s\u0131n\u0131f ismi d\u00f6n\u00fclmesi, \u00e7al\u0131\u015fma zaman\u0131nda <em>newInstance<\/em>() API&#8217;si ile bir nesnesinin olu\u015fturulmas\u0131, <em>inherits<\/em>() API&#8217;si ile nesnenin verilen s\u0131n\u0131flardan t\u00fcretilip t\u00fcretilmedi\u011finin kontrol\u00fc),\n<ul>\n<li>\n<pre class=\"lang:c++ decode:true\">myQtClassInstance.metaObject()-&gt;className(); =&gt; sinif ismini d\u00f6ner,<\/pre>\n<\/li>\n<li>\n<pre class=\"lang:c++ decode:true cpp prettyprint prettyprinted \">QTimer&lt;\/a&gt; *timer = new QTimer;     \/\/ QTimer QObject'ten t\u00fcrer\r\ntimer-&gt;inherits(\"QTimer\");          \/\/ true d\u00f6ner\r\ntimer-&gt;inherits(\"QObject\");         \/\/ true d\u00f6ner\r\ntimer-&gt;inherits(\"QAbstractButton\"); \/\/ false d\u00f6ner<\/pre>\n<\/li>\n<\/ul>\n<\/li>\n<li>tr() API&#8217;si arac\u0131l\u0131\u011f\u0131 ile farkl\u0131 dil deste\u011fi kazand\u0131r\u0131labilir,<\/li>\n<li>Bu s\u0131n\u0131flar art\u0131k yukar\u0131da bahsetti\u011fimiz olaylar\u0131 kullanabilirler,<\/li>\n<li>Dinamik \u00f6zellik sistemini kullanabilirler (bir sonraki ba\u015fl\u0131kta anlataca\u011f\u0131m),<\/li>\n<li>En \u00f6nemlisi de, nesneler aras\u0131 haberle\u015fme i\u00e7in sinyal\/slot mekanizmas\u0131n\u0131 (ilerleyen ba\u015fl\u0131klarda anlataca\u011f\u0131m) kullanabilirler.<\/li>\n<\/ul>\n<p>Tabi burada \u015funu da belirtmekte fayda var ki, e\u011fer yukar\u0131da sayd\u0131\u011f\u0131m kabiliyete ihtiyac\u0131n\u0131z olmayacaksa, QObject&#8217;ten t\u00fcretmek \u00e7ok da ucuz de\u011fil ve siz bu \u015fekilde asl\u0131nda kullanmayaca\u011f\u0131n\u0131z bir tak\u0131m kabiliyetleri y\u00fcklemi\u015f oluyorsunuz ki bunun bir maliyeti olacakt\u0131r. Bu sebeple bunlar\u0131 kullanmayacaksan\u0131z ya da basit veri s\u0131n\u0131flar\u0131 i\u00e7in bu yakla\u015f\u0131m\u0131 uygulamay\u0131n\u0131z.<\/p>\n<p>Son olarak Visual Studio eklentisini kurdu\u011funuz zaman, VS, bu tarz dosyalar\u0131n MOC taraf\u0131ndan \u00e7a\u011fr\u0131lmas\u0131n\u0131 otomatik olarak tetikler. \u0130lgili ad\u0131mlar\u0131 \u00e7\u0131kt\u0131 penceresinden g\u00f6rebilirsiniz.<\/p>\n<p>Meta-Nesne sistemine ve MOC&#8217;a ili\u015fkin daha detayl\u0131 bilgilere ula\u015fmak i\u00e7in a\u015fa\u011f\u0131daki adresleri hi\u00e7 ac\u0131madan s\u00f6m\u00fcrebilirsiniz.<\/p>\n<p><strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/metaobjects.html\">https:\/\/doc.qt.io\/qt-5\/metaobjects.html<\/a><\/span><\/strong><\/p>\n<p><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/moc.html\">https:\/\/doc.qt.io\/qt-5\/moc.html<\/a><\/strong><\/span><\/p>\n<h3><span style=\"color: #0000ff;\"><strong>Dinamik \u00f6zellik sistemi (<em>Property System<\/em>)<\/strong><\/span><\/h3>\n<p>QT, s\u0131n\u0131flar i\u00e7in (tabi bir \u00f6nceki ba\u015fl\u0131kta anlat\u0131lan \u015fekilde tan\u0131mlanm\u0131\u015f) g\u00fc\u00e7l\u00fc bir \u00f6zellik sistemi de sunmaktad\u0131r. Bu tarz kabiliyetler baz\u0131 derleyiciler taraf\u0131ndan \u00f6zel anahtar kelimeler ile sa\u011flan\u0131yorken, QT bunu, derleyici ve platformdan ba\u011f\u0131ms\u0131z bir \u015fekilde sunabilmekte. En basitinden bu sayede \u00e7al\u0131\u015fma zaman\u0131nda a\u015fa\u011f\u0131daki gibi kullan\u0131m m\u00fcmk\u00fcn olmakta:<\/p>\n<pre class=\"lang:c++ decode:true \">MyQtClass myQtClass;\r\nmyQtClass.setProperty(\"text\",\"Hello world\");\r\nqDebug() &lt;&lt; myQtClass.property(\"text\").toString();<\/pre>\n<p>Bu sistem ile bu tarz bilgileri tutmak i\u00e7in s\u0131n\u0131f i\u00e7erisinde bir de\u011fi\u015fken tan\u0131mlaman\u0131za gerek kalm\u0131yor. Ayr\u0131ca kaynaklar\u0131n ifade etti\u011fine g\u00f6re bu sayede, bu \u00f6zellikle QML taraf\u0131ndan da kullan\u0131labiliyormu\u015f. Ayr\u0131ca \u00e7al\u0131\u015fma zaman\u0131nda ekleme ya da saklama ihtiyac\u0131 duydu\u011funuz bilgileri bu sayede g\u00fcvenli bir \u015fekilde tutabileceksiniz. Bu tarz dinamik olarak \u00f6zellik eklemenin yan\u0131nda s\u0131n\u0131f\u0131n\u0131z\u0131 deklare ederken de bu \u00f6zellikleri ekleyebilirsiniz. Bu sayede bu \u00f6zelliklere ili\u015fkin bir tak\u0131m k\u0131s\u0131tlamalar ve kontroller de eklenebilmekte. Hemen \u00f6rnek bir kod \u00fczerinden bunun kullan\u0131m\u0131na bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true \">class MyQtClass : public QObject {\r\n  ...\r\n  Q_PROPERTY(QString name READ name WRITE setName)\r\n  Q_PROPERTY(QString creator READ creator WRITE setCreator)\r\n  ...\r\npublic:\r\n  ...\r\n  const QString&amp; name() const;\r\n  void setName(QString name);\r\n\r\n  const QString&amp; creator() const;\r\n  void setCreator(QString creator);\r\n\r\nprivate:\r\n  QString m_name{\"Fatih\"};\r\n  QString m_creator{\"Yazilimperver\"};\r\n};<\/pre>\n<p>Yukar\u0131daki eklentiler ile birlikte iki tane getter\/setter metodu eklemi\u015f olduk. Bunlar\u0131n nas\u0131l kullanaca\u011f\u0131m\u0131za gelirsek a\u015fa\u011f\u0131da buna ili\u015fkin de bir \u00f6rnek kod g\u00f6rebilirsiniz. Temelde QT bu mekanizmalar i\u00e7in QVariant kullanmakta. Dikkatli kullan\u0131c\u0131lar\u0131m art\u0131k <em>std::any<\/em> ve <em>std::variant<\/em> ile birlikte bu kabiliyetleri normal C++ uygulamalar\u0131nda da kullanabileceklerini biliyorlard\u0131r.<\/p>\n<pre class=\"lang:c++ decode:true \"> MyQtClass instance;\r\n const QMetaObject* metaobject = instance.metaObject();\r\n\r\n auto count = metaobject-&gt;propertyCount();\r\n\r\n for (int i{0}; i &lt; count; ++i) \r\n {\r\n   QMetaProperty metaproperty = metaobject-&gt;property(i);\r\n   \/\/ Ozelligin ismini alalim\r\n   const char* name = metaproperty.name();\r\n   \/\/ Ozelligin degerini alalim\r\n   QVariant value = instance.property(name);\r\n   qDebug() &lt;&lt; name &lt;&lt; \": \" &lt;&lt; value.toString();\r\n }<\/pre>\n<p>Detayl\u0131 bilgi ve kullan\u0131labilecek di\u011fer \u00f6zellik anahtar kelimeleri i\u00e7in\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/properties.html\"><span style=\"color: #008000;\"><strong>https:\/\/doc.qt.io\/qt-5\/properties.html<\/strong> <\/span><\/a>adresine g\u00f6z atabilirsiniz.<\/p>\n<h3><span style=\"color: #0000ff;\"><strong>sinyal\/slot mekanizmas\u0131<\/strong><\/span><\/h3>\n<p>Evet, bana kal\u0131rsa QT&#8217;nin en \u00f6nemli kabiliyetlerinden birisine gelmi\u015f bulunuyoruz. Bana kal\u0131rsa QT&#8217;nin en g\u00fc\u00e7l\u00fc kabiliyetlerinden de biridir. Buna ayr\u0131 bir ba\u015fl\u0131k a\u00e7masak hakikaten ay\u0131p olurdu. Peki nedir bu &#8220;Signal\/Slot&#8221; mekanizmas\u0131. Asl\u0131na bakarsan\u0131z tek bir c\u00fcmle ile ifade edecek olursak bu kabiliyeti: &#8220;Nesneler aras\u0131 haberle\u015fme mekanizmas\u0131.&#8221;. Evet bu kadar \ud83d\ude42<\/p>\n<p>Tabi tan\u0131mlamak kolay ama bunu m\u00fcmk\u00fcn k\u0131lan yukar\u0131da da bahsetmi\u015f oldu\u011fumu &#8220;meta-object system&#8221; mekanizmas\u0131d\u0131r.<\/p>\n<p>Yukar\u0131da anlatt\u0131klar\u0131ma ili\u015fkin daha detayl\u0131 bilgi ve daha fazlas\u0131 i\u00e7in l\u00fctfen\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/signalsandslots.html\"><span style=\"color: #008000;\"><strong>https:\/\/doc.qt.io\/qt-5\/signalsandslots.html<\/strong><\/span><\/a> ba\u015fvurmaktan \u00e7ekinmeyin, hatta muhakkak bir kere okuyun.<\/p>\n<p>QT&#8217;nin g\u00f6rsel bile\u015fen kabiliyetleri de g\u00f6z \u00f6n\u00fcnde bulundurulunca, bunlar aras\u0131ndaki haberle\u015fme ihtiyac\u0131 eminim hepiniz i\u00e7in a\u015fikard\u0131r. Bir d\u00fc\u011fmeye bas\u0131nca ne olacak? Pencereyi kapatt\u0131\u011f\u0131mda yap\u0131lacaklar\u0131 nas\u0131l tetiklerim? &#8220;Signal\/Slot&#8221; lar i\u015fte bu ihtiya\u00e7lar\u0131 QT yakla\u015f\u0131m\u0131 ile halletmekte. Peki bu arkada\u015flar\u0131n rolleri nedir? Kaynak nesne var ise ilgili veriler ile bir sinyal yay\u0131mlar (signal).\u00a0 Sinyal yay\u0131nland\u0131ktan sonra, bu sinyale abone olan (ki kaynak s\u0131n\u0131f\u0131n kendisi de bu olaya abone olabilir) s\u0131n\u0131flar, bu verileri abone olan s\u0131n\u0131flar i\u00e7erisindeki &#8220;slot&#8221; olarak tan\u0131mlanm\u0131\u015f \u00fcye metotlara y\u00f6nlendirir. Asl\u0131nda &#8220;slot&#8221; lar, s\u0131n\u0131f \u00fcye metot tan\u0131mlamalar\u0131ndan bir fark\u0131 da yoktur. A\u015fa\u011f\u0131da olas\u0131 baz\u0131 ba\u011flant\u0131lar ve bunlar\u0131n nas\u0131l kullan\u0131labilece\u011fine ili\u015fkin bir \u00f6rnek g\u00f6sterilmekte:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/doc.qt.io\/qt-5\/images\/abstract-connections.png\" width=\"339\" height=\"329\" \/><\/p>\n<p>Peki bu normalde nas\u0131l kotar\u0131l\u0131yor? Ya &#8220;callback&#8221; dedi\u011fimiz fonksiyon i\u015faret\u00e7ileri ya da daha modern mekanizmalar ile bu halledilebiliyor, fakat bu da hem okunabilirlik hem de idame noktas\u0131nda pek yeterli de\u011fil. Bunun yan\u0131nda, bu tarz &#8220;callback&#8221; mekanizmas\u0131n\u0131 kullanan di\u011fer k\u00fct\u00fcphanelerde, genelde olaylar\u0131 tetikleyen s\u0131n\u0131flar, hedef\/abone olan s\u0131n\u0131flara genel olarak ba\u011f\u0131ml\u0131l\u0131k i\u00e7erebiliyor, QT&#8217;nin yakla\u015f\u0131m\u0131nda bu tarz s\u0131k\u0131nt\u0131lar yok, yani bir ba\u011f\u0131ml\u0131l\u0131k yok, ve tip g\u00fcvenlidir (&#8220;type safe&#8221;). Tip g\u00fcvenli\u011finden kast\u0131m\u0131z, sinyal ve slot metot imzalar\u0131 ve tipleri ayn\u0131 olmak zorundad\u0131r. E\u011fer bir sinyale slot ba\u011fland\u0131 ise, ilgili sinyal tetiklendi\u011finde var ise b\u00fct\u00fcn abone olan slot&#8217;lar haberdar edilir. Bir di\u011fer avantaj\u0131 ise sinyal\/slot&#8217;lar\u0131n &#8220;thread-safe&#8221; olmas\u0131d\u0131r. E\u011fer ba\u011fl\u0131 olan sinyal ve slot&#8217;lar ayn\u0131 thread&#8217;de \u00e7al\u0131\u015fmaktaysalar, normal fonksiyon \u00e7a\u011fr\u0131s\u0131 \u015feklinde haberdar etme ger\u00e7ekle\u015fir. Fakat farkl\u0131 thread&#8217;lerde iseler o zaman bu veriler bir kuyruk marifeti ile kopyalan\u0131r ve hedef thread&#8217;in olay d\u00f6ng\u00fcs\u00fc i\u00e7erisinde kotar\u0131l\u0131r. Burada deklare edilen sinyaller otomatik olarak &#8220;moc&#8221; taraf\u0131ndan olu\u015fturulur.<\/p>\n<p>\u015eimdi, sinyal ve slotlara biraz daha yak\u0131ndan bakal\u0131m.<\/p>\n<p>Sinyaller asl\u0131nda bir olay olarak de\u011ferlendirilebilir ve s\u0131n\u0131f i\u00e7erisinde bir \u00fcye metot gibi deklare edilir fakat tan\u0131mlanmaz. D\u00f6n\u00fc\u015f de\u011feri void olmal\u0131d\u0131r. Sinyal ve slot&#8217;lar\u0131 kullanabilmek i\u00e7in s\u0131n\u0131f\u0131n\u0131z, \u00f6ncelikle QObject s\u0131n\u0131f\u0131ndan t\u00fcretilmeli ve i\u00e7erisinde Q_OBJECT makrosu eklenmelidir (Peki neden? Ba\u015fl\u0131\u011f\u0131n ba\u015f\u0131nda bahsetmi\u015ftik).\u00a0 Ayr\u0131ca s\u0131n\u0131f i\u00e7erisindeki sinyaller &#8220;signals:&#8221; sat\u0131r\u0131ndan sonra deklare edilmesi gerekmektedir (merak edenler i\u00e7in &#8220;signal&#8221; anahtar kelimesi asl\u0131nda bir makro ve kar\u015f\u0131l\u0131\u011f\u0131 &#8220;public&#8221;). moc bu ibarelere g\u00f6re gerekli kod olu\u015fturmalar\u0131n\u0131 ger\u00e7ekle\u015ftirir (bu sinyale ili\u015fkin \u00f6rne\u011fin tan\u0131mlama otomatik olarak \u00fcretilir). \u00c7o\u011fu QT g\u00f6rsel bile\u015fenleri bu sinyalleri bar\u0131nd\u0131rmaktad\u0131r. Peki bu sinyali nas\u0131l tetikleyece\u011fiz. Bu ama\u00e7la &#8220;emit&#8221; anahtar kelimesi kullan\u0131lmal\u0131d\u0131r (peki emit in kar\u015f\u0131l\u0131\u011f\u0131 nedir? Asl\u0131nda bakarsan\u0131z hi\u00e7 bir \u015fey, sadece okunabilirli\u011fi artt\u0131rmak i\u00e7in eklenmi\u015ftir). Hemen \u00f6rnek bir sinyal deklarasyonuna ve tetiklenmesine bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true\">class PublisherClass : public QObject {\r\n  Q_OBJECT\r\n  ...\r\n   void initiateSignal()\r\n   { \r\n       emit exampleSignal(\"Deneme\", 12, 3.21);\r\n   }\r\n\r\nsignals:\r\n  \/\/ Ornek bir sinyal deklarasyonu, tanimlama yok\r\n  void exampleSignal(const QString&amp; str, int intData, float floatData);\r\n};<\/pre>\n<p>Slotlara tekrar bakacak olursak, asl\u0131nda bunlar\u0131 \u00fcye metot tan\u0131mlamalar\u0131ndan bir farklar\u0131 olmad\u0131\u011f\u0131n\u0131 ve sinyallerin y\u00f6nlendirildi\u011fi metotlar oldu\u011fundan bahsetmi\u015ftir. Tabi slot&#8217;lar sadece \u00fcye metotlar olmak zorunda de\u011filler, lambda, ba\u011f\u0131ms\u0131z fonksiyon ve fonksiyon nesneleri olabilirler. Sinyallere benzer \u015fekilde slot&#8217;lar kullanmak isteyen s\u0131n\u0131flar QObject s\u0131n\u0131f\u0131ndan t\u00fcretilmesi ve Q_OBJECT makrosunu i\u00e7ermelidir. Sinyallerin s\u0131n\u0131f g\u00f6r\u00fcn\u00fcrl\u00fc\u011f\u00fc her zaman &#8220;public&#8221; olsa da, slot&#8217;lar &#8220;public\/protected\/private&#8221; olabilir. Hemen \u00f6rnek bir koda bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true\">class SubscriberClass : public QObject \r\n{\r\n  Q_OBJECT\r\n  ...\r\n\r\npublic slots:\r\n  void exampleSlot(const QString&amp; str, int intData, float floatData) {\r\n       ...\r\n  }\r\n};<\/pre>\n<p>Sinyalleri ve slotlar\u0131 tan\u0131mlad\u0131k, peki bunlar\u0131 nas\u0131l ba\u011flayaca\u011f\u0131z. Hemen ona da bakal\u0131m. Bu ama\u00e7la, QObject s\u0131n\u0131f\u0131ndan edindi\u011fimiz\u00a0<em>connect()\u00a0<\/em>API&#8217;si kullan\u0131l\u0131r. Bu API&#8217;ye s\u0131ra ile, g\u00f6nderen nesnenin kendisi, ilgili sinyal tan\u0131mlamas\u0131n\u0131n i\u015faret\u00e7isi, alacak nesne ve slot fonksiyonunun i\u015faret\u00e7isi ge\u00e7irilir.<\/p>\n<pre class=\"lang:c++ decode:true\">PublisherClass sender;\r\nSubscriberClass receiver;\r\n\r\nconnect(&amp;sender, &amp;PublisherClass::exampleSignal, &amp;receiver, &amp;SubscriberClass::exampleSlot);<\/pre>\n<p>Bu \u015fekilde ayn\u0131 sinyali birden fazla slot&#8217;a ya da birden fazla sinyali de ayn\u0131 slot&#8217;a ba\u011flayabilirsiniz. Daha \u00f6nce de bahsetti\u011fim gibi nesnelerin yan\u0131nda lambda ifadeleri de kullan\u0131labilir.<\/p>\n<pre class=\"lang:c++ decode:true\">connect(&amp;sender, &amp;PublisherClass::exampleSignal, [](const QString&amp; strData, int intData, float floatData) {\r\n  ...\r\n}));<\/pre>\n<p>Nesnelerin ba\u011flanmas\u0131 durumunda, herhangi bir nesne silinirse ilgili ba\u011flant\u0131 otomatik olarak kopar\u0131l\u0131r.<\/p>\n<p>Bunlar\u0131n yan\u0131nda:<\/p>\n<ul>\n<li>Koparma i\u015flemi <em>disconnect\u00a0<\/em>API si ile de a\u015fa\u011f\u0131daki gibi de yap\u0131labilir,\n<pre class=\"lang:c++ decode:true\">disconnect(&amp;sender, &amp;PublisherClass::exampleSignal, &amp;receiver, &amp;SubscriberClass::exampleSlot);<\/pre>\n<\/li>\n<li>Bir sinyal ba\u015fka bir s\u0131n\u0131f\u0131n sinyaline yukar\u0131daki <em>connect <\/em>API si ile\u00a0ba\u011flanabilir,<\/li>\n<li>Yukar\u0131daki ba\u011flant\u0131 tipi el ile belirlenebilir. Bu ama\u00e7la\u00a0\u00a0<strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/doc.qt.io\/qt-5\/qt.html#ConnectionType-enum\">Qt::ConnectionType<\/a><\/span><\/strong>\u00a0kullan\u0131l\u0131r,<\/li>\n<li>Yukar\u0131da verdi\u011fimiz ba\u011flaman\u0131n yan\u0131nda Qt5&#8217;den \u00f6nce de kullan\u0131lan ve makrolara dayal\u0131 bir ba\u011flama y\u00f6ntemi de vard\u0131. Fakat, yeni sistem gibi derleme zaman\u0131nda baz\u0131 kontroller\/tip kontrolleri ger\u00e7ekle\u015ftirilmiyor. Ama baz\u0131 durumlar i\u00e7in de, QML ile ba\u011flama, bu kullan\u0131m gerekebiliyormu\u015f. Yukar\u0131daki kullan\u0131m\u0131n kar\u015f\u0131l\u0131\u011f\u0131 a\u015fa\u011f\u0131daki gibi oluyor:<\/li>\n<li>\n<pre class=\"lang:c++ decode:true\">connect(sender, SIGNAL(exampleSignal(QString, int, float)), receiver, SLOT(exampleSlot(QString, int, float)));<\/pre>\n<p>Bu kullan\u0131mlara ili\u015fkin bilgi i\u00e7in <span style=\"color: #008000;\"><strong>http:\/\/doc.qt.io\/qt-5\/signalsandslots-syntaxes.html<\/strong><\/span> adresine bakabilirsiniz.<\/li>\n<\/ul>\n<h3><span style=\"color: #0000ff;\"><strong>.ui dosyalar\u0131<\/strong><\/span><\/h3>\n<p>Bu uzant\u0131ya sahip dosyalar, Qt Designer taraf\u0131ndan kullan\u0131lmakta ve tasarlanan grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fcn\u00fc XML format\u0131nda ifade etmek i\u00e7in kullan\u0131lmaktad\u0131r. Y\u00fcksek ihtimal ile bu dosyalar ile hi\u00e7 i\u015finiz olmayacak ama ne oldu\u011funu bilmekte fayda var. Daha detayl\u0131 bilgi ve \u00f6rnek .ui dosyas\u0131 i\u00e7in\u00a0<strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/designer-ui-file-format.html\">https:\/\/doc.qt.io\/qt-5\/designer-ui-file-format.html<\/a><\/span><\/strong> adresine bir g\u00f6z atabilirsiniz.<\/p>\n<h3><span style=\"color: #0000ff;\"><strong>QML<\/strong><\/span><\/h3>\n<p>4.7 s\u00fcr\u00fcm\u00fc ile birlikte WPF ve benzeri GKA uygulamalar\u0131 geli\u015ftirenlerin hemen hat\u0131rlayaca\u011f\u0131 xaml benzeri QML mod\u00fcl\u00fc ve bildirimsel dili (&#8220;<em>declarative language<\/em>&#8220;) eklendi. Bu dil sayesinde, art\u0131k grafiksel kullan\u0131c\u0131 aray\u00fczleri, bunlar\u0131n etkile\u015fimi, QT&#8217;nin sundu\u011fu alt yap\u0131lar ve tasar\u0131m ara\u00e7lar\u0131 sayesinde kolay bir \u015fekilde tan\u0131mlanabilmektedir. Burada ayr\u0131ca Javascript deste\u011finin de eklendi\u011finden bahsetmekte fayda var. A\u00e7\u0131k konu\u015fmak gerekirse profesyonel hayat\u0131mda hen\u00fcz bunu hi\u00e7 kullanmad\u0131m ama \u00f6rnek uygulamalar\u0131m\u0131z\u0131n bir k\u0131sm\u0131n\u0131 bu dil ile geli\u015ftirmeyi planl\u0131yorum. Ayr\u0131ca buradaki bile\u015fenler, arka planda C++ k\u00fct\u00fcphaneleriniz ile de desteklenebilmekte. Daha detayl\u0131 bilgi i\u00e7in <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/qmlapplications.html\">QML uygulamalar\u0131<\/a><\/span><\/strong> sayfas\u0131na bir g\u00f6z atabilirsiniz.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>K\u00fct\u00fcphaneler ve API&#8217;ler<\/strong><\/span><\/h2>\n<p>QT k\u00fct\u00fcphane ve kabiliyetleri belirli bir mant\u0131\u011fa g\u00f6re s\u0131n\u0131fland\u0131rmakta. Bunlardan ilk grubu &#8220;Qt Essentials&#8221; olarak adland\u0131rmakta. Bunlar b\u00fct\u00fcn platformlar i\u00e7in sunulan ve kullan\u0131labilecek olan kabiliyetleri temsil etmekte. Bunlar\u0131n yan\u0131nda \u00f6zel ama\u00e7lar i\u00e7in geli\u015ftirilmi\u015f olan &#8220;Add-On Module&#8221; olarak adland\u0131r\u0131lan mod\u00fcller olabilmekte. \u015eimdi bunlara bir bakal\u0131m:<\/p>\n<p>Temel k\u00fct\u00fcphaneler \u015fu \u015fekilde:<\/p>\n<table class=\"generic\" width=\"80%\">\n<tbody>\n<tr class=\"odd\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtcore-index.html\">Qt Core<\/a><\/td>\n<td>Grafiksel olmayan ve di\u011fer k\u00fct\u00fcphaneler taraf\u0131ndan da kullan\u0131lan s\u0131n\u0131flar (sinyal\/slot, qobject, threading, File I\/O, vb).<\/td>\n<\/tr>\n<tr class=\"even\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtgui-index.html\">Qt GUI<\/a><\/td>\n<td>OpenGL de dahil olmak \u00fczere b\u00fct\u00fcn grafiksel kullan\u0131c\u0131 aray\u00fczlerine ili\u015fkin kabiliyetleri bar\u0131nd\u0131r\u0131r.<\/td>\n<\/tr>\n<tr class=\"odd\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtmultimedia-index.html\">Qt Multimedia<\/a><\/td>\n<td>Ses, video ve kamera gibi multimedya kabiliyetleri<\/td>\n<\/tr>\n<tr class=\"even\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtmultimediawidgets-index.html\">Qt Multimedia Widgets<\/a><\/td>\n<td>Multimedya kabiliyetleri i\u00e7in sunulan g\u00f6rsel bile\u015fenler<\/td>\n<\/tr>\n<tr class=\"odd\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtnetwork-index.html\">Qt Network<\/a><\/td>\n<td>A\u011f programlama ile ilgili bile\u015fenler<\/td>\n<\/tr>\n<tr class=\"even\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtqml-index.html\">Qt QML<\/a><\/td>\n<td>QML ve JavaScript dillerine ili\u015fkin s\u0131n\u0131flar<\/td>\n<\/tr>\n<tr class=\"odd\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtquick-index.html\">Qt Quick<\/a><\/td>\n<td>Betimsel bir \u015fekilde GKA tabanl\u0131 uygulama geli\u015ftirme i\u00e7in kullan\u0131labilecek aray\u00fczler<\/td>\n<\/tr>\n<tr class=\"even\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtquickcontrols-index.html\">Qt Quick Controls<\/a><\/td>\n<td>QML bile\u015fenleri<\/td>\n<\/tr>\n<tr class=\"odd\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtquickdialogs-index.html\">Qt Quick Dialogs<\/a><\/td>\n<td>QML diyaloglar\u0131<\/td>\n<\/tr>\n<tr class=\"even\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtquicklayouts-index.html\">Qt Quick Layouts<\/a><\/td>\n<td>QML bile\u015fenlerinin d\u00fczenlemek i\u00e7in kullan\u0131labilecek yerle\u015fim kabiliyetleri<\/td>\n<\/tr>\n<tr class=\"odd\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtquicktest-index.html\">Qt Quick Test<\/a><\/td>\n<td>QML uygulamalar\u0131 i\u00e7in birim test kabiliyetleri<\/td>\n<\/tr>\n<tr class=\"even\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtsql-index.html\">Qt SQL<\/a><\/td>\n<td>SQL tabanl\u0131 veri taban\u0131 entegrasyonu i\u00e7in ihtiya\u00e7 duyulacak kabilyetler<\/td>\n<\/tr>\n<tr class=\"odd\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qttest-index.html\">Qt Test<\/a><\/td>\n<td>QT uygulamalar\u0131 i\u00e7in birim test kabiliyetleri<\/td>\n<\/tr>\n<tr class=\"even\" valign=\"top\">\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtwidgets-index.html\">Qt Widgets<\/a><\/td>\n<td>QT GUI yi kullanan g\u00f6rsel bile\u015fen k\u00fct\u00fcphanesi.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&#8220;Add-on&#8221; mod\u00fcller ise a\u015fa\u011f\u0131daki gibi. Bunlara ili\u015fkin detayl\u0131 bilgilere ilgili ba\u011flant\u0131lardan ula\u015fabilirsiniz.<\/p>\n<table width=\"66%\">\n<thead>\n<tr>\n<td><strong>Mod\u00fcl \u0130smi<\/strong><\/td>\n<td><strong>Geli\u015ftirme Platformu<\/strong><\/td>\n<td><strong>Desteklenen Hedef Platformlar<\/strong><\/td>\n<\/tr>\n<\/thead>\n<tbody>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/activeqt-index.html\">Active Qt<\/a><\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/windows.html\">Windows<\/a><\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/windows.html\">Windows<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qt3d-index.html\">Qt 3D<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtandroidextras-index.html\">Qt Android Extras<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/android.html\">Android<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtbluetooth-index.html\">Qt Bluetooth<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/android.html\">Android<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/ios.html\">iOS<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/macos.html\">macOS<\/a>, and\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/winrt-support.html\">WinRT<\/a>\u00a0(*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtconcurrent-index.html\">Qt Concurrent<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi (*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtdbus-index.html\">Qt D-Bus<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi (*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtgamepad-index.html\">Qt Gamepad<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/android.html\">Veroid<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/ios.html\">iOS<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/macos.html\">macOS<\/a>, tvOS,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/windows.html\">Windows<\/a>, ve\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/qnx.html\">QNX<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtgraphicaleffects-index.html\">Qt Graphical Effects<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qthelp-index.html\">Qt Help<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi (*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtimageformats-index.html\">Qt Image Formats<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtlocation-index.html\">Qt Location<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtmacextras-index.html\">Qt Mac Extras<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/macos.html\">macOS<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtnfc-index.html\">Qt NFC<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/android.html\">Veroid<\/a>\u00a0ve\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux<\/a>\u00a0(*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtopengl-index.html\">Qt OpenGL<\/a>(Deprecated)<\/td>\n<td>Hepsi<\/td>\n<td>Hepsi (*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtplatformheaders-index.html\">Qt Platform Headers<\/a><\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/windows.html\">Qt for Windows<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/macos.html\">macOS<\/a><\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/windows.html\">Qt for Windows<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/macos.html\">macOS<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/android.html\">Veroid<\/a>\u00a0(*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtpositioning-index.html\">Qt Positioning<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/android.html\">Veroid<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/ios.html\">iOS<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/macos.html\">macOS<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/winrt-support.html\">WinRT<\/a>\u00a0(*).<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtprintsupport-index.html\">Qt Print Support<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi (*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtpurchasing-index.html\">Qt Purchasing<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/android.html\">Veroid<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/ios.html\">iOS<\/a>, ve\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/macos.html\">macOS<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtquickcontrols1-index.html\">Qt Quick Controls 1<\/a>(Deprecated)<\/td>\n<td>Hepsi<\/td>\n<td>Hepsi (*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtquickextras-index.html\">Qt Quick Extras<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi (*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtquickwidgets-module.html\">Qt Quick Widgets<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi (*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtremoteobjects-index.html#qt-remote-objects\">Qt Remote Objects<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtscript-index.html\">Qt Script<\/a>(Deprecated)<\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtscxml-index.html\">Qt SCXML<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtscripttools-index.html\">Qt Script Tools<\/a>(Deprecated)<\/td>\n<td>Hepsi<\/td>\n<td>Hepsi (*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtsensors-index.html\">Qt Sensors<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/android.html\">Veroid<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/ios.html\">Qt for iOS<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/winrt-support.html\">WinRT<\/a>, Mer, ve\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/qnx.html\">QNX<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtserialbus-index.html\">Qt Serial Bus<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/windows.html\">Windows<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux<\/a>,\u00a0<a href=\"http:\/\/doc.qt.io\/QtForDeviceCreation\/qtb2-index.html\">Boot to Qt<\/a>targets, ve\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/qnx.html\">QNX<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtserialport-index.html\">Qt Serial Port<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/windows.html\">Windows<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/macos.html\">macOS<\/a>, ve\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/qnx.html\">QNX<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtspeech-index.html\">Qt Speech<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi <a href=\"https:\/\/doc.qt.io\/qt-5\/qnx.html\">QNX<\/a> hari\u00e7.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtsvg-index.html\">Qt SVG<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtuitools-index.html\">Qt UI Tools<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi (*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtwebchannel-index.html\">Qt WebChannel<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtwebengine-index.html\">Qt WebEngine<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/windows.html\">Windows<\/a>,\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux<\/a>, ve\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/macos.html\">macOS<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtwebsockets-index.html\">Qt WebSockets<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtwebview-index.html\">Qt WebView<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Web motoru deste\u011fi sunan platformlar.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtwinextras-index.html\">Qt Windows Extras<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/windows.html\">Windows<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtx11extras-index.html\">Qt X11 Extras<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux\/X11<\/a><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtxml-index.html\">Qt XML<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi (*)<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtxmlpatterns-index.html\">Qt XML Patterns<\/a>(deprecated)<\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtwaylandcompositor-index.html\">Qt Waylve Compositor<\/a><\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux<\/a><\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux<\/a>\u00a0ve\u00a0<a href=\"http:\/\/doc.qt.io\/QtForDeviceCreation\/qtb2-index.html\">Boot to Qt<\/a>.<\/td>\n<\/tr>\n<tr>\n<td><\/td>\n<td>Sadece ticari lisans ya da GPL v3 kapsam\u0131nda desteklenen eklentiler<\/td>\n<td><\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtcharts-index.html\">Qt Charts<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtdatavisualization-index.html\">Qt Data Visualization<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtnetworkauth-index.html\">Qt Network Authorization<\/a><\/td>\n<td>Hepsi<\/td>\n<td>Hepsi<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/qtvirtualkeyboard-index.html\">Qt Virtual Keyboard<\/a><\/td>\n<td>Hepsi<\/td>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/linux.html\">Linux<\/a>\u00a0ve\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/windows.html\">Windows<\/a>desktop, ve\u00a0<a href=\"http:\/\/doc.qt.io\/QtForDeviceCreation\/qtb2-index.html\">Boot to Qt<\/a>targets.<\/td>\n<\/tr>\n<tr>\n<td><a href=\"https:\/\/doc.qt.io\/qt-5\/webgl.html\">Qt Quick WebGL<\/a><\/td>\n<td>Hepsi<\/td>\n<td>WebGL-destekli taray\u0131c\u0131lar<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<h2><span style=\"color: #0000ff;\"><strong>Ara\u00e7lar<\/strong><\/span><\/h2>\n<p>Gelelim QT ile birlikte ha\u015f\u0131r ne\u015fir olaca\u011f\u0131n\u0131z ara\u00e7lara. Tabi bunlar\u0131n bir ka\u00e7\u0131n\u0131 da kullanarak QT uygulamas\u0131 geli\u015ftirebilirsiniz, ama bunlar\u0131n da fark\u0131nda olmakta fayda var. \u015eimdi k\u0131sa k\u0131sa b\u00fct\u00fcn ara\u00e7lara bir g\u00f6z atal\u0131m. Bu ara\u00e7lar\u0131 \u00e7evrim i\u00e7i kurulum uygulamas\u0131 ile kurabilece\u011finiz gibi,\u00a0<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/download.qt.io\/official_releases\/\">https:\/\/download.qt.io\/official_releases\/<\/a><\/strong><\/span> adresinden tek tek de indirerek kurabilirsiniz.<\/p>\n<p><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/doc.qt.io\/qtcreator\/index.html#\"><strong>Creator IDE<\/strong><\/a><\/span>: \u00c7oklu platformda kullan\u0131labilen entegre geli\u015ftirme ortam\u0131 (IDE). Bu sayede \u00fc\u00e7\u00fcnc\u00fc parti bir uygulama ya da IDE&#8217;ye ihtiya\u00e7 duymadan C++ ve QML kullanarak farkl\u0131 platformlar i\u00e7in QT uygulamalar\u0131 geli\u015ftirebiliyorsunuz.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/doc.qt.io\/qt-5\/images\/qt-creator-gs.png\" width=\"600\" height=\"450\" \/><\/p>\n<p><a href=\"https:\/\/doc.qt.io\/qt-5\/qtdesigner-manual.html\"><strong><span style=\"color: #008000;\">Designer<\/span><\/strong><\/a>: \u0130sminden de anla\u015f\u0131laca\u011f\u0131 \u00fczere Widget k\u00fct\u00fcphanelerini kullanarak QT kullanarak grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fc haz\u0131rlamaya olanak sa\u011flayan ara\u00e7t\u0131r. Haz\u0131rlaman\u0131n yan\u0131nda, farkl\u0131 \u00e7\u00f6z\u00fcn\u00fcrl\u00fck ve stiller i\u00e7in de nas\u0131l g\u00f6r\u00fcnd\u00fc\u011f\u00fcn\u00fc g\u00f6rebilirsiniz.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"\" src=\"https:\/\/doc.qt.io\/qt-5\/images\/designer-multiple-screenshot.png\" width=\"673\" height=\"382\" \/><\/p>\n<p><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/qtlinguist-index.html\"><strong>Linguest<\/strong><\/a>:<\/span> Uygulamalar\u0131n\u0131za \u00e7oklu dil deste\u011fi eklemek i\u00e7in kullanabilece\u011finiz ara\u00e7 seti. Bu set i\u00e7erisinde lupdate ve lrelease tarz\u0131 alt ara\u00e7lar mevcut. Ayr\u0131ca bu ara\u00e7lar Qt Creator IDE alt\u0131ndan da \u00e7a\u011fr\u0131labilmekte.<\/p>\n<p><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/qtassistant-index.html\"><strong>Assistant<\/strong><\/a><\/span>: Yukar\u0131da da bahsetti\u011fim \u00fczere, QT dok\u00fcmantasyonuna ula\u015fabilece\u011finiz uygulama.<\/p>\n<p id=\"fdyqdOS\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1287 \" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38b6bb595c6.png\" alt=\"\" width=\"599\" height=\"462\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38b6bb595c6.png 1179w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38b6bb595c6-300x231.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38b6bb595c6-768x591.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38b6bb595c6-1024x789.png 1024w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38b6bb595c6-500x385.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38b6bb595c6-150x116.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38b6bb595c6-400x308.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38b6bb595c6-800x616.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38b6bb595c6-200x154.png 200w\" sizes=\"auto, (max-width: 599px) 100vw, 599px\" \/><\/p>\n<p><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/qmake-manual.html\"><strong>qmake<\/strong><\/a><\/span>: Makefile benzeri \u00e7oklu platform i\u00e7in kullanabilece\u011finiz, yaz\u0131l\u0131m olu\u015fturma arac\u0131d\u0131r. Bu arada QT CMake ve di\u011fer benzeri ara\u00e7lar\u0131 da desteklemekte.<\/p>\n<p>Bunlar\u0131n yan\u0131nda bilindik IDE&#8217;ler i\u00e7in de <strong>pluginler<\/strong>\u00a0de sunulmakta. Bunlardan <strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/doc.qt.io\/qtvstools\/index.html#\">Visual Studio i\u00e7in olana<\/a><\/span> <\/strong>yaz\u0131mda k\u0131saca de\u011finece\u011fim.<\/p>\n<p>Bunlar\u0131nda yan\u0131nda daha bir ka\u00e7 ara\u00e7 daha mevcut ama en s\u0131k kullanacaklar\u0131n\u0131z bunlar. Di\u011ferleri i\u00e7in QT dok\u00fcmantasyonuna ba\u015fvurabilirsiniz.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Kurulum<\/strong><\/span><\/h2>\n<p>Gelelim k\u0131saca QT&#8217;yi nas\u0131l kurabilece\u011finize. Bunun bir ka\u00e7 y\u00f6ntemi var ve ben burada iki y\u00f6nteminden bahsedece\u011fim. Bunlar Windows i\u015fletim sistemi i\u00e7indir (di\u011fer platformlar i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/gettingstarted.html\">https:\/\/doc.qt.io\/qt-5\/gettingstarted.html<\/a><\/strong><\/span> adresine g\u00f6z atabilirsiniz). Birincisi, ilgili arac\u0131n sitesinde kurulum dosyas\u0131n\u0131 indirerek olacak ki ilk kullan\u0131m i\u00e7in bunu \u00f6neriyorum. Ya da daha \u00f6nce Vcpkg yaz\u0131mda bahsetti\u011fim arac\u0131 kullanarak.<\/p>\n<p>\u015eimdi gelelim ilk y\u00f6nteme. Bu y\u00f6ntemde, indirilen kurulum uygulamas\u0131n\u0131 kullan\u0131yor olaca\u011f\u0131z. Ekran \u00e7ok karma\u015f\u0131k olmad\u0131\u011f\u0131 s\u00fcrece, i\u015flemleri ad\u0131m ad\u0131m yazaca\u011f\u0131m. Gerekli oldu\u011funu d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm k\u0131s\u0131mlarda ise ekran g\u00f6r\u00fcnt\u00fclerini sizler ile payla\u015faca\u011f\u0131m:<\/p>\n<ol>\n<li><a href=\"https:\/\/www.qt.io\/download\"><strong><span style=\"color: #008000;\">https:\/\/www.qt.io\/download<\/span><\/strong><\/a> adresine gidiyoruz,<\/li>\n<li>Burada kullanaca\u011f\u0131m\u0131z lisans\u0131 se\u00e7iyoruz ki, bizim durumumuzda &#8220;Open Source&#8221; olacak. Bunun i\u00e7in sayfan\u0131n sa\u011f alt\u0131nda bulunan &#8220;Go Open Source&#8221; d\u00fc\u011fmesine t\u0131kl\u0131yoruz,<\/li>\n<li>Daha sonra burada \u00e7evrim i\u00e7i kurulum dosyas\u0131n\u0131 m\u0131 yoksa el ile kurulum dosyalar\u0131n\u0131 m\u0131 kullanaca\u011f\u0131m\u0131z\u0131 se\u00e7iyoruz. \u0130lki i\u00e7in &#8220;Download&#8221; d\u00fc\u011fmesini t\u0131klayarak &#8220;qt-unified-windows-x86-3.1.1-online.exe&#8221; dosyas\u0131n\u0131 indiriyoruz (s\u00fcr\u00fcm sizlerde farkl\u0131 olabilir). \u0130kinci se\u00e7enek i\u00e7in ise (\u00f6zellikle kapal\u0131 a\u011fda \u00e7al\u0131\u015fanlar ya da internet eri\u015fimi olmayan bir bilgisayara kurulum yapacaklar i\u00e7in kullan\u0131\u015fl\u0131)\u00a0<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.qt.io\/offline-installers\">https:\/\/www.qt.io\/offline-installers<\/a><\/strong><\/span> ya da <a href=\"http:\/\/download.qt.io\/archive\/qt\"><span style=\"color: #008000;\"><strong>http:\/\/download.qt.io\/archive\/qt<\/strong><\/span><\/a>\/ adreslerine giderek ihtiya\u00e7 duydu\u011funuz bile\u015fenlere ili\u015fkin kurulum dosyalar\u0131n\u0131 indirebilirsiniz,<\/li>\n<li>\u00c7evrim i\u00e7i kuruluma devam etmek i\u00e7in\u00a0&#8220;qt-unified-windows-x86-3.1.1-online.exe&#8221; kurulum dosyas\u0131na \u00e7ift t\u0131kl\u0131yoruz,<\/li>\n<li>\u0130lk gelen pencerede &#8220;Welcome to the Qt online installer&#8221;, &#8220;Next&#8221; d\u00fc\u011fmesine bas\u0131yoruz,<\/li>\n<li>Sonra gelen &#8220;Qt Setup&#8221; penceresinde ise hen\u00fcz hesap olu\u015fturmad\u0131 iseniz hesap olu\u015fturup, var ise ilgili bilgileri girip, sonraki kar\u015f\u0131lama ekran\u0131nda da &#8220;Next&#8221; d\u00fc\u011fmesine t\u0131kl\u0131yoruz,<\/li>\n<li>&#8220;Installation Folder&#8221; k\u0131sm\u0131nda QT&#8217;nin kurulaca\u011f\u0131 dizini se\u00e7iyoruz. Bunu olabildi\u011fince basit ve i\u00e7erisinde bo\u015fluk bulundurmayan bir dizin se\u00e7menizde fayda var,<\/li>\n<li>\u0130\u015fte \u015fimdi geldik \u00f6nemli bir pencereye. Neleri kuraca\u011f\u0131z? \u0130lk etapta 5.13 s\u00fcr\u00fcm\u00fcn\u00fc MSVC 2017 ve android bile\u015fenlerini se\u00e7menizi tavsiye ediyorum. Ayr\u0131ca Qt Creator ve 3D Designer&#8217;\u0131 da eklemeniz iyi olacakt\u0131r. Sol taraftaki LTS, &#8220;Long Term Support&#8221; anlam\u0131na gelmekte ve uzun s\u00fcreli destek verilecek olan s\u00fcr\u00fcm\u00fc ifade ediyor. Bir di\u011fer ifade ile ticari uygulamalar\u0131n\u0131zda tercih edece\u011finiz s\u00fcr\u00fcmler bunlar olmal\u0131.\u00a0Bunlar\u0131 se\u00e7tikten sonra &#8220;Next&#8221; d\u00fc\u011fmesine basarak, \u00f6ncelikle var ise lisans s\u00f6zle\u015fmelerine okudum ve kabul etti\u011fim deyip, Ba\u015flang\u0131\u00e7 men\u00fclerine ekleme bilgisi pencerelerinde yine &#8220;Next&#8221; d\u00fc\u011fmelerine bas\u0131p, son &#8220;Install&#8221; d\u00fc\u011fmesi ile indirme ve kurulum i\u015flemini ba\u015flatabilirsiniz.<\/li>\n<li><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1278 \" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a062555e.png\" alt=\"\" width=\"449\" height=\"326\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a062555e.png 1490w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a062555e-300x217.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a062555e-768x557.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a062555e-1024x742.png 1024w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a062555e-500x362.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a062555e-150x109.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a062555e-1200x870.png 1200w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a062555e-400x290.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a062555e-800x580.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a062555e-200x145.png 200w\" sizes=\"auto, (max-width: 449px) 100vw, 449px\" \/>\u00a0<img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1280 \" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a4307e26.png\" alt=\"\" width=\"447\" height=\"328\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a4307e26.png 1470w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a4307e26-300x220.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a4307e26-768x564.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a4307e26-1024x752.png 1024w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a4307e26-500x367.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a4307e26-150x110.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a4307e26-1200x881.png 1200w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a4307e26-400x294.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a4307e26-800x587.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d375a4307e26-200x147.png 200w\" sizes=\"auto, (max-width: 447px) 100vw, 447px\" \/><\/li>\n<li>\u00a0\u015eimdi kurulumun yap\u0131ld\u0131\u011f\u0131 dizine gidelim. Burada ilgili Qt s\u00fcr\u00fcmlerine ili\u015fkin dizinleri ve ortak kullan\u0131lan dosyalar\u0131 g\u00f6receksiniz. Benim (eski s\u00fcr\u00fcm) i\u00e7in g\u00f6r\u00fcnt\u00fc a\u015fa\u011f\u0131daki gibi.<\/li>\n<li>\n<p id=\"sJxVevr\"><img loading=\"lazy\" decoding=\"async\" width=\"725\" height=\"321\" class=\"alignnone size-full wp-image-1290 \" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38becca51b7.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38becca51b7.png 725w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38becca51b7-300x133.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38becca51b7-500x221.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38becca51b7-150x66.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38becca51b7-400x177.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38becca51b7-200x89.png 200w\" sizes=\"auto, (max-width: 725px) 100vw, 725px\" \/><\/p>\n<\/li>\n<li>\u015eimdi 5.x.x dizinlerine girelim. Bendeki g\u00f6r\u00fcnt\u00fc a\u015fa\u011f\u0131daki gibi:<\/li>\n<li>\n<p id=\"dXmblWg\"><img loading=\"lazy\" decoding=\"async\" width=\"576\" height=\"350\" class=\"alignnone size-full wp-image-1291 \" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bf10cb092.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bf10cb092.png 576w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bf10cb092-300x182.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bf10cb092-500x304.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bf10cb092-150x91.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bf10cb092-400x243.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bf10cb092-200x122.png 200w\" sizes=\"auto, (max-width: 576px) 100vw, 576px\" \/><\/p>\n<\/li>\n<li>Buradan QT&#8217;nin ilgili s\u00fcr\u00fcm\u00fcn\u00fcn (5.12.3), ilgili platforma (msvc2017 x86) ili\u015fkin ye ili\u015fkin b\u00fct\u00fcn dosyalar\u0131na ula\u015fabilirsiniz. El ile VS ayarlar\u0131 yapman\u0131z durumunda nereye gelece\u011finiz g\u00f6rd\u00fcn\u00fcz. Ger\u00e7i VS plugin&#8217;ini kurdu\u011funuzda bunlar ile u\u011fra\u015fman\u0131za gerek kalmayacak.<\/li>\n<li>Dikkatinizi \u00e7ekmek istedi\u011fim son dizin de &#8220;plugins\/platforms&#8221; dizini. Bu dizini, haz\u0131rlad\u0131\u011f\u0131n\u0131 QT uygulamalar\u0131 ile birlikte sa\u011flaman\u0131z gerekiyor (tabi ilgili bilgisayarda QT kurulu de\u011fil ise).<\/li>\n<li>\n<p id=\"YhkhfCS\"><img loading=\"lazy\" decoding=\"async\" width=\"751\" height=\"348\" class=\"alignnone size-full wp-image-1293 \" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bfc949fab.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bfc949fab.png 751w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bfc949fab-300x139.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bfc949fab-500x232.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bfc949fab-150x70.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bfc949fab-400x185.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/img_5d38bfc949fab-200x93.png 200w\" sizes=\"auto, (max-width: 751px) 100vw, 751px\" \/><\/p>\n<\/li>\n<li>\u015eimdi QT&#8217;yi kurduktan sonra VS entegrasyonu i\u00e7in son bir ad\u0131m\u0131m\u0131z daha var o da &#8220;VS addin&#8221;&#8216;ini kurmak. Bunun i\u00e7in\u00a0<a href=\"https:\/\/download.qt.io\/official_releases\/vsaddin\/\"><strong><span style=\"color: #008000;\">https:\/\/download.qt.io\/official_releases\/vsaddin<\/span><\/strong>\/<\/a> sayfas\u0131na gidiyoruz ve son s\u00fcr\u00fcm\u00fcn oldu\u011fu dizine (bu yaz\u0131y\u0131 yazd\u0131\u011f\u0131mda 2.3.4. idi) giriyoruz,<\/li>\n<li><span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/download.qt.io\/official_releases\/vsaddin\/2.3.4\/qt-vsaddin-msvc2019-2.3.4.vsix\">qt-vsaddin-msvc2019-2.3.4.vsix<\/a>\u00a0<\/strong><\/span>dosyas\u0131n\u0131 t\u0131klayarak indiriyoruz. Bu bir VS eklentisi.<\/li>\n<li>VS&#8217;i kapat\u0131yoruz ve ilgili .vsiz uzant\u0131l\u0131 dosyaya \u00e7ift t\u0131klayarak kurulumu tamaml\u0131yoruz. Art\u0131k VS ile QT uygulamas\u0131 geli\u015ftirmek i\u00e7in her \u015fey haz\u0131r.<\/li>\n<\/ol>\n<p>\u015eimdi gelelim Vcpkg ile ilgili kurulum ger\u00e7ekle\u015ftirilmesine. Bu ad\u0131mlara ge\u00e7meden \u00f6nce, bilgilerinizi tazelemek i\u00e7in a\u015fa\u011f\u0131daki yaz\u0131ya g\u00f6z atabilirsiniz.<\/p>\n<p><strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"http:\/\/www.yazilimperver.com\/index.php\/2018\/11\/29\/vcpkg-araci\/\">Vcpkg Arac\u0131<\/a><\/span><\/strong><\/p>\n<p>Yukar\u0131daki yaz\u0131mda bahsedilen \u015fekilde vcpkg arac\u0131n\u0131 \u00e7al\u0131\u015ft\u0131r\u0131r hale getirdikten sonra &#8220;vcpkg search qt5&#8221; diyerek, mevcut qt k\u00fct\u00fcphanelerini g\u00f6rebilirsiniz. Ben bu komutu \u00e7a\u011f\u0131rd\u0131\u011f\u0131mda a\u015fa\u011f\u0131daki listeyi g\u00f6rd\u00fcm:<\/p>\n<pre class=\"lang:ps decode:true \">E:\\vcpkg&gt;vcpkg search qt5\r\nqt5                  5.9.2-1          Qt5 Application Framework\r\nqt5-3d               5.11.1           Qt5 3d Module - Functionality for near-realtime simulation systems with suppor...\r\nqt5-activeqt         5.11.1           Qt5 ActiveQt Module - ActiveX components\r\nqt5-base             5.11.1-5         Qt5 Application Framework Base Module. Includes Core, GUI, Widgets, Networking...\r\nqt5-charts           5.11.1           Qt5 Charts Module - UI components for displaying charts, driven by static or d...\r\nqt5-datavis3d        5.11.1           Qt5 Data Visualization 3d Module - UI Components for creating 3D data visualiz...\r\nqt5-declarative      5.11.1           Qt5 Declarative (Quick 2) Module. Includes QtQuick, QtQuickParticles, QtQuickW...\r\nqt5-gamepad          5.11.1           Qt5 Gamepad Module - Enables Qt applications to support the use of gamepad har...\r\nqt5-graphicaleffects 5.11.1           Qt5 GraphicalEffects Module.\r\nqt5-imageformats     5.11.1           Qt5 Image Formats Module - Plugins for additional image formats: TIFF, MNG, TG...\r\nqt5-modularscripts   2018-09-10-2     Vcpkg helpers to package qt5 modules\r\nqt5-multimedia       5.11.1           Qt5 Multimedia Module - Classes and widgets for audio, video, radio and camera...\r\nqt5-networkauth      5.11.1           Qt5 Network Authorization Module\r\nqt5-quickcontrols    5.11.1           Qt5 QuickControls Module.\r\nqt5-quickcontrols2   5.11.1           Qt5 QuickControls2 Module.\r\nqt5-script           5.9.2            Qt5 Script Module.\r\nqt5-scxml            5.11.1           Qt5 SCXML Module - Provides classes and tools for creating state machines from...\r\nqt5-serialport       5.11.1           Qt5 Serial Port - provides access to hardware and virtual serial ports\r\nqt5-speech           5.11.1           Qt5 Speech Module\r\nqt5-svg              5.11.1           Qt5 SVG Module - provides classes for displaying the contents of SVG files\r\nqt5-tools            5.11.1           Qt5 Tools Module; Includes deployment tools and helpers, Qt Designer, Assistan...\r\nqt5-virtualkeyboard  5.11.1           Qt5 Virtual Keyboard Module - A framework for implementing different input met...\r\nqt5-websockets       5.11.1           Qt5 Web Sockets Module - provides WebSocket communication compliant with RFC 6455\r\nqt5-winextras        5.11.1           Qt5 Windows Extras Module. Provides platform-specific APIs for Windows.\r\nqt5-xmlpatterns      5.11.1           Qt5 XML Patterns Module - Support for XPath, XQuery, XSLT and XML schema valid...\r\n\r\nIf your library is not listed, please open an issue at and\/or consider making a pull request:\r\n    https:\/\/github.com\/Microsoft\/vcpkg\/issues<\/pre>\n<p>G\u00f6rece\u011finiz \u00fczere s\u00fcr\u00fcmler biraz geriden geliyor, fakat ilk y\u00f6nteme g\u00f6re daha h\u0131zl\u0131 kurulum yapabilirsiniz. Kurulum ve VS ile entegrasyon i\u00e7in ilgili yaz\u0131mdaki ad\u0131mlar\u0131 takip edebilirsiniz.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Kaynaklar<\/strong><\/span><\/h2>\n<ul>\n<li><span style=\"color: #008000;\"><strong>https:\/\/www.wikiwand.com\/en\/Qt_(software)<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/wiki.qt.io\/About_Qt<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/www.youtube.com\/watch?v=YWiAUUblD34<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/www.qt.io\/licensing\/<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/download.qt.io\/official_releases\/<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/doc.qt.io\/qt-5\/properties.html<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/doc.qt.io\/qt-5\/gettingstarted.html<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/doc.qt.io\/qt-5\/metaobjects.html<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/doc.qt.io\/qt-5\/moc.html<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/wiki.qt.io\/Books<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/www.cleanqt.io<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/wiki.qt.io\/Threads_Events_QObjects#Events_and_the_event_loop<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/www.q7basic.org\/Qt%20Designer.pdf<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/www.kdab.com\/expertise\/qt\/<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/doc.qt.io\/qt-5\/overviews-main.html#<\/strong><\/span><\/li>\n<li><span style=\"color: #008000;\"><strong>https:\/\/forum.qt.io\/topic\/22992\/qt-yi-merak-edenlere-neden-qt<\/strong><\/span><\/li>\n<\/ul>\n<p><\/p>","protected":false},"excerpt":{"rendered":"<p>Basit \u00c7oklu Oyun Motoru (B\u00c7OM) serisinin ikinci yaz\u0131s\u0131 ile ser\u00fcvenimize devam edelim. \u0130lk yaz\u0131ya a\u015fa\u011f\u0131daki adresten ula\u015fabilirsiniz: Basit \u00c7oklu Oyuncu Motoru \u2013 Snake v2.0 \u2013 Giri\u015f Bu yaz\u0131m\u0131, geli\u015ftirece\u011fim uygulamalarda ve yaz\u0131lar\u0131mda bundan sonra s\u0131k\u00e7a bahsedece\u011fim QT&#8217;ye ay\u0131rmak istiyorum. Yaz\u0131n\u0131n kapsam\u0131 her \u015feyiyle QT&#8217;yi anlatmak de\u011fil ki ona zaten bir yaz\u0131 yetmez, apayr\u0131 bir yaz\u0131&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/\">Continue reading <span class=\"meta-nav\">&#8594;<\/span><\/a><\/p>\n","protected":false},"author":2,"featured_media":1308,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_monsterinsights_skip_tracking":false,"_monsterinsights_sitenote_active":false,"_monsterinsights_sitenote_note":"","_monsterinsights_sitenote_category":0,"footnotes":""},"categories":[10,41],"tags":[504,513,511,516,503,515,517,514,508,509,507,510,518,471,519,505,520,506,512],"class_list":["post-1204","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-modern-c","tag-c-gui-library","tag-creator","tag-declarative-gui","tag-events","tag-gui-toolkit","tag-meta-object-system","tag-moc","tag-qassistant","tag-qcreator","tag-qdesigner","tag-qmake","tag-qml","tag-qobject","tag-qt","tag-qt-toolkit","tag-signal","tag-signal-slot","tag-slot","tag-widgets"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>QT (B\u00c7OM Serisi - 2) - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131<\/title>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[:tr]QT (B\u00c7OM Serisi - 2)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Basit \u00c7oklu Oyun Motoru (B\u00c7OM) serisinin ikinci yaz\u0131s\u0131 ile ser\u00fcvenimize devam edelim. \u0130lk yaz\u0131ya a\u015fa\u011f\u0131daki adresten ula\u015fabilirsiniz: Basit \u00c7oklu Oyuncu Motoru \u2013 Snake v2.0 \u2013 Giri\u015f Bu yaz\u0131m\u0131, geli\u015ftirece\u011fim uygulamalarda ve yaz\u0131lar\u0131mda bundan sonra s\u0131k\u00e7a bahsedece\u011fim QT&#8217;ye ay\u0131rmak istiyorum. Yaz\u0131n\u0131n kapsam\u0131 her \u015feyiyle QT&#8217;yi anlatmak de\u011fil ki ona zaten bir yaz\u0131 yetmez, apayr\u0131 bir yaz\u0131... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2019-07-26T17:03:33+00:00\" \/>\n<meta property=\"article:modified_time\" content=\"2019-08-23T18:12:57+00:00\" \/>\n<meta property=\"og:image\" content=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/Qt-e1580417103404.png\" \/>\n\t<meta property=\"og:image:width\" content=\"30\" \/>\n\t<meta property=\"og:image:height\" content=\"23\" \/>\n\t<meta property=\"og:image:type\" content=\"image\/png\" \/>\n<meta name=\"author\" content=\"yaz\u0131l\u0131mperver\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"yaz\u0131l\u0131mperver\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"32 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"QT (B\u00c7OM Serisi &#8211; 2)\",\"datePublished\":\"2019-07-26T17:03:33+00:00\",\"dateModified\":\"2019-08-23T18:12:57+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/\"},\"wordCount\":5675,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"c++ GUI library\",\"creator\",\"declarative GUI\",\"events\",\"GUI toolkit\",\"meta-object system\",\"MOC\",\"qassistant\",\"qcreator\",\"qdesigner\",\"qmake\",\"qml\",\"qobject\",\"Qt\",\"qt toolkit\",\"signal\",\"signal\/slot\",\"slot\",\"widgets\"],\"articleSection\":[\"C++\",\"Modern C++\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/\",\"name\":\"[:tr]QT (B\u00c7OM Serisi - 2)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2019-07-26T17:03:33+00:00\",\"dateModified\":\"2019-08-23T18:12:57+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"QT (B\u00c7OM Serisi &#8211; 2)\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/www.yazilimperver.com\/#website\",\"url\":\"https:\/\/www.yazilimperver.com\/\",\"name\":\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"description\":\"Payla\u015fmak g\u00fczeldir.\",\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/www.yazilimperver.com\/?s={search_term_string}\"},\"query-input\":\"required name=search_term_string\"}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\",\"name\":\"yaz\u0131l\u0131mperver\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"contentUrl\":\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png\",\"caption\":\"yaz\u0131l\u0131mperver\"},\"logo\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/\"}}]}<\/script>\n<!-- \/ Yoast SEO plugin. -->","yoast_head_json":{"title":"[:tr]QT (B\u00c7OM Serisi - 2)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/","og_locale":"tr_TR","og_type":"article","og_title":"[:tr]QT (B\u00c7OM Serisi - 2)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Basit \u00c7oklu Oyun Motoru (B\u00c7OM) serisinin ikinci yaz\u0131s\u0131 ile ser\u00fcvenimize devam edelim. \u0130lk yaz\u0131ya a\u015fa\u011f\u0131daki adresten ula\u015fabilirsiniz: Basit \u00c7oklu Oyuncu Motoru \u2013 Snake v2.0 \u2013 Giri\u015f Bu yaz\u0131m\u0131, geli\u015ftirece\u011fim uygulamalarda ve yaz\u0131lar\u0131mda bundan sonra s\u0131k\u00e7a bahsedece\u011fim QT&#8217;ye ay\u0131rmak istiyorum. Yaz\u0131n\u0131n kapsam\u0131 her \u015feyiyle QT&#8217;yi anlatmak de\u011fil ki ona zaten bir yaz\u0131 yetmez, apayr\u0131 bir yaz\u0131... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2019-07-26T17:03:33+00:00","article_modified_time":"2019-08-23T18:12:57+00:00","og_image":[{"width":30,"height":23,"url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/07\/Qt-e1580417103404.png","type":"image\/png"}],"author":"yaz\u0131l\u0131mperver","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"yaz\u0131l\u0131mperver","Tahmini okuma s\u00fcresi":"32 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"QT (B\u00c7OM Serisi &#8211; 2)","datePublished":"2019-07-26T17:03:33+00:00","dateModified":"2019-08-23T18:12:57+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/"},"wordCount":5675,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["c++ GUI library","creator","declarative GUI","events","GUI toolkit","meta-object system","MOC","qassistant","qcreator","qdesigner","qmake","qml","qobject","Qt","qt toolkit","signal","signal\/slot","slot","widgets"],"articleSection":["C++","Modern C++"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/","name":"[:tr]QT (B\u00c7OM Serisi - 2)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2019-07-26T17:03:33+00:00","dateModified":"2019-08-23T18:12:57+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"QT (B\u00c7OM Serisi &#8211; 2)"}]},{"@type":"WebSite","@id":"https:\/\/www.yazilimperver.com\/#website","url":"https:\/\/www.yazilimperver.com\/","name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","description":"Payla\u015fmak g\u00fczeldir.","publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/www.yazilimperver.com\/?s={search_term_string}"},"query-input":"required name=search_term_string"}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb","name":"yaz\u0131l\u0131mperver","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/","url":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","contentUrl":"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2018\/04\/OnlyIcon-1-114x114.png","caption":"yaz\u0131l\u0131mperver"},"logo":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/image\/"}}]}},"_links":{"self":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1204","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/comments?post=1204"}],"version-history":[{"count":32,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1204\/revisions"}],"predecessor-version":[{"id":1348,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1204\/revisions\/1348"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media\/1308"}],"wp:attachment":[{"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/media?parent=1204"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=1204"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=1204"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}