{"id":1561,"date":"2019-12-18T21:56:34","date_gmt":"2019-12-18T21:56:34","guid":{"rendered":"https:\/\/www.yazilimperver.com\/?p=1561"},"modified":"2019-12-18T21:56:34","modified_gmt":"2019-12-18T21:56:34","slug":"haftalik-c-22-qt-kod-parcalari-i","status":"publish","type":"post","link":"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/","title":{"rendered":"Haftal\u0131k C++ 22 &#8211; Qt Kod Par\u00e7alar\u0131 &#8211; I"},"content":{"rendered":"<p>Arkada\u015flar bug\u00fcn sizler ile QT ile ilgili bir ka\u00e7 kod par\u00e7as\u0131 payla\u015fmak istiyorum. Bundan \u00f6nce bir ka\u00e7 yaz\u0131mda, soket programlama ve geli\u015ftirdi\u011fim bir tak\u0131m kabiliyetler ile ilgili sizlerle baz\u0131 payla\u015f\u0131mlarda bulunmu\u015ftum. Bu yaz\u0131lar\u0131mda, Qt ve C++ kullanarak TCP istemci ve sunucu soketlerini nas\u0131l olu\u015fturabilece\u011fimize, kod \u00fczerinden ve tasar\u0131mc\u0131y\u0131 kullanarak nas\u0131l grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fcne sahip uygulamalar geli\u015ftirebilece\u011fimize bakm\u0131\u015ft\u0131k.<br \/>\nO yaz\u0131lar\u0131mdan sonra, b\u00fct\u00fcn bu yaz\u0131lar\u0131mda sizler ile payla\u015ft\u0131\u011f\u0131m kabiliyetleri (ve biraz daha fazlas\u0131n\u0131) i\u00e7erisinde bar\u0131nd\u0131racak olan Socket Box uygulamam \u00fczerinde \u00e7al\u0131\u015fmaya ba\u015flad\u0131m. Bu uygulama arka planda, C++ tabanl\u0131 NetworkLibrary kullansa da, grafiksel kullan\u0131c\u0131 aray\u00fczlerini QML kullanarak geli\u015ftiriyorum. Bu sayede hem kolay bir \u015fekilde \u00e7oklu platform deste\u011fi hem de i\u015f mant\u0131klar\u0131 ile grafiksel kullan\u0131c\u0131 aray\u00fczleri aras\u0131nda ba\u011f\u0131ms\u0131zl\u0131k olduk\u00e7a kolay bir \u015fekilde sa\u011flanabiliyor (bu arada QML ile ilgili, ba\u015flang\u0131\u00e7 i\u00e7in <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/09\/22\/ssl-qt5-cadaques\/\">SSL, Qt5 Cadaques<\/a>\u00a0<\/strong><\/span>yaz\u0131ma muhakkak bir g\u00f6z atman\u0131z\u0131 tavsiye ediyorum).<\/p>\n<p>Bu yaz\u0131mda sizler ile, bu uygulamay\u0131 geli\u015ftirirken kulland\u0131\u011f\u0131m, sizlere de faydal\u0131 olacak ve vakit kazand\u0131racak bir tak\u0131m kod par\u00e7alar\u0131n\u0131 payla\u015fmak istiyorum. Bir s\u00fcre bu ve benzeri bir tak\u0131m payla\u015f\u0131mlar\u0131 \u00e7ok uzun olmayan yaz\u0131lar ile sizlerle payla\u015faca\u011f\u0131m.<\/p>\n<p>Evet pek de k\u0131sa olmayan \ud83d\ude42 bir giri\u015ften sonra, bu yaz\u0131 kapsam\u0131nda sizler ile payla\u015faca\u011f\u0131m ilk kod par\u00e7as\u0131na\u00a0 ge\u00e7ebiliriz.<\/p>\n<h2><span style=\"color: #0000ff;\"><strong>Metin D\u00f6n\u00fc\u015f\u00fcmleri, Hexadecimal Veri G\u00f6sterimi<\/strong><\/span><\/h2>\n<p>QT ile yaz\u0131l\u0131m geli\u015ftirirken en \u00e7ok kar\u015f\u0131la\u015faca\u011f\u0131n\u0131z s\u0131n\u0131flardan birisi de QString s\u0131n\u0131f\u0131d\u0131r. Bu s\u0131n\u0131f b\u00fcnyesinde bir \u00e7ok API bar\u0131nd\u0131rmakta, metin d\u00f6n\u00fc\u015f\u00fcmleri ve C++ <em>std::string<\/em> benzeri bir \u00e7ok kabiliyeti de sunmaktad\u0131r. Bunun ile birlikte bir \u00e7ok QT k\u00fct\u00fcphanesinde de bu s\u0131n\u0131f kullan\u0131lmakta. Bu s\u0131n\u0131f kullan\u0131rken bir noktada <em>sprintf<\/em> benzeri bir API&#8217;ye ihtiyac\u0131n\u0131z olabilir bu durumda ne yap\u0131caks\u0131n\u0131z? Konu Qt olunca, elbette birden fazla se\u00e7enek mevcut.<\/p>\n<p>Bunlardan ilki <em>sprintf<\/em> API&#8217;si kullanmak \ud83d\ude42 Bu \u015fekilde elde etti\u011finiz metni <em>QString<\/em> s\u0131n\u0131f\u0131na ge\u00e7irebilirsiniz. Bu y\u00f6ntem pek ho\u015funuza gitmedi ise di\u011fer y\u00f6ntemlere bakal\u0131m.<\/p>\n<p>Bir di\u011fer y\u00f6ntem, yukar\u0131dakine benzer olarak QString taraf\u0131ndan sunulan <a href=\"https:\/\/doc.qt.io\/qt-5\/qstring.html#asprintf\"><em><strong><span style=\"color: #008000;\">asprintf<\/span><\/strong>()<\/em><\/a>\u00a0API&#8217;sini kullanmak. \u0130sminden de anla\u015f\u0131laca\u011f\u0131 \u00fczere, <em>sprintf<\/em> API&#8217;sinin aray\u00fcz\u00fcn\u00fc sunan ve ondan kopamayanlar i\u00e7in bu API sunulmakta. Bu API statik bir metot olarak sunulmakta, fakat QT&#8217;nin kendisi taraf\u0131ndan pek \u00f6nerilmemekte.<\/p>\n<p>Yukar\u0131daki iki y\u00f6ntem yerine <span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/qstring.html#arg\"><em>arg()<\/em><\/a><\/strong><\/span> ve <span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/qtextstream.html\"><strong>QTextStream<\/strong> <\/a><\/span>se\u00e7eneklerini de\u011ferlendirmenizi beklemekte QT. Bunlar aras\u0131ndan <em>arg()<\/em> API&#8217;sine bir g\u00f6z ataca\u011f\u0131z. Hemen bir iki \u00f6rnek ile buna bakal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true \">\/\/ \".\/Yazilimperver\r\nQString formattedStr = QString(\"%1\/%2%3\").arg(\".\", \"Yazilim\", \"Perver\");\r\n\r\n\/\/ \".\/PerverYazilim\r\nQString formattedStr = QString(\"%1\/%3%2\").arg(\".\", \"Perver\", \"Yazilim\");\r\n\r\n\/\/ \".\/Yazilim2019\r\nQString formattedStr = QString(\"%1\/%2%3\").arg(\".\", \"Yazilim\", 2019);\r\n<\/pre>\n<p>Yukar\u0131daki \u00f6rnek kod par\u00e7as\u0131ndan da anlayaca\u011f\u0131n\u0131z \u00fczere, bu API daha okunabilir ve QT taraf\u0131ndan tercih edilmekte. Ayr\u0131ca di\u011fer baz\u0131 programlama dillerinde de benzer kullan\u0131mlar mevcut. Bunun yan\u0131nda bu kullan\u0131m\u0131n bize sundu\u011fu bir ka\u00e7 avantaj da mevcut. Bunlardan ilki, ge\u00e7irilen parametrelerin s\u0131ralar\u0131n\u0131 de\u011fi\u015ftirmeden, elde edilecek metnin i\u00e7eri\u011fini ve kullan\u0131m yerlerini de\u011fi\u015ftirebilirsiniz. Ayr\u0131ca kullan\u0131lan arg\u00fcman tiplerini de yine benzer \u015fekilde formatlama metnini de\u011fi\u015ftirmeden de\u011fi\u015ftirebilirsiniz.<\/p>\n<p>Bunlar yan\u0131nda, say\u0131sal de\u011ferleri QString&#8217;e \u00e7evirmek i\u00e7in statik <em><strong>number<\/strong>()<\/em> API&#8217;lerini, tesi d\u00f6n\u00fc\u015f\u00fcmler i\u00e7in ise <strong><em>toInt<\/em><\/strong>, <strong><em>toDouble<\/em> <\/strong>ve benzeri varyasyonlar\u0131n\u0131 kullanabilirsiniz.<\/p>\n<p>Bu noktada ihtiya\u00e7 duyaca\u011f\u0131n\u0131z ve s\u0131kl\u0131kla kullanaca\u011f\u0131n\u0131z d\u00f6n\u00fc\u015f\u00fcm de <em><strong>toStdString<\/strong>()<\/em> ve varyasyonlar\u0131 olacak. Bu API&#8217;leri de <em>std::string<\/em> ve <em>std::wstring<\/em> d\u00f6n\u00fc\u015f\u00fcmleri i\u00e7in kullanabilirsiniz.<\/p>\n<p>Elinizde soket \u00fczerinden ya da &#8220;binary&#8221; bir dosyadan okudu\u011funuz verilerin tutuldu\u011fu QByteArray var ve bunun i\u00e7eri\u011fini hexadecimal g\u00f6rmek istiyorsunuz neyi kullanacaks\u0131n\u0131z. Hemen g\u00f6sterelim:<\/p>\n<pre class=\"lang:c++ decode:true\">QByteArray rcvdData;\r\n...\r\n\/\/ \"0xAA:BB:..\" gibi her bir byte'i : ile ayrilmis metni verir\r\nQString hexString = \"0x\" + QString(rcvdData.toHex(':')<\/pre>\n<p>Peki ya tarih ve saati nas\u0131l alaca\u011f\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true\">\/\/ Tarih ve zaman etiketli bir dosya ismi olusturmak icin\r\n\/\/ \"Log_171219_2326.txt\"\r\nQString fileName = QString(\"Log_\") + QDateTime::currentDateTime().toString(\"ddMMyy_HHmm\") + QString(\".txt\");<\/pre>\n<p>TCP sunucu soketinize bir istemci ba\u011fland\u0131. \u0130stemcinin IP adresini \u00f6\u011frenmek istiyorsunuz (yerel makineninkini nas\u0131l \u00f6\u011frenece\u011fimiz birazdan \ud83d\ude09 ), i\u00e7inden gelen sese kulak verdin ve\u00a0<em>toString()\u00a0<\/em>API&#8217;sini kulland\u0131n ama IP metni IPv6 format\u0131nda ve fazladan &#8220;:&#8221; karakterleri var ne yapacaks\u0131n. A\u015fa\u011f\u0131daki metot i\u015fini g\u00f6recektir:<\/p>\n<pre class=\"lang:c++ decode:true\">QString getIpv4Address(const QString&amp; ipv6Address)\r\n{\r\n    QString ip4String;\r\n    QHostAddress ip6Address(ipv6Address);\r\n    bool conversionOK = false;\r\n\r\n    QHostAddress ip4Address(ip6Address.toIPv4Address(&amp;conversionOK));\r\n    if (conversionOK)\r\n        ip4String = ip4Address.toString();\r\n    else\r\n        ip4String = ipv6Address;\r\n\r\n    return ip4String;\r\n}<\/pre>\n<p>Bu kadar metin d\u00f6n\u00fc\u015f\u00fcmlerine ili\u015fkin kod par\u00e7as\u0131 \u015fimdilik yeterli, \u015fimdi biraz daha e\u011flenceli kod par\u00e7alar\u0131na g\u00f6z atal\u0131m.<\/p>\n<h2><strong><span style=\"color: #0000ff;\">IP ve MAC Adresini \u00d6\u011frenme<\/span><\/strong><\/h2>\n<p>Qt de soket programlama ile u\u011fra\u015f\u0131yorsan\u0131z, bir noktada makinenizin IP adresini ve kulland\u0131\u011f\u0131n\u0131z ayg\u0131tlar\u0131n MAC adreslerini \u00f6\u011frenme ihtiyac\u0131 has\u0131l olmu\u015f olabilir (benim i\u00e7in en az\u0131ndan, yeni geli\u015ftirdi\u011fim uygulama i\u00e7in gerekti). \u0130\u015fte bu ba\u015fl\u0131k alt\u0131nda bunlara bakaca\u011f\u0131z.<\/p>\n<p>Bu ba\u011flamda geli\u015ftirece\u011fimiz \u00fc\u00e7 ana kabiliyet mevcut. Bunlar:<\/p>\n<ul>\n<li><strong>Cihaz\u0131m\u0131za ili\u015fkin \u00f6zel IP adresi (private IP Address) belirleme:<\/strong>\n<ul>\n<li>Bu adres genel olarak yerel a\u011f i\u00e7erisinde (LAN) haberle\u015fmek i\u00e7in kullan\u0131l\u0131r ve kapsam\u0131 yereldir,<\/li>\n<li>Windows komut sat\u0131r\u0131nda &#8220;ipconfig&#8221; komut ile g\u00f6r\u00fcnt\u00fclenen &#8220;IPv4 Address&#8221; si mevcut cihaz\u0131n\u0131z\u0131n \u00f6zel IP adresidir,<\/li>\n<li>Basit a\u011f API&#8217;leri kullan\u0131larak elde edilebilir.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Cihaz\u0131m\u0131za ili\u015fkin umumi IP adresi (public IP Address) belirleme:<\/strong>\n<ul>\n<li>Bu adres a\u011f d\u0131\u015f\u0131nda, internet \u00fczerindeki di\u011fer makineler ile haberle\u015fmek i\u00e7in kullan\u0131l\u0131r ve kapsam globaldir,<\/li>\n<li>Internet ile ilgili servisleri almak i\u00e7in kullan\u0131lan adrestir,<\/li>\n<li>Internet servis sa\u011flay\u0131c\u0131lar\u0131 taraf\u0131ndan y\u00f6netilir ve genelde \u00fccretlidir,<\/li>\n<li>Umumi IP adresinizi &#8220;what is my ip&#8221; gibi servisleri kullanarak \u00f6\u011frenebilirsiniz ya da router&#8217;\u0131n\u0131z\u0131n y\u00f6netim sayfas\u0131ndan.<\/li>\n<\/ul>\n<\/li>\n<li><strong>Cihaz\u0131m\u0131za ili\u015fkin MAC adresini belirleme:<\/strong>\n<ul>\n<li>MAC adresi, a\u011fa ba\u011fl\u0131 olan bir cihaza ili\u015ftirilmi\u015f, \u00fcreticiler taraf\u0131ndan atanan, e\u015fsiz tan\u0131t\u0131c\u0131d\u0131r. Bu adresler, alt\u0131 haneden olu\u015furlar ve \u00fcreticiyi temsil ederler. \u00d6rnek adresler genelde \u015fu \u015fekilde olur:\u00a0<strong>68:7F:74:12:34:56,<\/strong><\/li>\n<li>A\u011f ile ilgili bir bilgi i\u00e7ermez.<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p>\u015eimdi bu \u00fc\u00e7 kabiliyeti i\u00e7erisinde bar\u0131nd\u0131ran bir s\u0131n\u0131f geli\u015ftirece\u011fiz. Bu s\u0131n\u0131f sayesinde bu bilgileri elde etmenin yan\u0131 s\u0131ra, bir sonraki yaz\u0131m\u0131zda da g\u00f6rece\u011fimiz \u00fczere QML taraf\u0131nda da kullan\u0131labilece\u011fiz (elbette ufak tefek bir ka\u00e7 makyajdan sonra) bir kabiliyet s\u0131n\u0131f\u0131 olu\u015fturmu\u015f olaca\u011f\u0131z.<\/p>\n<p>\u00d6ncelikli olarak ba\u015fl\u0131k dosyam\u0131z\u0131 ve s\u0131n\u0131f\u0131m\u0131z\u0131 yazal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true\">#pragma once\r\n\r\n#include &lt;QObject&gt;\r\n#include &lt;QString&gt;\r\n#include &lt;QVector&gt;\r\n\r\n#include &lt;QNetworkAccessManager&gt;\r\n\r\nclass NetworkUtility\r\n\t: public QObject\r\n{\r\n\tQ_OBJECT\r\npublic:\r\n\tNetworkUtility();\r\n\r\n\t\/\/ Ilgili bilgileri donecek API'lerimiz\r\n\tQString getPublicIPAddress();\r\n\tQString getPrivateIPAddress();\r\n\tQVector&lt;QString&gt; getDeviceList();\r\n\r\nprivate slots:\r\n\t\/\/ Umumi adresimize iliskin almis oldugumuz cevap\r\n\tvoid gotReply(QNetworkReply* networkReply);\r\n\r\nprivate:\r\n\t\/\/ Umumi IP adresimiz\r\n\tQString mPublicIP;\r\n\r\n\t\/\/ Ozel IP adresimiz\r\n\tQString mPrivateIP;\r\n\r\n\t\/\/ Kullanilabilir cihazlarin mac adreslerinin listesi\r\n\tQVector&lt;QString&gt; mDeviceAddresses;\r\n\r\n\t\/\/ Umumi IP'yi ogrenmek icin kullacagimiz servis iletisimine dair araci sinifimiz\r\n\tQNetworkAccessManager mManager;\r\n};<\/pre>\n<p>Evet, art\u0131k bu metotlar\u0131n i\u00e7erisini doldurman\u0131n vakti geldi. A\u015fa\u011f\u0131da, ilgili kod par\u00e7alar\u0131n\u0131 bulabilirsiniz:<\/p>\n<pre class=\"lang:c++ decode:true\">#include \"NetworkUtility.h\"\r\n\r\n#include &lt;QNetworkInterface&gt;\r\n#include &lt;QNetworkReply&gt;\r\n#include &lt;QNetworkRequest&gt;\r\n#include &lt;QUrlQuery&gt;\r\n#include &lt;QJsonObject&gt;\r\n#include &lt;QJsonDocument&gt;\r\n\r\nNetworkUtility::NetworkUtility()\r\n\t: mManager{this}\r\n{\r\n\t\/\/ Cevabimizin gelecegi slotu atayal\u0131m\r\n\tconnect(&amp;mManager, SIGNAL(finished(QNetworkReply*)), SLOT(gotReply(QNetworkReply*)));\r\n\r\n\t\/\/ Umumi IP sorgulama icin http:\/\/api.ipify.org i kullanacagiz. Bu servisi JSON formatinda alip isleyecegiz\r\n\tmManager.get(QNetworkRequest(QUrl(\"http:\/\/api.ipify.org?format=json\")));\r\n\r\n\t\/\/ Cihazlara iliskin mac adreslerini sorgulayalim\r\n\tforeach(QNetworkInterface netInterface, QNetworkInterface::allInterfaces())\r\n\t{\r\n\t\t\/\/ Loopback olmayan cihazlarin MAC adreslerini ve tabiki adresleri bos olmayanlari alalim lutfen\r\n\t\tif (!(netInterface.flags() &amp; QNetworkInterface::IsLoopBack))\r\n\t\t{\r\n\t\t\tif (netInterface.hardwareAddress() != \"\")\r\n\t\t\t\tmDeviceAddresses.append(\"&lt;\" + netInterface.name() + \"&gt; \" + netInterface.hardwareAddress());\r\n\t\t}\r\n\t}\r\n}\r\n\r\nvoid NetworkUtility::gotReply(QNetworkReply* networkReply)\r\n{\r\n\tnetworkReply-&gt;deleteLater();\r\n\r\n\tif (networkReply-&gt;error() != QNetworkReply::NoError)\r\n\t{\r\n\t\t\/\/ Hatali bir durum olustu. Neymis bakalim\r\n\t\tqDebug() &lt;&lt; \"Error: \" &lt;&lt; networkReply-&gt;error();\r\n\t}\r\n\telse\r\n\t{\r\n\t\t\/\/ JSON formatinda gelen cevabi isleyerek adresi alalim\r\n\t\tmPublicIP = QHostAddress(QJsonDocument::fromJson(networkReply-&gt;readAll()).object().value(\"ip\").toString()).toString();\r\n\t\t\r\n\t\tqDebug() &lt;&lt; \"Public IP: \" &lt;&lt; mPublicIP;\r\n\t}\r\n}\r\n\r\nQString NetworkUtility::getPublicIPAddress()\r\n{\r\n\treturn mPublicIP;\r\n}\r\n\r\nQString NetworkUtility::getPrivateIPAddress()\r\n{\r\n\tQString result;\r\n\tconst QHostAddress &amp;localhost = QHostAddress(QHostAddress::LocalHost);\r\n\r\n\tfor (const QHostAddress &amp;address : QNetworkInterface::allAddresses())\r\n\t{\r\n\t\tif (address.protocol() == QAbstractSocket::IPv4Protocol &amp;&amp; address != localhost)\r\n\t\t{\r\n\t\t\tmPrivateIP = address.toString();\r\n\t\t\tresult = mPrivateIP;\r\n\t\t\tbreak;\r\n\t\t}\r\n\t}\r\n\r\n\treturn result;\r\n}\r\n\r\nQVector&lt;QString&gt; NetworkUtility::getDeviceList()\r\n{\r\n\treturn mDeviceAddresses;\r\n}<\/pre>\n<p>Burada \u00f6ncelikle umumi IP adresini elde etmek i\u00e7in izledi\u011fimiz y\u00f6nteme dair bir iki kelam edeyim. Daha \u00f6nce de bahsetti\u011fim gibi, bunu \u00f6\u011frenmek i\u00e7in \u00e7e\u015fitli web servislerini kullanabilirsiniz. Burada da ben\u00a0<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"http:\/\/api.ipify.org\">http:\/\/ipify.org<\/a><\/strong><\/span> adresini kulland\u0131m. Bu servis ile bir \u00e7ok programlama dilini kullanarak IP adresini sorgulayabilirsiniz.<\/p>\n<p>\u0130lgili istek metnini olu\u015fturup\u00a0\u00a0<em>QNetworkAccessManager<\/em>\u00a0nesnesi arac\u0131l\u0131\u011f\u0131 ile bu servise g\u00f6nderiyoruz. Bunun cevab\u0131n\u0131 ayr\u0131 bir slot arac\u0131l\u0131\u011f\u0131 ile alaca\u011f\u0131z. Gelen cevap JSON format\u0131nda ve a\u015fa\u011f\u0131daki gibi olacakt\u0131r. Burada da yine sevgili QT&#8217;nin JSON kabiliyetlerini kullanarak aranan adresimizi elde edebiliyoruz.<\/p>\n<pre class=\"lang:c++ decode:true \">{\"ip\":\"AA.BB.CC.DD\"}<\/pre>\n<p>MAC adreslerini sorgulamak i\u00e7in ise\u00a0<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/qnetworkinterface.html\">QNetworkInterface<\/a> <\/strong><\/span>s\u0131n\u0131f\u0131n\u0131 kullan\u0131yoruz. Bu s\u0131n\u0131f arac\u0131l\u0131\u011f\u0131 ile cihaz\u0131m\u0131za ba\u011fl\u0131 a\u011f ayg\u0131tlar\u0131na ili\u015fkin bilgileri sorgulayabiliyoruz. Burada ihtiyac\u0131n\u0131za g\u00f6re\u00a0<em>QNetworkInterface::InterfaceFlag<\/em> ve\u00a0<em>QNetworkInterface::InterfaceType<\/em> de\u011ferlerini kontrol etmeniz gerekebilir. A\u015fa\u011f\u0131da ilgili API sayfas\u0131ndan, kullanma ihtimaliniz y\u00fcksek olanlar\u0131 buraya ekliyorum. Tam liste i\u00e7in, verdi\u011fim ba\u011flant\u0131ya bakabilirsiniz.<\/p>\n<p>Bu arada, \u00f6zel IP adresimizi <em>getPrivateIPAddress()\u00a0<\/em>metodu arac\u0131l\u0131\u011f\u0131 ile bulmak i\u00e7in de bu de\u011ferleri kulland\u0131\u011f\u0131m\u0131z\u0131\u00a0g\u00f6rebilirsiniz.<\/p>\n<p>QNetworkInterface::InterfaceFlag de\u011ferleri:<\/p>\n<table class=\"valuelist\">\n<tbody>\n<tr class=\"odd\" valign=\"top\">\n<th class=\"tblConst\">Constant<\/th>\n<th class=\"tblval\">Value<\/th>\n<th class=\"tbldscr\">Description<\/th>\n<\/tr>\n<tr>\n<td class=\"topAlign\"><code>QNetworkInterface::IsUp<\/code><\/td>\n<td class=\"topAlign tblval\"><code>0x1<\/code><\/td>\n<td class=\"topAlign\">the network interface is active<\/td>\n<\/tr>\n<tr>\n<td class=\"topAlign\"><code>QNetworkInterface::IsRunning<\/code><\/td>\n<td class=\"topAlign tblval\"><code>0x2<\/code><\/td>\n<td class=\"topAlign\">the network interface has resources allocated<\/td>\n<\/tr>\n<tr>\n<td class=\"topAlign\"><code>QNetworkInterface::IsLoopBack<\/code><\/td>\n<td class=\"topAlign tblval\"><code>0x8<\/code><\/td>\n<td class=\"topAlign\">the network interface is a loopback interface: that is, it&#8217;s a virtual interface whose destination is the host computer itself<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>QNetworkInterface::InterfaceType de\u011ferleri:<\/p>\n<table class=\"valuelist\">\n<tbody>\n<tr class=\"odd\" valign=\"top\">\n<th class=\"tblConst\">Constant<\/th>\n<th class=\"tblval\">Value<\/th>\n<th class=\"tbldscr\">Description<\/th>\n<\/tr>\n<tr>\n<td class=\"topAlign\"><code>QNetworkInterface::Unknown<\/code><\/td>\n<td class=\"topAlign tblval\"><code>0<\/code><\/td>\n<td class=\"topAlign\">The interface type could not be determined or is not one of the other listed types.<\/td>\n<\/tr>\n<tr>\n<td class=\"topAlign\"><code>QNetworkInterface::Loopback<\/code><\/td>\n<td class=\"topAlign tblval\"><code>1<\/code><\/td>\n<td class=\"topAlign\">The virtual loopback interface, which is assigned the loopback IP addresses (127.0.0.1, ::1).<\/td>\n<\/tr>\n<tr>\n<td class=\"topAlign\"><code>QNetworkInterface::Virtual<\/code><\/td>\n<td class=\"topAlign tblval\"><code>2<\/code><\/td>\n<td class=\"topAlign\">A type of interface determined to be virtual, but not any of the other possible types. For example, tunnel interfaces are (currently) detected as virtual ones.<\/td>\n<\/tr>\n<tr>\n<td class=\"topAlign\"><code>QNetworkInterface::Ethernet<\/code><\/td>\n<td class=\"topAlign tblval\"><code>3<\/code><\/td>\n<td class=\"topAlign\">IEEE 802.3 Ethernet interfaces, though on many systems other types of IEEE 802 interfaces may also be detected as Ethernet (especially Wi-Fi).<\/td>\n<\/tr>\n<tr>\n<td class=\"topAlign\"><code>QNetworkInterface::Wifi<\/code><\/td>\n<td class=\"topAlign tblval\"><code>8<\/code><\/td>\n<td class=\"topAlign\">IEEE 802.11 Wi-Fi interfaces. Note that on some systems,\u00a0<span style=\"color: #008000;\"><strong><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qt-5\/qnetworkinterface.html\">QNetworkInterface<\/a>\u00a0<\/strong><\/span>may be unable to distinguish regular Ethernet from Wi-Fi and will not return this enum value.<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>&nbsp;<\/p>\n<p>\u015eimdi de, bu s\u0131n\u0131f\u0131n \u00f6rnek kullan\u0131m\u0131na da bir g\u00f6z atal\u0131m:<\/p>\n<pre class=\"lang:c++ decode:true\">#include &lt;QApplication.h&gt;\r\n\r\n#include \"NetworkUtility.h\"\r\n\r\nint main(int argc, char *argv[])\r\n{\r\n\tQApplication a(argc, argv);\r\n\r\n\tNetworkUtility utility;\r\n\r\n\tqDebug() &lt;&lt; \"Private IP: \" &lt;&lt; utility.getPrivateIPAddress();\r\n\r\n\tauto listOfDevices = utility.getDeviceList();\r\n\r\n\tqDebug() &lt;&lt; \"Device Mac Address List: \";\r\n\tint deviceIndex = 1;\r\n\tfor (auto&amp; deviceMac : listOfDevices)\r\n\t\tqDebug() &lt;&lt; \"Device \" &lt;&lt; deviceIndex++ &lt;&lt; \": \" &lt;&lt; deviceMac;\r\n\r\n\treturn a.exec();\r\n}\r\n<\/pre>\n<p>Bu kodu \u00e7al\u0131\u015ft\u0131rd\u0131\u011f\u0131n\u0131zda a\u015fa\u011f\u0131daki gibi bir \u00e7\u0131kt\u0131 alacaks\u0131n\u0131z:<\/p>\n<pre class=\"lang:ps decode:true \">Private IP:  \"192.168.0.42\"\r\nDevice Mac Address List:\r\nDevice  1 :  \"&lt;ethernet_32769&gt; 04:D4:C4:4B:XX:YY\"\r\nDevice  2 :  \"&lt;ethernet_32770&gt; 00:FF:CF:BF:XX:YY\"\r\nPublic IP:  \"178.YOUR.IP.ADDRESS\"<\/pre>\n<h2><span style=\"color: #0000ff;\"><strong>QT Creator Klavye K\u0131sa Yollar\u0131<\/strong><\/span><\/h2>\n<p>Evet arkada\u015flar bir \u00f6nceki yaz\u0131mda Visual Studio kullanarak QT uygulamalar\u0131n\u0131 geli\u015ftiriyordum. Bir s\u00fcredir, \u00f6zellikli \u00e7oklu platformlar i\u00e7in geli\u015ftirdi\u011fim QT uygulamalar\u0131 i\u00e7in, QT creator kullanmaya ba\u015flad\u0131m. Her ne kadar Visual Studio kadar olmasa da QT yaz\u0131l\u0131m geli\u015ftirme i\u00e7in gayet yeterli. Bu anlamda, ilk bakt\u0131\u011f\u0131m \u015feylerden birisi de klavye k\u0131sa yollar\u0131 oldu. A\u015fa\u011f\u0131da ba\u015fka bir kaynaktan buldu\u011fum, k\u0131sa ve \u00f6z bir k\u0131sa yol listesi bulabilirsiniz. Bir k\u0131s\u0131m k\u0131sa yollar\u0131n, Visual Studio ile ayn\u0131 oldu\u011funu, dikkatli takip\u00e7ilerim hemen fark edecektir.<\/p>\n<p id=\"zOshpuW\"><img loading=\"lazy\" decoding=\"async\" width=\"467\" height=\"485\" class=\"alignnone size-full wp-image-1576 \" src=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/12\/img_5dfa9d21ac6bd.png\" alt=\"\" srcset=\"https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/12\/img_5dfa9d21ac6bd.png 467w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/12\/img_5dfa9d21ac6bd-289x300.png 289w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/12\/img_5dfa9d21ac6bd-150x156.png 150w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/12\/img_5dfa9d21ac6bd-400x415.png 400w, https:\/\/www.yazilimperver.com\/wp-content\/uploads\/2019\/12\/img_5dfa9d21ac6bd-200x208.png 200w\" sizes=\"auto, (max-width: 467px) 100vw, 467px\" \/><\/p>\n<p>Tam liste i\u00e7in\u00a0<strong><span style=\"color: #008000;\"><a style=\"color: #008000;\" href=\"https:\/\/doc.qt.io\/qtcreator\/creator-keyboard-shortcuts.html\">https:\/\/doc.qt.io\/qtcreator\/creator-keyboard-shortcuts.html<\/a><\/span><\/strong> adresine bir g\u00f6z atman\u0131zda fayda var.<\/p>\n<p>&nbsp;<\/p>\n<p>Evet arkada\u015flar bir yaz\u0131m\u0131n daha sonuna geldik. Bundan sonra QT ve QML entegrasyonu konusunda de\u011finmeyi planl\u0131yorum. Ayr\u0131ca a\u011f programlama \u00e7al\u0131\u015fmalar\u0131n\u0131z i\u00e7in \u00e7ok faydal\u0131 olaca\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnd\u00fc\u011f\u00fcm bir yaz\u0131l\u0131m\u0131m\u0131 da yak\u0131nda sayfamdan duyuraca\u011f\u0131m.<\/p>\n<p>Ben yaz\u0131l\u0131mperver, bir sonraki g\u00f6r\u00fc\u015fmemize kadar kendinize iyi bak\u0131n, bol kodlu g\u00fcnler :D<\/p>","protected":false},"excerpt":{"rendered":"<p>Arkada\u015flar bug\u00fcn sizler ile QT ile ilgili bir ka\u00e7 kod par\u00e7as\u0131 payla\u015fmak istiyorum. Bundan \u00f6nce bir ka\u00e7 yaz\u0131mda, soket programlama ve geli\u015ftirdi\u011fim bir tak\u0131m kabiliyetler ile ilgili sizlerle baz\u0131 payla\u015f\u0131mlarda bulunmu\u015ftum. Bu yaz\u0131lar\u0131mda, Qt ve C++ kullanarak TCP istemci ve sunucu soketlerini nas\u0131l olu\u015fturabilece\u011fimize, kod \u00fczerinden ve tasar\u0131mc\u0131y\u0131 kullanarak nas\u0131l grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fcne sahip uygulamalar&#8230; <a class=\"more-link\" href=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/\">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":[653,654,649,657,652,650,651,656,471,647,648,655],"class_list":["post-1561","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-c","category-modern-c","tag-asprintf","tag-hexadecimal-representation","tag-ip-address","tag-ipify","tag-mac-address","tag-private-ip","tag-public-ip","tag-qnetworkaccessmanager","tag-qt","tag-qt-creator","tag-qt-network-programming","tag-qtextstream"],"yoast_head":"<!-- This site is optimized with the Yoast SEO plugin v21.0 - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>Haftal\u0131k C++ 22 - Qt Kod Par\u00e7alar\u0131 - I - 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\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"[:tr]Haftal\u0131k C++ 22 - Qt Kod Par\u00e7alar\u0131 - I[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"og:description\" content=\"Arkada\u015flar bug\u00fcn sizler ile QT ile ilgili bir ka\u00e7 kod par\u00e7as\u0131 payla\u015fmak istiyorum. Bundan \u00f6nce bir ka\u00e7 yaz\u0131mda, soket programlama ve geli\u015ftirdi\u011fim bir tak\u0131m kabiliyetler ile ilgili sizlerle baz\u0131 payla\u015f\u0131mlarda bulunmu\u015ftum. Bu yaz\u0131lar\u0131mda, Qt ve C++ kullanarak TCP istemci ve sunucu soketlerini nas\u0131l olu\u015fturabilece\u011fimize, kod \u00fczerinden ve tasar\u0131mc\u0131y\u0131 kullanarak nas\u0131l grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fcne sahip uygulamalar... Continue reading &#8594;\" \/>\n<meta property=\"og:url\" content=\"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/\" \/>\n<meta property=\"og:site_name\" content=\"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2019-12-18T21:56: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=\"11 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\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/\"},\"author\":{\"name\":\"yaz\u0131l\u0131mperver\",\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"headline\":\"Haftal\u0131k C++ 22 &#8211; Qt Kod Par\u00e7alar\u0131 &#8211; I\",\"datePublished\":\"2019-12-18T21:56:34+00:00\",\"dateModified\":\"2019-12-18T21:56:34+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/\"},\"wordCount\":1706,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb\"},\"keywords\":[\"asprintf\",\"hexadecimal representation\",\"IP Address\",\"ipify\",\"MAC Address\",\"private IP\",\"public IP\",\"QNetworkAccessManager\",\"Qt\",\"Qt creator\",\"Qt Network programming\",\"QTextStream\"],\"articleSection\":[\"C++\",\"Modern C++\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/#respond\"]}]},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/\",\"url\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/\",\"name\":\"[:tr]Haftal\u0131k C++ 22 - Qt Kod Par\u00e7alar\u0131 - I[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131\",\"isPartOf\":{\"@id\":\"https:\/\/www.yazilimperver.com\/#website\"},\"datePublished\":\"2019-12-18T21:56:34+00:00\",\"dateModified\":\"2019-12-18T21:56:34+00:00\",\"breadcrumb\":{\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Ana sayfa\",\"item\":\"https:\/\/www.yazilimperver.com\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"Haftal\u0131k C++ 22 &#8211; Qt Kod Par\u00e7alar\u0131 &#8211; I\"}]},{\"@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]Haftal\u0131k C++ 22 - Qt Kod Par\u00e7alar\u0131 - I[:] - 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\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/","og_locale":"tr_TR","og_type":"article","og_title":"[:tr]Haftal\u0131k C++ 22 - Qt Kod Par\u00e7alar\u0131 - I[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","og_description":"Arkada\u015flar bug\u00fcn sizler ile QT ile ilgili bir ka\u00e7 kod par\u00e7as\u0131 payla\u015fmak istiyorum. Bundan \u00f6nce bir ka\u00e7 yaz\u0131mda, soket programlama ve geli\u015ftirdi\u011fim bir tak\u0131m kabiliyetler ile ilgili sizlerle baz\u0131 payla\u015f\u0131mlarda bulunmu\u015ftum. Bu yaz\u0131lar\u0131mda, Qt ve C++ kullanarak TCP istemci ve sunucu soketlerini nas\u0131l olu\u015fturabilece\u011fimize, kod \u00fczerinden ve tasar\u0131mc\u0131y\u0131 kullanarak nas\u0131l grafiksel kullan\u0131c\u0131 aray\u00fcz\u00fcne sahip uygulamalar... Continue reading &#8594;","og_url":"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/","og_site_name":"Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","article_published_time":"2019-12-18T21:56: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":"11 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/#article","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/"},"author":{"name":"yaz\u0131l\u0131mperver","@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"headline":"Haftal\u0131k C++ 22 &#8211; Qt Kod Par\u00e7alar\u0131 &#8211; I","datePublished":"2019-12-18T21:56:34+00:00","dateModified":"2019-12-18T21:56:34+00:00","mainEntityOfPage":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/"},"wordCount":1706,"commentCount":0,"publisher":{"@id":"https:\/\/www.yazilimperver.com\/#\/schema\/person\/6497f6de4df6ba469748b861a2b3fcdb"},"keywords":["asprintf","hexadecimal representation","IP Address","ipify","MAC Address","private IP","public IP","QNetworkAccessManager","Qt","Qt creator","Qt Network programming","QTextStream"],"articleSection":["C++","Modern C++"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/#respond"]}]},{"@type":"WebPage","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/","url":"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/","name":"[:tr]Haftal\u0131k C++ 22 - Qt Kod Par\u00e7alar\u0131 - I[:] - Yaz\u0131l\u0131mperver&#039;in D\u00fcnyas\u0131","isPartOf":{"@id":"https:\/\/www.yazilimperver.com\/#website"},"datePublished":"2019-12-18T21:56:34+00:00","dateModified":"2019-12-18T21:56:34+00:00","breadcrumb":{"@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/www.yazilimperver.com\/index.php\/2019\/12\/18\/haftalik-c-22-qt-kod-parcalari-i\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Ana sayfa","item":"https:\/\/www.yazilimperver.com\/"},{"@type":"ListItem","position":2,"name":"Haftal\u0131k C++ 22 &#8211; Qt Kod Par\u00e7alar\u0131 &#8211; I"}]},{"@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\/1561","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=1561"}],"version-history":[{"count":15,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1561\/revisions"}],"predecessor-version":[{"id":1579,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/posts\/1561\/revisions\/1579"}],"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=1561"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/categories?post=1561"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.yazilimperver.com\/index.php\/wp-json\/wp\/v2\/tags?post=1561"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}