{"id":1349,"date":"2019-08-23T20:26:34","date_gmt":"2019-08-23T20:26:34","guid":{"rendered":"http:\/\/www.yazilimperver.com\/?p=1349"},"modified":"2019-08-23T20:26:34","modified_gmt":"2019-08-23T20:26:34","slug":"qt-tcp-istemci-uygulamasi-bcom-serisi-3","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/","title":{"rendered":"QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi &#8211; 3)"},"content":{"rendered":"<p>Evet arkada\u015flar B\u00c7OM serisine devam ediyoruz. Serideki di\u011fer yaz\u0131lara a\u015fa\u011f\u0131dan ula\u015fabilirsiniz:<\/p>\n<ul>\n<li><strong><a href=\"http:\/\/www.yazilimperver.com\/index.php\/2019\/06\/11\/basit-coklu-oyuncu-motoru-snake-v2-0-giris\/\"><span style=\"color: #339966;\">Basit \u00c7oklu Oyunc<span style=\"color: #339966;\">u Motoru &#8211; Snake v2.0 &#8211; Giri\u015f<\/span><\/span><\/a><\/strong><\/li>\n<li><a href=\"http:\/\/www.yazilimperver.com\/index.php\/2019\/07\/26\/qt-bcom-serisi-2\/\"><strong><span style=\"color: #339966;\">QT (B\u00c7OM Serisi &#8211; 2)<\/span><\/strong><\/a><\/li>\n<\/ul>\n<p>En son yaz\u0131mda sizlere QT ye ili\u015fkin k\u0131saca bilgi vermeye \u00e7al\u0131\u015fm\u0131\u015ft\u0131m. Yaz\u0131y\u0131 \u00e7ok uzatmamak ad\u0131na, a\u00e7\u0131k\u00e7as\u0131 \u00e7al\u0131\u015fan bir \u00f6rnek vermedim. E\u011fer o yaz\u0131m\u0131 okumad\u0131 iseniz, l\u00fctfen \u00f6ncelikle o yaz\u0131m\u0131 okuyunuz. Bu yaz\u0131mda ise, sizlere QT kullanarak geli\u015ftirdi\u011fim \u00f6rnek bir uygulamay\u0131 aktaraca\u011f\u0131m. Bu vesile ile, o yaz\u0131mda bahsetmedi\u011fim veya \u00fczerinde durmad\u0131m teknik baz\u0131 konulara, QT uygulamas\u0131 geli\u015ftirirken dikkat etmeniz gereken hususlara ve di\u011fer ilgili konulara da de\u011finece\u011fim.<\/p>\n<p>\u00d6rnek uygulama olarak, yaz\u0131 dizisi ile de paralel olmas\u0131 ad\u0131na , TCP\/IP istemci uygulamas\u0131n\u0131 se\u00e7tim. Bu uygulama ile QT kullanarak a\u011f\/soket ve grafiksel kullan\u0131c\u0131 aray\u00fcz programlamaya ili\u015fkin de giri\u015f yapm\u0131\u015f olaca\u011f\u0131z ve temel kavramlar\u0131n nas\u0131l uyguland\u0131\u011f\u0131n\u0131 g\u00f6rece\u011fiz. Uygulamay\u0131, \u00e7ok kabiliyete bo\u011fmadan, bu tarz bir uygulamadan beklenen asgari kabiliyetleri i\u00e7erecek \u015fekilde geli\u015ftirmeye gayret ettim. A\u015fa\u011f\u0131da uygulamam\u0131za ili\u015fkin \u00f6rnek grafiksel kullan\u0131c\u0131 aray\u00fczlerini g\u00f6rebilirsiniz:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1350 aligncenter\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603105a3270.png\" alt=\"\" width=\"391\" height=\"247\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603105a3270.png 938w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603105a3270-300x190.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603105a3270-768x486.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603105a3270-500x317.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603105a3270-150x95.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603105a3270-400x253.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603105a3270-800x507.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603105a3270-200x127.png 200w\" sizes=\"auto, (max-width: 391px) 100vw, 391px\" \/><\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1357 aligncenter\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d6040f588346.png\" alt=\"\" width=\"391\" height=\"321\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d6040f588346.png 938w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d6040f588346-300x246.png 300w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d6040f588346-768x630.png 768w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d6040f588346-500x410.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d6040f588346-150x123.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d6040f588346-400x328.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d6040f588346-800x656.png 800w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d6040f588346-200x164.png 200w\" sizes=\"auto, (max-width: 391px) 100vw, 391px\" \/><\/p>\n<p>Bu ba\u011flamda uygulamam\u0131z:<\/p>\n<ul>\n<li>Geli\u015ftirdi\u011fimiz &#8220;NetworkLibrary&#8221; alt yap\u0131s\u0131n\u0131 kullanmakta,<\/li>\n<li>IP (ayr\u0131 bir QT bile\u015feni) ve port bilgileri verilen TCP\/IP sunucusuna ba\u011flanabilmekte, mesaj g\u00f6ndermekte ve alabilmekte,<\/li>\n<li>ASCII ve binary veri giri\u015fine ve g\u00f6nderilmesine (ayr\u0131 bir QT bile\u015feni olarak) olanak sa\u011flamakta,<\/li>\n<li>Mesaj boyutu belirleme, sonuna yeni sat\u0131r ekleyebilmekte,<\/li>\n<li>Sunucu ile olan haberle\u015fmenin g\u00f6r\u00fcnt\u00fclenmesi, kaydedilmesine olanak sa\u011flamakta,<\/li>\n<li>Kaynak kod doxygen format\u0131na g\u00f6re dok\u00fcmante edilmi\u015f durumda(Doc\\Doxygen\\html dizini alt\u0131nda).<\/li>\n<\/ul>\n<p>G\u00f6rece\u011finiz \u00fczere sadece incelemek i\u00e7in de\u011fil, ayn\u0131 zaman kendi soket uygulamalar\u0131n\u0131z\u0131 do\u011frulamak i\u00e7in de kullanabilirsiniz. Yak\u0131n zamanda sunucu k\u0131sm\u0131n\u0131 da geli\u015ftirip, sizleri haberdar edece\u011fim. Bu uygulamaya a\u015fa\u011f\u0131daki adresten ula\u015fabilirsiniz:<\/p>\n<p><span style=\"color: #339966;\"><strong>https:\/\/github.com\/yazilimperver\/SimpleMultiplayerGameEngine<\/strong><\/span><\/p>\n<p>\u00d6ncelikli olarak bir \u00f6nceki yaz\u0131mda bahsetmi\u015f oldu\u011fum VS QT eklentisini kurman\u0131z gerekiyor. Kodu kendi bilgisayar\u0131n\u0131za \u00e7ekip VS 2017 kullanarak derleyip, \u00e7al\u0131\u015ft\u0131rabilirsiniz. Burada VS 2017&#8217;nin son s\u00fcr\u00fcm\u00fcn\u00fc kulland\u0131\u011f\u0131n\u0131zdan emin olun l\u00fctfen, \u00e7\u00fcnk\u00fc QT&#8217;nin son eklentisi eski VS 2017 s\u00fcr\u00fcmleri ile \u00e7al\u0131\u015fmamakta.<\/p>\n<p>Kodu \u00e7ektikten sonra VS 2017 i\u00e7erisinde a\u015fa\u011f\u0131daki gibi hatalar al\u0131rsan\u0131z:<\/p>\n<pre class=\"lang:python decode:true\">[QtRunWork] Error starting process \\bin\\moc.exe: The system cannot find the file specified\r\n... iclientmedium.h(12): fatal error C1083: Cannot open include file: 'QObject': No such file or directory (compiling source file QTCPClient.cpp\r\n<\/pre>\n<p>VS &#8220;Solution Explorer&#8221; kullanarak, ilgili solution i\u00e7in QT s\u00fcr\u00fcm\u00fc ataman\u0131z gerekmekte. Bu gerekiyor, \u00e7\u00fcnk\u00fc sizlerde QT farkl\u0131 dizinlerde kurulu olabilir. Bunu da yak\u0131nda CMake&#8217;e ta\u015f\u0131yaca\u011f\u0131m. Gelelim bunu nas\u0131l yapaca\u011f\u0131n\u0131za. \u00d6ncelikle \u00e7\u00f6z\u00fcm a\u011fac\u0131 \u00fczerine gelip sa\u011f t\u0131klayaca\u011f\u0131z ve &#8220;Change Solution&#8217;s Qt Version&#8221; \u0131 se\u00e7ece\u011fiz:<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1353 \" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d4c63570.png\" alt=\"\" width=\"389\" height=\"424\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d4c63570.png 752w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d4c63570-275x300.png 275w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d4c63570-500x546.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d4c63570-150x164.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d4c63570-400x437.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d4c63570-200x218.png 200w\" sizes=\"auto, (max-width: 389px) 100vw, 389px\" \/><\/p>\n<p>sonras\u0131nda ise ilgili QT kurulumunu se\u00e7iyoruz ve tekrar olu\u015fturmaya ba\u015flatt\u0131\u011f\u0131n\u0131zda, herhangi bir s\u0131k\u0131nt\u0131 ya\u015famadan, tamamlanmas\u0131n\u0131 bekliyorum.<\/p>\n<p><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1354 \" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d6a68038.png\" alt=\"\" width=\"241\" height=\"249\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d6a68038.png 440w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d6a68038-290x300.png 290w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d6a68038-150x155.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d6a68038-400x414.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603d6a68038-200x207.png 200w\" sizes=\"auto, (max-width: 241px) 100vw, 241px\" \/><\/p>\n<p>Daha sonras\u0131nda aktif proje olarak &#8220;QTClientTestApp&#8221; i se\u00e7ece\u011fiz ve &#8220;Solution platform&#8221; se\u00e7ene\u011fini de x86 se\u00e7elim (e\u011fer 64 bit QT kurulu ise x64 de kalabilir). Bu noktadan sonra art\u0131k VS 2017 kullanarak, projeyi derleyebiliyor olman\u0131z\u0131 bekliyorum. Herhangi bir s\u0131k\u0131nt\u0131 durumunda l\u00fctfen haberdar edin beni.<\/p>\n<p>\u015eimdi gelelim projeye ili\u015fkin sizlere aktarmak istedi\u011fim hususlara. Bunlar\u0131 uzun uzad\u0131ya anlatmak yerine, madde madde sizlere k\u0131saca aktaraca\u011f\u0131m. Daha detayl\u0131 bilgi i\u00e7in hemen koda dalabilirsiniz:<\/p>\n<ul>\n<li>VS \u00e7\u00f6z\u00fcm\u00fcnde \u00fc\u00e7 projemiz var:\n<ul>\n<li><strong>NetworkLibrary<\/strong>: TCP \u0130stemci ve Sunucu kabiliyetlerini i\u00e7eren QT soket k\u00fct\u00fcphanemiz,<\/li>\n<li><strong>QTClientTestApp<\/strong>: Grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fc tabanl\u0131, NetworkLibrary&#8217;i kullanan QT TCP istemci uygulamas\u0131,<\/li>\n<li><strong>QTServerTestApp<\/strong>: \u015eimdilik bo\u015f sunucu uygulamas\u0131 \ud83d\ude42<\/li>\n<\/ul>\n<\/li>\n<li>Projedeki dosyalar a\u015fa\u011f\u0131daki gibi:\n<p id=\"EeQvEcg\"><img loading=\"lazy\" decoding=\"async\" class=\"alignnone wp-image-1356 \" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603f1bb26da.png\" alt=\"\" width=\"208\" height=\"262\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603f1bb26da.png 427w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603f1bb26da-238x300.png 238w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603f1bb26da-150x189.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603f1bb26da-400x504.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d603f1bb26da-200x252.png 200w\" sizes=\"auto, (max-width: 208px) 100vw, 208px\" \/><\/p>\n<ul>\n<li>Burada <em>ClientApp<\/em> alt\u0131nda ana uygulamaya ili\u015fkin kodlar,<\/li>\n<li><em>IPComponent<\/em> alt\u0131nda GKA da kullan\u0131lan ve IP giri\u015fi i\u00e7in kullan\u0131lan QT bile\u015feni,<\/li>\n<li><em>MultipPurposeInputField<\/em> alt\u0131nda GKA da kullan\u0131lan ve farkl\u0131 tipte veri girilmesine olanak sa\u011flayan QT bile\u015feni,<\/li>\n<li><em>Resources<\/em> alt\u0131nda ilgili resim dosyalar\u0131n\u0131 i\u00e7eren Resources.qrc dosyas\u0131,<\/li>\n<li>Ve son olarak main.cpp dosyas\u0131.<\/li>\n<\/ul>\n<\/li>\n<li>Di\u011fer GKA k\u00fct\u00fcphanelerinde oldu\u011fu gibi, QT de \u00f6zelle\u015fmi\u015f g\u00f6rsel bile\u015fenleri tan\u0131mlama olana\u011f\u0131 sunmakta. Ben burada projeyi \u00e7ok b\u00fcy\u00fctmemek ad\u0131na, farkl\u0131 projeye ta\u015f\u0131mad\u0131m. Bunlar\u0131 da direk kopyalayarak, kendi projelerinizde kullanabilirsiniz,<\/li>\n<li>\u015eimdi gelelim QT kullan\u0131larak nas\u0131l GKA tasarlayabilece\u011finize. Burada iki y\u00f6ntem var. Birincisi VS ile de entegre \u00e7al\u0131\u015fan Qt Designer kullanmak, di\u011fer ise yaz\u0131l\u0131msal olarak bu aray\u00fczlerin olu\u015fturulmas\u0131d\u0131r,\n<ul>\n<li>Ben istemci uygulamas\u0131 i\u00e7in g\u00f6rd\u00fc\u011f\u00fcn\u00fcz b\u00fct\u00fcn aray\u00fczleri yaz\u0131l\u0131msal olarak olu\u015fturdum (<em><strong>generateUI()<\/strong><\/em> metodu). \u0130n\u015fallah, sunucu i\u00e7in geli\u015ftirece\u011fim test uygulamas\u0131n\u0131 da Qt Designer kullanarak geli\u015ftirece\u011fim,<\/li>\n<li>Bu kodlar\u0131 incelerken dikkat edece\u011finiz en \u00f6nemli husus bu g\u00f6rsel bile\u015fenler ve bunlar\u0131 bar\u0131nd\u0131ran &#8220;layout&#8221; s\u0131n\u0131flar\u0131 olacak. O sebeple QT taraf\u0131ndan sunulan &#8220;layout&#8221; s\u0131n\u0131flar\u0131na muhakkak olarak g\u00f6z atman\u0131zda fayda var. Detayl\u0131 bilgi i\u00e7in\u00a0<a href=\"https:\/\/doc.qt.io\/qt-5\/layout.html\"><strong><span style=\"color: #339966;\">https:\/\/doc.qt.io\/qt-5\/layout.html<\/span><\/strong><\/a>\u00a0sayfas\u0131n\u0131 muhakkak bir kere okuyunuz,<\/li>\n<\/ul>\n<\/li>\n<li>Bir \u00f6nceki QT yaz\u0131mda bahsetti\u011fim sinyal\/slot kullan\u0131mlar\u0131n\u0131 s\u0131k s\u0131k g\u00f6rebilirsiniz,<\/li>\n<li>Ayr\u0131ca sunucu ile olan mesajla\u015fma ge\u00e7mi\u015fini QT&#8217;nin dosya y\u00f6netiminin basit kullan\u0131m\u0131 ile nas\u0131l olu\u015fturuldu\u011funu g\u00f6rebilirsiniz,<\/li>\n<li>QtIpItem s\u0131n\u0131f\u0131 i\u00e7erisinde, kullan\u0131c\u0131dan girdi almak i\u00e7in sunulan QLineEdit g\u00f6rsel bile\u015fenini, IP adres bilgilerini, format\u0131na uygun bir \u015fekilde alabilmek i\u00e7in, &#8220;regular expression&#8221; ve ilgili do\u011frulay\u0131c\u0131lar\u0131n nas\u0131l kullan\u0131ld\u0131\u011f\u0131n\u0131 g\u00f6rebilirsiniz,<\/li>\n<li>MultiPurposeInputField s\u0131n\u0131f\u0131 i\u00e7erisinde kullan\u0131c\u0131dan, belirlenen maksimum mesaj boyutuna g\u00f6re, hem ASCII, hem say\u0131 hem de 16 l\u0131k d\u00fczende byte byte veri al\u0131nmas\u0131na olanak sa\u011flayan bile\u015fene g\u00f6z atabilirsiniz,<\/li>\n<li>B\u00fct\u00fcn bunlar\u0131n yan\u0131nda QT statik k\u00fct\u00fcphanelerini de di\u011fer C++ k\u00fct\u00fcphaneleri gibi VS 2017 de kullanabilirsiniz (yani ilgili bas\u015fl\u0131k dosyas\u0131 dizinlerini ekleyip, ilgili projeyi &#8220;references&#8221; alt\u0131na ya da proje ayarlar\u0131 alt\u0131nda &#8220;Linker-&gt;Input-&gt;Additional Dependencies&#8221; e ekleyebilirsiniz,<\/li>\n<li>Uygulama i\u00e7erisinde kulland\u0131\u011f\u0131m resimleri dosya sisteminden okumak yerine \u00e7al\u0131\u015fabilir dosya i\u00e7erisine eklemek i\u00e7in ise QT nin &#8220;Qt Resource Editor&#8221; uygulamas\u0131n\u0131 kullanabilirsiniz. Bunun i\u00e7in:\n<ul>\n<li>\u00d6ncelikle .qrc uzant\u0131l\u0131 bir dosya ekleyelim. \u00d6rnek uygulamada &#8220;Resources.qrc&#8221;,<\/li>\n<li>Daha sonra VS \u00e7\u00f6z\u00fcm a\u011fac\u0131 \u00fczerinde bu dosyan\u0131n \u00fczerine \u00e7ift t\u0131klayal\u0131m. VS Qt eklentisi otomatik olarak &#8220;Qt Resource Editor&#8221; \u00fc a\u00e7acakt\u0131r,<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p id=\"UdHscGs\"><img loading=\"lazy\" decoding=\"async\" class=\"wp-image-1361 aligncenter\" src=\"http:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d60450dc36ab.png\" alt=\"\" width=\"264\" height=\"304\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d60450dc36ab.png 502w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d60450dc36ab-260x300.png 260w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d60450dc36ab-500x577.png 500w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d60450dc36ab-150x173.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d60450dc36ab-400x461.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/08\/img_5d60450dc36ab-200x231.png 200w\" sizes=\"auto, (max-width: 264px) 100vw, 264px\" \/><\/p>\n<ul>\n<li style=\"list-style-type: none;\">\n<ul>\n<li>\u00a0Daha sonra eklemek istedi\u011finiz dosyalar\u0131 &#8220;Add&#8221; d\u00fc\u011fmesini kullanarak ekleyiniz,<\/li>\n<li>\u00a0Burada &#8220;Alias&#8221; alan\u0131 kod i\u00e7erisinde eri\u015fim i\u00e7in kullanabilece\u011finiz basit, &#8220;Resouce URL&#8221; ise bu kayna\u011fa ili\u015fkin kod i\u00e7erisinde eri\u015fim i\u00e7in kullanabilece\u011finiz tam tan\u0131mlay\u0131c\u0131 metni temsil eder,<\/li>\n<li>Bunlar\u0131 ekledikten sonra kod i\u00e7erisinde bu kaynaklar\u0131 a\u015fa\u011f\u0131daki gibi kullanabilirsiniz:<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<pre class=\"lang:c++ decode:true\">\/\/ Set application icon\r\nthis-&gt;setWindowIcon(QIcon(\":\/data\/app-ico.ico\"));\r\n\r\n...\r\n\r\n\/\/ Our application logo\r\nQLabel* logoLabel = new QLabel{};\r\nQPixmap* logoPix = new QPixmap(\":\/data\/app-logo.png\");\r\nlogoLabel-&gt;setPixmap(*logoPix);<\/pre>\n<ul>\n<li>Kodlar\u0131 olabildi\u011fince Doxygen format\u0131na g\u00f6re dok\u00fcmante etmeye \u00e7al\u0131\u015ft\u0131m. Sizlere yard\u0131mc\u0131 olacakt\u0131r,<\/li>\n<li>QT, ayr\u0131ca birim test i\u00e7in de kabiliyetler sunmakta ve bunlar\u0131n bir k\u0131sm\u0131n\u0131 g\u00f6rsel bile\u015fenlerin testleri i\u00e7in de kullanabilirsiniz. Yak\u0131n bir zamanda bu konu ile ilgili de bir yaz\u0131 yazmay\u0131 planl\u0131yorum. Orada bu konuya daha detayl\u0131 de\u011finiriz,<\/li>\n<li>Bu arada bir di\u011fer husus ta, sizin yerel makinan\u0131zda QT kurulumuna ili\u015fkin bilgiler .user dosyalar\u0131nda tutuluyor (\u00f6r.\u00a0NetworkLibrary.vcxproj.user). Bu sebeple bunlar\u0131 kod kontrol alt\u0131nda tutmamal\u0131s\u0131n\u0131z. Asl\u0131nda bakarsan\u0131z, bu dosyalar\u0131 sadece QT i\u00e7in de\u011fil, di\u011fer uygulamalar\u0131n\u0131z i\u00e7in de kod kontrol alt\u0131nda tutmay\u0131n,<\/li>\n<li>Birden fazla QT kullan\u0131lmas\u0131 durumunda yukar\u0131da bahsetti\u011fim \u015fekilde, proje i\u00e7in kullanmak istedi\u011finiz QT s\u00fcr\u00fcm\u00fcn\u00fc se\u00e7ebilirsiniz.<\/li>\n<\/ul>\n<p>Evet arkada\u015flar, bir yaz\u0131m\u0131z\u0131n daha sonuna geldik. Bu yaz\u0131 ile birlikte QT, soket ve grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fc programlama konular\u0131na ili\u015fkin \u00f6rnek bir uygulamay\u0131 inceledik. Art\u0131k QT&#8217;e daha a\u015f\u0131na oldu\u011fumuza g\u00f6re bir sonraki yaz\u0131m\u0131zda, daha farkl\u0131 bir mecraya ad\u0131m atabiliriz. Sunucu ile ilgili k\u0131sm\u0131 da yazd\u0131\u011f\u0131mda sizleri haberdar edece\u011fim. Kodu l\u00fctfen indirin, inceleyin, hunharca de\u011fi\u015ftirin ve kullan\u0131n. O zaman \u00e7ok daha fazla faydas\u0131n\u0131 g\u00f6receksiniz \ud83d\ude00<\/p>\n<p>Ben yaz\u0131l\u0131mperver, sizlere iyi hafta sonlar\u0131 diliyorum.<\/p>","protected":false},"excerpt":{"rendered":"<p>Evet arkada\u015flar B\u00c7OM serisine devam ediyoruz. Serideki di\u011fer yaz\u0131lara a\u015fa\u011f\u0131dan ula\u015fabilirsiniz: Basit \u00c7oklu Oyuncu Motoru &#8211; Snake v2.0 &#8211; Giri\u015f QT (B\u00c7OM Serisi &#8211; 2) En son yaz\u0131mda sizlere QT ye ili\u015fkin k\u0131saca bilgi vermeye \u00e7al\u0131\u015fm\u0131\u015ft\u0131m. Yaz\u0131y\u0131 \u00e7ok uzatmamak ad\u0131na, a\u00e7\u0131k\u00e7as\u0131 \u00e7al\u0131\u015fan bir \u00f6rnek vermedim. E\u011fer o yaz\u0131m\u0131 okumad\u0131 iseniz, l\u00fctfen \u00f6ncelikle o yaz\u0131m\u0131 okuyunuz&#8230;. <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/\">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":[13,544,546,353,469,493,471,548,547,543,545],"class_list":["post-1349","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-modern-c","tag-c","tag-client","tag-doxygen","tag-gui","tag-multiplayer","tag-network","tag-qt","tag-qt-designer","tag-qt-resource-editor","tag-socket-programming","tag-tcp-ip"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi - 3) - 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\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[:tr]QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi - 3)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Evet arkada\u015flar B\u00c7OM serisine devam ediyoruz. Serideki di\u011fer yaz\u0131lara a\u015fa\u011f\u0131dan ula\u015fabilirsiniz: Basit \u00c7oklu Oyuncu Motoru &#8211; Snake v2.0 &#8211; Giri\u015f QT (B\u00c7OM Serisi &#8211; 2) En son yaz\u0131mda sizlere QT ye ili\u015fkin k\u0131saca bilgi vermeye \u00e7al\u0131\u015fm\u0131\u015ft\u0131m. Yaz\u0131y\u0131 \u00e7ok uzatmamak ad\u0131na, a\u00e7\u0131k\u00e7as\u0131 \u00e7al\u0131\u015fan bir \u00f6rnek vermedim. E\u011fer o yaz\u0131m\u0131 okumad\u0131 iseniz, l\u00fctfen \u00f6ncelikle o yaz\u0131m\u0131 okuyunuz.... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2019-08-23T20:26:34+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=\"7 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\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi &#8211; 3)\",\"datePublished\":\"2019-08-23T20:26:34+00:00\",\"dateModified\":\"2019-08-23T20:26:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/\"},\"wordCount\":1436,\"commentCount\":2,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"c++\",\"client\",\"doxygen\",\"GUI\",\"Multiplayer\",\"network\",\"Qt\",\"qt designer\",\"qt resource editor\",\"socket programming\",\"TCP\/IP\"],\"articleSection\":[\"C++\",\"Modern C++\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/\",\"name\":\"[:tr]QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi - 3)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2019-08-23T20:26:34+00:00\",\"dateModified\":\"2019-08-23T20:26:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi &#8211; 3)\"}]},{\"@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 TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi - 3)[:] - 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\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/","og_locale":"tr_TR","og_type":"article","og_title":"[:tr]QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi - 3)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Evet arkada\u015flar B\u00c7OM serisine devam ediyoruz. Serideki di\u011fer yaz\u0131lara a\u015fa\u011f\u0131dan ula\u015fabilirsiniz: Basit \u00c7oklu Oyuncu Motoru &#8211; Snake v2.0 &#8211; Giri\u015f QT (B\u00c7OM Serisi &#8211; 2) En son yaz\u0131mda sizlere QT ye ili\u015fkin k\u0131saca bilgi vermeye \u00e7al\u0131\u015fm\u0131\u015ft\u0131m. Yaz\u0131y\u0131 \u00e7ok uzatmamak ad\u0131na, a\u00e7\u0131k\u00e7as\u0131 \u00e7al\u0131\u015fan bir \u00f6rnek vermedim. E\u011fer o yaz\u0131m\u0131 okumad\u0131 iseniz, l\u00fctfen \u00f6ncelikle o yaz\u0131m\u0131 okuyunuz.... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2019-08-23T20:26:34+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":"7 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi &#8211; 3)","datePublished":"2019-08-23T20:26:34+00:00","dateModified":"2019-08-23T20:26:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/"},"wordCount":1436,"commentCount":2,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["c++","client","doxygen","GUI","Multiplayer","network","Qt","qt designer","qt resource editor","socket programming","TCP\/IP"],"articleSection":["C++","Modern C++"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/","name":"[:tr]QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi - 3)[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2019-08-23T20:26:34+00:00","dateModified":"2019-08-23T20:26:34+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/08\/23\/qt-tcp-istemci-uygulamasi-bcom-serisi-3\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"QT TCP \u0130stemci Uygulamas\u0131 (B\u00c7OM Serisi &#8211; 3)"}]},{"@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\/1349","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=1349"}],"version-history":[{"count":11,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1349\/revisions"}],"predecessor-version":[{"id":1367,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1349\/revisions\/1367"}],"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=1349"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=1349"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=1349"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}