رفتن به مطلب
مرجع رسمی سی‌پلاس‌پلاس ایران

جستجو در تالارهای گفتگو

در حال نمایش نتایج برای برچسب های 'کتابخانه'.



تنظیمات بیشتر جستجو

  • جستجو بر اساس برچسب

    برچسب ها را با , از یکدیگر جدا نمایید.
  • جستجو بر اساس نویسنده

نوع محتوا


آی‌او‌استریم

چیزی برای نمایش وجود ندارد

چیزی برای نمایش وجود ندارد

تالارهای گفتگو

  • انجمن‌های آی او استریم
    • اخبار و اعلامیه‌های سایت
    • اسناد و قوانین مرجع
    • جلسات و دوره‌همی‌های آنلاین
    • پادکست‌های آموزشی
    • معرفی محصولات نوشته شده‌ بومی
    • مرکز نظرسنجی
    • مقالات و اسناد مشاوره‌ای
    • مرکز چالش برانگیز برنامه‌نویسان
    • رمز‌های موفقیت
    • ابزار‌ها و نرم‌افزارهای کاربردی برنامه‌نویسان حرفه‌ای
  • برنامه نویسی در C و ‏++C
    • سوالات عامیانه در رابطه با ++C مدرن
    • کتابخانه‌های استاندارد STL
    • کتابخانه بوست (Boost)
    • کتابخانه کیوت (Qt)
    • کتابخانه‌‌ی SDL
    • کتابخانه‌های گرافیکی Vulkan, OpenGL, Metal, Direct3D
    • کتابخانه‌‌ی OpenCV
    • کتابخانه‌‌ی Cuda
    • کتابخانه‌‌ی OpenMP
    • کتابخانه‌‌ی OpenCL
    • کتابخانه‌های دیگر
    • کامپایلر‌ها
    • کتابخانهٔ SFML
    • ابزار‌ها
  • استارتاپی و کسب‌و‌کار
    • استارتاپ‌ها
    • سرمایه گذاری
    • شتاب دهنده‌ها
    • پارک‌های علم و فناوری و مراکز رشد
    • مصاحبه با استارت‌آپ‌ها
    • قوانین حقوقی
    • داستان‌های موفقیت
    • کارآفرینان و متخصصین
    • مشاوره اجرای کسب‌وکار
    • اخبار حوزه‌ی استارتا‌پی
    • آگهی‌های استخدامی
  • ابزار‌های ساخت و ساز
    • ابزار CMake
    • ابزار QMake
    • ابزار Qbs
    • ابزار Make و Autotools
  • طراحی و توسعه وب
  • طراحی و توسعه وب اپلیکیشن‌ها
    • طراحی و توسعه در Angular
    • طراحی و توسعه در React.JS
    • طراحی و توسعه در Vue.JS
  • طراحی و توسعه موبایل و اِمبِد‌ها و تلوزیون‌ها
    • برنامه نویسی تحت محصولات اپل
    • برنامه نویسی تحت محصولات گوگل
    • طراحی و توسعه تحت محصولات دیگر
  • برنامه‌نویسی سطح پایین و سیستم عامل‌ها
    • سیستم عامل‌های آزاد
    • سیستم عامل‌های تجاری
    • مباحث آموزشی مرتبط با سیستم‌عامل
  • شبکه و اینترنت
    • مباحث و منابع آموزشي
    • سوالات و مشکلات
  • بانک‌های اطلاعاتی
  • برنامه نویسی تحت محصولات اپل
  • برنامه نویسی تحت محصولات مایکروسافت
  • طراحی و توسعه تجربه کاربری (UX) و رابط کاربری (UI)
  • سوالات و مباحث عامیانه
  • سطل آشغال

Product Groups

  • کتاب‌ها و مقالات آموزشی

تقویم ها

دسته ها

  • علمی
  • استارتاپی
  • برنامه‌نویسی
    • زبان‌های برنامه نویسی
    • معماری‌ها
  • کامپایلر و مفسر
  • محیط‌های توسعه
  • طراحی و توسعه‌ی وب
  • مجوز‌های نرم‌افزاری
  • فناوری‌ها
    • پردازش تصویر
    • اینترنت اشیاء
    • پردازش ابری (Cloud Computing)
    • چند سکویی (Cross-Platform)
    • بیگ دیتا (Big Data)
    • هوش مصنوعی (AI)
    • سخت افزار
    • نرم‌افزار و اپلیکیشن
    • اینترنت و شبکه
    • رمزنگاری
    • امبد‌ها (Embedded)
  • طراحی
    • تجربه کاربری
    • رابط کاربری

دسته ها

  • عمومی

دسته ها

  • عمومی
  • گرافیکی
  • شبکه و ارتباطات

دسته ها

  • کامپایلر‌ها
  • محیط‌های توسعه
  • کتابخانه‌ها
  • ماژول‌ها و پلاگین‌ها
  • محصولات بومی
  • کتاب‌ها و مقالات
  • زبان‌ها و ابزار‌ها
  • طراحی و گرافیک

جستجو در ...

نمایش نتایجی که شامل ...


تاریخ ایجاد

  • شروع

    پایان


آخرین بروزرسانی

  • شروع

    پایان


فیلتر بر اساس تعداد ...

تاریخ عضویت

  • شروع

    پایان


گروه


درباره من


شماره تلفن همراه


شناسه گیت‌هاب


شناسه لینکدین


شناسه پیام رسان


شهر


آدرس پستی

23 نتیجه پیدا شد

  1. کتابخانهٔ Boost: یک راهکار قدرتمند برای توسعهٔ برنامه‌های سی‌پلاس‌پلاس مقدمه کتابخانهٔ Boost یکی از مهم‌ترین ابزارها در دنیای برنامه‌نویسی سی‌پلاس‌پلاس است. این کتابخانه کاملاً رایگان بوده و مجموعه‌ای گسترده از کتابخانه‌ها و ابزارهای مفید برای توسعه‌دهندگان این زبان فراهم می‌کند. در این مقاله، به بررسی ویژگی‌ها، اهمیت و کاربرد کتابخانهٔ Boost در سی‌پلاس‌پلاس می‌پردازیم. ۱. ویژگی‌های کتابخانهٔ Boost کتابخانهٔ Boost دارای ویژگی‌های فراوانی است که آن را از سایر کتابخانه‌ها متمایز می‌کند. به برخی از این ویژگی‌ها در زیر اشاره خواهیم کرد: الف. تعداد زیادی ابزار و کتابخانه Boost شامل تعداد زیادی از کتابخانه‌ها و ابزارهای مفید است که برای تسهیل و افزایش کارایی در توسعهٔ نرم‌افزارهای سی‌پلاس‌پلاس به کار می‌روند. برخی از این کتابخانه‌ها شامل: کتابخانهٔ Boost.Filesystem: برای مدیریت فایل‌ها و دایرکتوری‌ها در سیستم عامل استفاده می‌شود. کتابخانهٔ Boost.Thread: برای پشتیبانی از نخ‌ها (Thread) و همزمان‌سازی استفاده می‌شود. کتابخانهٔ Boost.Regex: برای پردازش و مدیریت عبارات باقاعده (Regular Expressions) به کار می‌رود. ب. پشتیبانی از استانداردهای مدرن Boost به خوبی استانداردهای مدرن سی‌پلاس‌پلاس را پشتیبانی می‌کند. این کتابخانه ابزارها و قابلیت‌هایی ارائه می‌دهد که توسعه‌دهندگان را در استفاده از قابلیت‌های جدید و بهبود‌یافتهٔ زبان کمک می‌کند. با استفاده از Boost، می‌توانید از استانداردهای مدرن مانند C++11 و C++14 بهره‌برداری کنید و کدهای بهتری بنویسید. ۲. اهمیت Boost برای توسعهٔ سی‌پلاس‌پلاس کتابخانهٔ Boost اهمیت فراوانی در توسعهٔ سی‌پلاس‌پلاس دارد. به دلیل وجود ابزارها و کتابخانه‌های متنوع، Boost به توسعه‌دهندگان این زبان کمک می‌کند تا برنامه‌های قدرتمندی را با سرعت و کارایی بالا ایجاد کنند. همچنین، استفاده از Boost باعث می‌شود که کد نوشته شده توسط توسعه‌دهندگان با استانداردهای مدرن و قابلیت‌های بهبودیافتهٔ زبان همخوانی داشته باشد. ۳. کاربرد کتابخانهٔ Boost در سی‌پلاس‌پلاس کتابخانهٔ Boost در سی‌پلاس‌پلاس در بسیاری از زمینه‌ها کاربرد دارد. در ادامه به برخی از کاربردهای این کتابخانه می‌پردازیم: الف. توسعهٔ برنامه‌های شبکه Boost ابزارها و کتابخانه‌های قدرتمندی برای توسعهٔ برنامه‌های شبکه در سی‌پلاس‌پلاس فراهم می‌کند. از طریق Boost.Asio می‌توانید به راحتی بر نامه‌هایی با استفاده از پروتکل‌های مختلف شبکه مانند TCP و UDP بنویسید و با سرعت و کارایی بالا با ارتباطات شبکه کار کنید. ب. پردازش و مدیریت رشته‌ها Boost.Regex ابزاری قدرتمند برای پردازش و مدیریت رشته‌ها در سی‌پلاس‌پلاس است. این کتابخانه امکان استفاده از عبارات باقاعده را فراهم می‌کند و کار با رشته‌ها را بسیار آسان می‌کند. با استفاده از Boost.Regex، می‌توانید الگوهای مورد نظر خود را در رشته‌ها جستجو کنید و اقدامات لازم را انجام دهید. ۴. مزایای استفاده از کتابخانهٔ Boost استفاده از کتابخانهٔ Boost در توسعهٔ پروژه‌های سی‌پلاس‌پلاس دارای مزایای بسیاری است. به دلیل ویژگی‌ها و قابلیت‌های فراوان این کتابخانه، می‌توانید از مزایای زیر بهره‌برداری کنید: الف. افزایش کارایی و سرعت کتابخانهٔ Boost ابزارها و الگوریتم‌هایی را ارائه می‌دهد که می‌تواند عملکرد و کارایی برنامه‌ها را بهبود بخشید. با استفاده از این ابزارها، می‌توانید بهینه‌سازی‌های لازم را انجام داده و کارایی برنامه‌های خود را افزایش دهید. این موضوع بسیار مهم است زیرا کارایی و سرعت اجرای یک برنامه بر روی سیستم‌های حساس به زمان اهمیت بسیاری دارد. ب. پشتیبانی از چندپلتفرم کتابخانهٔ Boost بر روی چندپلتفرم قابل استفاده است و از این جهت بسیار مفید است. اگر برنامهٔ شما باید روی سیستم‌عامل‌های مختلف اجرا شود، Boost می‌تواند به شما در این مسئله کمک کند. شما می‌توانید از ابزارها و قابلیت‌های Boost استفاده کنید تا برنامهٔ خود را به طور مستقل از سیستم‌عامل مقصد اجرا کنید و از سهولت توسعه و نگهداری برخوردار شوید. ج. جامعیت و پایداری Boost یک کتابخانهٔ بسیار جامع و پایدار است. این به این معناست که شما می‌توانید به ابزارها و قابلیت‌های Boost برای پروژه‌های مختلفی با انواع نیازها و مشکلات بهره‌برداری کنید. این کتابخانه توسعه یافته و توسط جامعهٔ سی‌پلاس‌پلاس حمایت می‌شود، بنابراین می‌توانید از پشتیبانی و به‌روزرسانی‌های مداوم برخوردار شوید. ۵. کاربردهای کتابخانهٔ Boost کتابخانهٔ Boost به دلیل قابلیت‌ها و امکانات فراوان خود، در زمینه‌های مختلفی از جمله زیر استفاده می‌شود: الف. توسعهٔ برنامه‌های کاربردی Boost ابزارها و کتابخانه‌هایی را فراهم می‌کند که می‌تواند در توسعهٔ برنامه‌های کاربردی مختلف مفید باشد. مثلاً Boost.Asio برای برنامه‌نویسی شبکه، Boost.FileSystem برای کار با سیستم‌فایل و Boost.DateTime برای کار با زمان و تاریخ مورد استفاده قرار می‌گیرد. با استفاده از این ابزارها، می‌توانید برنامه‌های کاربردی پیچیده را با قابلیت‌های خاص و منحصربه‌فرد طراحی و پیاده‌سازی کنید. ب. توسعهٔ بسترهای نرم‌افزاری کتابخانهٔ Boost به عنوان یک بستر نرم‌افزاری مناسب برای توسعهٔ برنامه‌های کاربردی و تحت وب استفاده می‌شود. با استفاده از Boost، می‌توانید بسترهای نرم‌افزاری پویا و پایداری ایجاد کنید که قابلیت‌ها و خصوصیات منحصربه‌فردی داشته باشند. این کتابخانه شما را قادر می‌سازد تا بسترهای قابل گسترش، قابل تنظیم و با قابلیت انعطاف‌پذیری بالا را پیاده‌سازی کنید. ج. توسعهٔ بازی‌ها و گرافیک کامپیوتری Boost در زمینهٔ توسعهٔ بازی‌ها و گرافیک کامپیوتری نیز استفاده می‌شود. ابزارهایی مانند Boost.Geometry برای کار با هندسه و Boost.Graph برای تحلیل و پردازش گراف‌ها مورد استفاده قرار می‌گیرند. این ابزارها به توسعه‌دهندگان کمک می‌کنند تا الگوریتم‌های پیچیده را برای بازی‌ها و سیستم‌های گرافیکی پیاده‌سازی کنند و تجربهٔ کاربری بهتری را ارائه دهند. ۶.اهمیت کتابخانهٔ Boost کتابخانهٔ Boost در دنیای سی‌پلاس‌پلاس بسیار اهمیت دارد. استفاده از این کتابخانه می‌تواند توسعهٔ برنامه‌های شما را سریعتر، قابل اطمینان‌تر و کارآمدتر کند. با قابلیت‌ها و امکانات گستردهٔ Boost، می‌توانید در توسعهٔ نرم‌افزارهای پیچیده و با تعامل بالا بهترین عملکرد را به دست آورید. ۷. چگونه از کتابخانهٔ Boost بهره‌برداری کنیم؟ برای بهره‌برداری از کتابخانهٔ Boost و استفاده بهینه از قابلیت‌های آن، می‌توانید مراحل زیر را دنبال کنید: الف. نصب کتابخانه ابتدا باید کتابخانهٔ Boost را بر روی سیستم خود نصب کنید. می‌توانید نسخهٔ مناسب برای سیستم‌عامل خود را از وبسایت رسمی Boost دریافت کنید و طبق دستورالعمل‌های نصب آن را انجام دهید. ب. مستندات و منابع آموزشی بهتر است پیش از شروع استفاده از Boost، به مستندات رسمی آن مراجعه کنید. مستندات کتابخانه به شما راهنمایی دقیقی دربارهٔ ویژگی‌ها، توابع و کلاس‌های موجود در Boost ارائه می‌دهد. همچنین، می‌توانید از منابع آموزشی آنلاین و کتاب‌های مرجع موجود برای یادگیری عمیق‌تر از Boost استفاده کنید. ج. استفاده در پروژه‌ها با نصب کتابخانه و آشنایی با مستندات، می‌توانید Boost را در پروژه‌های خود استفاده کنید. در هر قسمت از پروژه که نیاز به قابلیت‌ها یا الگوریتم‌های خاصی دارید، می‌توانید به کتابخانهٔ Boost مراجعه کنید و از آن استفاده کنید. با استفاده از توابع و کلاس‌های Boost، می‌توانید کدهای کوتاهتر، بهینه‌تر و قابل نگهداری‌تری ایجاد کنید. ۸. بهترین استفاده از کتابخانهٔ Boost برای بهترین استفاده از کتابخانهٔ Boost، توصیه می‌شود: با استفاده از نسخهٔ مناسب Boost برای پروژه خود، به‌روزرسانی‌ها و بهبودهای ارائه شده را دنبال کنید. با دقت مستندات رسمی Boost کار کنید و قابلیت‌ها و توابع موجود را به‌خوبی بشناسید. از منابع آموزشی متنوع استفاده کنید تا مفاهیم و مباحث پیشرفته‌تر را بیاموزید. در صورت نیاز، از جامعهٔ سی‌پلاس‌پلاس و انجمن‌های مرتبط با Boost برای رفع سوالات و دریافت راهنمایی استفاده کنید. نتیجه‌گیری کتابخانهٔ Boost با ارائهٔ ابزارها و کتابخانه‌های مفید، اهمیت و کاربرد زیادی در توسعهٔ سی‌پلاس‌پلاس دارد. از ویژگی‌های برجستهٔ این کتابخانه می‌توان به تعداد زیادی ابزار و کتابخانه، پشتیبانی از استانداردهای مدرن و کاربردهای مختلف در برنامه‌نویسی اشاره کرد. با استفاده از Boost، توسعه‌دهندگان می‌توانند برنامه‌های قدرتمندی را با سرعت و کارایی بالا ایجاد کنند و از قابلیت‌های بهبودیافتهٔ زبان بهره‌برداری کنند. کتابخانهٔ Boost با ویژگی‌ها و قابلیت‌های منحصربه‌فرد خود، نقش بسیار مهمی در توسعهٔ پروژه‌های سی‌پلاس‌پلاس دارد. استفاده از این کتابخانه باعث می‌شود تا برنامه‌های قدرتمند، قابل اعتماد و با کارایی بالا ایجاد شوند. همچنین، Boost به توسعه‌دهندگان کمک می‌کند تا با استفاده از استانداردهای مدرن، بهترین نتایج را در توسعهٔ برنامه‌ها به دست آورند.
  2. سلام.خسته نباشید. می خوام از این کتابخانه در qt استفاده کنم و خروجی اندروید بگیرم.سیستمی هم که باهاش برنامه نویسی می کنم لینوکسی هست.باید نسخه ی اندرویدی این کتابخانه را بگیرم یا لینوکسی رو؟ چجوری داخل پروژم اضافه کنم؟ تشکر
  3. در این آموزش با کمک کتابخانه‌ی chilkat که در اینجا معرفی شده است،‌ وارد حساب کاربری خود در iostream می‌شویم!. فرم را می‌توانید به سلیقه‌ی خود طراحی کنید . که فرم ورود به این صورت است. کد: import QtQuick 2.12 import QtQuick.Controls 2.12 import QtQuick.Window 2.12 import QtQuick.Dialogs 1.2 import QtQuick.Controls.Material 2.3 ApplicationWindow{ id:window width: 300 height: 350 title: "فرم ورود" visible: true flags: Qt.FramelessWindowHint | Qt.Window x: Screen.width / 2 - width / 2 y: Screen.height / 2 - height / 2 header: Label{ id: header color: "#fff" text: "iostream" font.family: "Times New Roman" font.pointSize: 40 topPadding: -5 verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter background: Rectangle{ color: "#23ab85" } } Button { id: close x: 0 y: -6 width: 34 height: 45 icon.name: "close-icon" icon.source: "qrc:/cancel.png" icon.color: "red" highlighted: true Material.accent: Material.shade("#fff",Material.Shade100) onClicked: window.close() } Item { MessageDialog{ id:message title: "خطا" visible: false } anchors.fill: parent TextField { id: email x: 60 y: 30 width: 180 font.pointSize: 15 font.family: "Times New Roman" placeholderText: "نام کاربری یا ایمیل" Material.accent: Material.Green } TextField { id: password x: 60 y: 80 width: 180 font.pointSize: 15 font.family: "Times New Roman" placeholderText: "گذر واژه" Material.accent: Material.Green echoMode: TextField.Password } Button { id: _login x: 55 y: 140 width: 186 height: 50 text: "ورود " highlighted: true font.pointSize: 15 font.family: "Times New Roman" topPadding: 3 Material.accent: Material.shade("#3e4148",Material.Shade500) onClicked: { if(Login.login(email.text,password.text)){ userpanle._url=Login.panle() userpanle.visible=true } else{ message.text="ورود ناموفق بود!" message.visible=true } } } } footer: Label{ text: "جامعه‌ی‌ برنامه‌نویسان مٌدرن ایران" color: "#fff" height: 50 topPadding: -6 verticalAlignment: Text.AlignVCenter horizontalAlignment: Text.AlignHCenter font.pointSize: 18 font.family: "Times New Roman" background: Rectangle{ color: "#23ab85" } } UserPanle{id: userpanle; visible: false;} } اکنون یک کلاس ایجاد کنید که بتوانیم درخواست‌های خود را ارسال کنیم!. در اینجا کلاس Login و دارای دو متد ‌login و userPanel است. #ifndef LOGIN_H #define LOGIN_H #include <QObject> #include <QDesktopServices> #include <QUrl> #include <CkHttp.h> #include <CkHttpRequest.h> #include <CkHttpResponse.h> class Login : public QObject { Q_OBJECT public: explicit Login(QObject *parent = nullptr); Q_INVOKABLE bool login(const QString & email_username,const QString & password); Q_INVOKABLE QString userPanel(); signals: public slots: private: QString m_finalRedirectUrl; CkHttp m_http; }; #endif // LOGIN_H متد login دو آرگومان ورودی دریافت می‌کند: ۱.نام کاربری یا ایمیل 2. گذرواژه این درمورد بعضی از وبسایت‌ها صدق نمی‌کند!.یعنی علاوه پُر کردن فیلد‌های خواسته شده، فیلد‌های دیگری را هم باید پُر کنید تا به شما اجازه ورود بدهند!. متد دوم مربوط به صحفه‌ای است که ما درخواست کرده‌ایم و نتیجه برگشت داده می‌شود!. در ادامه بیشتر توضیح خواهم داد. تابع login را به این صورت تکمیل می‌کنیم!. #include "login.h" #include <QDebug> Login::Login(QObject *parent) : QObject(parent) { if(m_http.UnlockComponent("30-day trial")!=true) qDebug()<<m_http.lastErrorText(); } bool Login::login(const QString &emailـusername, const QString &password) { m_request.AddParam("auth",emailـusername.toUtf8()); m_request.AddParam("password",password.toUtf8()); m_request.put_Path("/login"); CkHttpResponse* m_response; m_response= m_http.SynchronousRequest("www.iostream.ir",443,true,m_request); if(m_response->get_LastMethodSuccess()!=true) { qDebug()<<m_response->lastErrorText(); return false; } m_finalRedirectUrl= m_response->finalRedirectUrl(); userPanel(); delete m_response; return true; } QString Login::userPanel() { QDesktopServices::openUrl(QUrl(m_finalRedirectUrl)); // return m_finalRedirectUrl; } کلاس CkHttpRequest باید هر بار درخواستی را آماده، و سپس با متد SynchronousRequest از کلاس CkHttp ارسال کند. با استفاده از متد AddParam پارامتر ‌های لازم را اضافه می‌کنیم، مرورگر خود را باز کنید وارد صحفه‌ی ورود به حساب کاربری ‌شوید،‌ بر روی فیلد اول(نام کاربری یا ایمیل) کلیک راست کرده و گزینه Inspect را انتخاب کنید. تگ مربوط به این فیلد نمایش داده می‌شود. <input type="text" placeholder="نام کاربری یا ایمیل" name="auth" id="auth" value="*************"> و فیلد دوم(گذرواژه) هم به همین صورت. <input type="password" placeholder=" گذرواژه" name="password" id="password" value="********"> فرض بر این گرفته می شود شما با HTML آشنایی دارید!. متد AddParam دو ارگومان ورودی دریافت می‌کند: 1.نام فیلد 2.مقدار فیلد به ویژگی نام(name) دقت کنید،‌ با این ویژگی و نامی که برای آن انتخاب می‌کنیم می‌توانیم به مقدار(value) آن دسترسی داشته باشیم! پس ورودی اول متد AddParam برابر با نام فیلد می‌شود(auth) و ورودی دوم هم مقدار فیلد است،‌ که در اینجا مقادیر از پارامتر‌های تابع ‌login دریافت می‌شوند. با متد put_Path مسیر صحفه‌ی مورد نظر را مشخص می‌کنیم، که صحفه‌ی مورد نظر ما ‌login/ است. از کلاس CkHttpResponse برای دریافت پاسخ استفاده می‌کنیم، هنگامی که ما درخواستی را ارسال می‌کنیم، یک پاسخ در قالب یک شئ از کلاس ‌CkHttpResponse برگشت داده می‌شود. پاسخ می‌تواند موفقیت آمیز باشد یا نباشد! که این مورد می‌تواند با متد get_LastMethodSuccess بررسی شود. در نهایت درخواست خود را ارسال می‌کنیم! متد SynchronousRequest چهار آرگومان ورودی دریافت می‌کند: 1.نام میزبان 2.پورت ورودی 3.تایید کردن یا نکردن گواهینامه‌ی ‌ssl 4.درخواستی را که از قبل اماده کرده‌ایم نام میزبان در این مثال www.iostream.ir است. پورت ورودی 443 است که پروتکل ‌HTTPS از ان استفاده می‌کند. می‌توانید تایید کنید که اطلاعات شما بصورت رمزنگاری شده فرستاده شوند یا نه. درخواستی را که از قبل اماده کردیم m_request. با استفاده از متد finalRedirectUrl اخرین صحفه‌ای که کاربر منتقل شده است برگشت داده می‌شود، که در متغییر m_finalRedirectUrl ذخیره خواهد شد. اکنون می توانیم با استفاده از متد openUrl از کلاس QDesktopServices ادرس صحفه‌ی ذخیره شده را در مرورگر باز کنیم!. یا می‌توانید از ‌‌ WebEngineView در ‌qml برای نمایش استفاده کنید. به این صورت: import QtWebEngine 1.7 import QtQuick.Window 2.3 Window{ width: 1000 height: 600 title: "userPanel" visible: true property string _url: "" WebEngineView{ anchors.fill: parent url: _url } }
  4. سید محمد عباسی

    با سلام خدمت شما دوستان، درخدمت شما هستم با آموزش کتابخانه‌ی chilkat، کتابخانه‌ای مفید و کارآمد برای کار با شبکه، که بیشترین تمرکز را در شبکه دارد! به راحتی می‌توانید با این کتابخانه کار کنید. کافیست کمی به زیر و بم این کتابخانه اشنا شوید تا انچه برنامه شما به شبکه نیاز دارد براورده سازد! در این اموزش نحوه اضافه کردن کتابخانه در محیط Qt Creator همراه با یک مثال ساده دانلود فایل را یاد خواهید گرفت. ابتدا نسخه متناسب با کامپایلر خود را از اینجا دانلود کنید و سپس گام به گام این مراحل را انجام دهید. 1.روی پروژه خودتان راست کلیک کنید و گزینه AddLibrary را انتخاب کنید.همانند تصویر زیر: 2.گزینه ExternalLibrary را انتخاب کنید، روی Next کلیک کنید. 3.تیک مربوط به نوع سیستم عامل خود را انتخاب کنید(در این مثال Linux) و فایل libchillat-9.5.0.a را انتخاب کنید، روی Next کلیک کنید. 4.در اینجا با کلیک بر روی Next کتابخانه را به پروژه خود اضافه کنید. 5. برنامه را اجرا کنید. فرم را به سلیقه‌ی خود می‌توانید طراحی کنید. اکنون یک کلاس با نام دلخواه اضافه کنید که در این مثال کلاس download است، ما فقط به یک تابع نیاز خواهیم داشت که ادرس فایل و مکان ذخیره فایل را گرفته و فایل را دانلود کند و در مکان مورد نظر ذخیره کند.پس چیزی شبیه به این را خواهیم داشت! #ifndef DOWNLOAD_H #define DOWNLOAD_H #include <QObject> #include <QFileDialog> #include <CkHttp.h> class Download : public QObject { Q_OBJECT public: explicit Download(QObject *parent = nullptr); Q_INVOKABLE bool donwloadFile(const QString & url); signals: public slots: private: QString m_filePath; bool m_success; CkHttp m_http; }; #endif // DOWNLOAD_H از Q_INVOKABLE به منظور دسترسی متد در فایل qml استفاده می‌کنیم، و از متغیر های m_filePath برای ذخیره مکان و m_success برای دانلود و عدم دانلود! از کلاس CkHttp برای دانلود فایل استفاده خواهیم کرد، این کلاس متد‌‌های مختلفی را فراهم می‌کند، که هر کدام کاربردی دارند! برای دانلود ما از متد Download استفاده می‌کنیم، این متد در صورت موفقیت در دانلود فایل true و عدم دانلود false را برگشت می‌دهد. در فایل cpp به این صورت تابع خود را تکمیل می‌کنیم! #include "download.h" #include <QDebug> Download::Download(QObject *parent) : QObject(parent) { m_success= m_http.UnlockComponent("30-day trial"); if(m_success!=true) qDebug()<<"Not UnlockComponent Error: "<<m_http.lastErrorText(); } bool Download::donwloadFile(const QString &url) { m_filePath=QFileDialog::getSaveFileName(nullptr,"محل ذخیره فایل را انتخاب کنید"); if(m_filePath!="") { m_success= m_http.Download(url.toUtf8(),m_filePath.toUtf8()); if(m_success!=true) { qDebug()<<"Error Download: "<<m_http.lastErrorText(); return false; } qDebug()<<"ContentType: "<<m_http.lastContentType(); return true; } return false; } بعضی از کلاس های این کتابخانه نیاز به مجوز دارند! بدون مجوز نمی‌توان از کلاس ها استفاده کرد! در کانستراکت کلاس ابتدا با متد UnlockComponent به مدت 30 روز رایگان استفاده می‌کنیم(30-day trial). در صورتی که مجوز به ما داده شود متغیر m_success برابر با true خواهد شد، در غیر اینصورت می‌توان با متد lastErrorText خطا ها را مشاهده کرد و نسبت به رفع آن اقدام کرد.با استفاده از متد getSaveFileName از کلاس QFileDialog مکان فایل را در صورت انتخاب در متغیر m_filePath ذخیره می‌کنیم، بعد از انتخاب مکان ذخیره فایل بررسی می‌کنیم متغیر m_filePath خالی نباشد!. متد Download دو ارگومان ورودی دریافت می‌کند! 1.ادرس فایل 2. محل ذخیره فایل در صورتی که فایل با موفقیت دانلود شود با متد lastContentType نوع فایل را نمایش داده می‌شود و فایل در مکانی که از قبل انتخاب کردیم ذخیره می‌شود. به عنوان مثال می‌خواهیم قالب صحفه‌ی نخست iostream را در یک فایل txt ذخیره کنیم! پس به این صورت عمل می‌کنیم.
  5. یه سوال داشتم که خیلی وقت هست درگیرش هستم. من خودم به صورت عادی از win32 در ++C استفاده میکنم و برای ساختن حتی یه button کلی زور میزنم و کد مینویسم برای رویداد ها و لوکیشن و ... حالا بماند که برای تنظیم یک رنگ برای یک button یا text چقدرر دردسر دارم. من قبلا با زبان #C کار میکردم و با رابط گرافیکی و طراحی رابط گرافیکی اون به خوبی آشنا هستم . البته میدونم که امنیت برنامه های .net کلا ضعیف هست اما از لحاظ گرافیکی به راحتی میشه هر نوعی که بخوایم در کمترین زمان طراحی کنیم. البته اگر بخوایم باز کد ها و دستورات رو با .net بنویسیم چیز جالبی نمیشه. البته نا گفته نماند که به Qt ام برای طراحی فکر کردم اما چند تا مشکل دارد . اولی اینکه حجم برنامه رو به شدت میبره بالا . دوم تعداد فایل های برنامه رو میبره بالا . سوم من در کل IDE برنامه نویسیم در Visual studio هست و به اون بیشتر عادت دارم چون خیلی ساده تر هست نسبت به Qt و اگر بخوام پلاگین های qt رو بریزم توی vs باز هم باید به صورت کد و لوکیشن و ... انجام بدم که تقریبا مثل win32 میشه فکر کنم. من خودم شخصا برای این مشکل به این فکر افتادم که رابط گرافیکی رو با c# بنویسم و همه کد ها رو توی یه قالب dll که به زبان c++ نوشته شده از #C فراخانی کنم. نظر شما چیه؟ راه حل بهتری سراغ دارید؟
  6. سلام، بسیاری از ما زمانی که می‌خواهیم از سرویس Rest استفاده کنیم، یا صفحه‌ای از وب‌سایت را تجزیه کنیم و یا حتی زمانی که نیاز داریم یک ربات یا خزندهٔ ساده بنویسیم؛ این برای ما سوال بسیار بزرگی می‌شود که از چه روش و کتابخانه‌ای باید استفاده کنیم. همانطور که می‌دانید متاسفانه، کتابخانهٔ پیشفرض و استاندارد ++C تا قبل از اینکه نسخهٔ 2a آن ارائه شود هیچ امکانی را در رابطه با حوزهٔ شبکه ارائه نمی‌دهد. بنابراین ما مجبور هستیم تا به کمک کتابخانه‌های دیگر این زبان برنامهٔ خود را توسعه دهیم. ما نیاز داریم تا بدانیم چگونه به کمک امکانات موجود در کتابخانه‌های غیر پیش‌فرض می‌توانیم کار با شبکه را مدیریت کنیم. من فکر می‌کنم آی‌او‌استریم محل مناسبی برای نوشتن این برگهٔ تقلب در رابطه با این موضوع باشد. بنابراین در این مقاله قصد دارم برخی از روش‌های موجود تحت چند کتابخانهٔ مختص این کار را برای شما معرفی کنم. قبل از هر چیز لیست کتابخانه‌های مناسب برای این کار را در نظر داشته باشید: WinInet WinHttp Casablanca Qt POCO wxWidgets Boost.Asio libcurl neon .NET (С++/CLI) IXMLHTTPRequest HappyHttp cpp-netlib کتابخانهٔ WinInet ارائه شده توسط مایکروسافت (پشتیبانی از ویندوز ۹۸ به بعد) #include <tchar.h> #include <wininet.h> /// .... HINTERNET hIntSession = ::InternetOpen(_T("MyApp"), INTERNET_OPEN_TYPE_DIRECT, NULL, NULL, 0); HINTERNET hHttpSession = InternetConnect(hIntSession, _T("api.twitter.com"), 80, 0, 0, INTERNET_SERVICE_HTTP, 0, NULL); HINTERNET hHttpRequest = HttpOpenRequest( hHttpSession, _T("GET"), _T("1/statuses/user_timeline.xml?screen_name=twitterapi"), 0, 0, 0, INTERNET_FLAG_RELOAD, 0); TCHAR* szHeaders = _T("Content-Type: text/html\nMySpecialHeder: whatever"); CHAR szReq[1024] = ""; if( !HttpSendRequest(hHttpRequest, szHeaders, _tcslen(szHeaders), szReq, strlen(szReq))) { DWORD dwErr = GetLastError(); /// handle error } CHAR szBuffer[1025]; DWORD dwRead=0; while(::InternetReadFile(hHttpRequest, szBuffer, sizeof(szBuffer)-1, &dwRead) && dwRead) { szBuffer[dwRead] = 0; OutputDebugStringA(szBuffer); dwRead=0; } ::InternetCloseHandle(hHttpRequest); ::InternetCloseHandle(hHttpSession); ::InternetCloseHandle(hIntSession); کتابخانهٔ WinHttp ارائه شده توسط مایکروسافت (پشتیبانی از ویندوز 2000 به بعد) DWORD dwSize = 0; DWORD dwDownloaded = 0; LPSTR pszOutBuffer; BOOL bResults = FALSE; HINTERNET hSession = NULL, hConnect = NULL, hRequest = NULL; // Use WinHttpOpen to obtain a session handle. hSession = WinHttpOpen( L"WinHTTP Example/1.0", WINHTTP_ACCESS_TYPE_DEFAULT_PROXY, WINHTTP_NO_PROXY_NAME, WINHTTP_NO_PROXY_BYPASS, 0 ); // Specify an HTTP server. if( hSession ) hConnect = WinHttpConnect( hSession, L"www.microsoft.com", INTERNET_DEFAULT_HTTPS_PORT, 0 ); // Create an HTTP request handle. if( hConnect ) hRequest = WinHttpOpenRequest( hConnect, L"GET", NULL, NULL, WINHTTP_NO_REFERER, WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_FLAG_SECURE ); // Send a request. if( hRequest ) bResults = WinHttpSendRequest( hRequest, WINHTTP_NO_ADDITIONAL_HEADERS, 0, WINHTTP_NO_REQUEST_DATA, 0, 0, 0 ); // End the request. if( bResults ) bResults = WinHttpReceiveResponse( hRequest, NULL ); // Keep checking for data until there is nothing left. if( bResults ) { do { // Check for available data. dwSize = 0; if( !WinHttpQueryDataAvailable( hRequest, &dwSize ) ) printf( "Error %u in WinHttpQueryDataAvailable.\n", GetLastError( ) ); // Allocate space for the buffer. pszOutBuffer = new char[dwSize+1]; if( !pszOutBuffer ) { printf( "Out of memory\n" ); dwSize=0; } else { // Read the data. ZeroMemory( pszOutBuffer, dwSize+1 ); if( !WinHttpReadData( hRequest, (LPVOID)pszOutBuffer, dwSize, &dwDownloaded ) ) printf( "Error %u in WinHttpReadData.\n", GetLastError( ) ); else printf( "%s", pszOutBuffer ); // Free the memory allocated to the buffer. delete [] pszOutBuffer; } } while( dwSize > 0 ); } // Report any errors. if( !bResults ) printf( "Error %d has occurred.\n", GetLastError( ) ); // Close any open handles. if( hRequest ) WinHttpCloseHandle( hRequest ); if( hConnect ) WinHttpCloseHandle( hConnect ); if( hSession ) WinHttpCloseHandle( hSession ); کتابخانهٔ Casablanca ارائه شده درCodeplex (پشتیبانی از تمامی پلتفرم‌ها) http_client client(L"http://www.myhttpserver.com"); http_request request(methods::GET); client.request(request).then([](http_response response) { // Perform actions here to inspect the HTTP response... if(response.status_code() == status_codes::OK) { } }); کتابخانهٔ Qt ارائه شده درQt (پشتیبانی از تمامی پلتفرم‌ها) #include "handler.h" Handler::Handler(QObject *parent) :QObject(parent) { http = new QHttp(this); connect(http, SIGNAL(stateChanged(int)), this, SLOT(stateChanged(int))); connect(http, SIGNAL(responseHeaderReceived(QHttpResponseHeader)), this, SLOT(responseHeaderReceived(QHttpResponseHeader))); connect(http, SIGNAL(requestFinished(int,bool)), this, SLOT(requestFinished(int,bool))); } void Handler::doHttp() { http->setHost("google.com"); http->get("/"); } void Handler::stateChanged(int state) { switch(state) { case 0: qDebug() << "Unconnected"; break; case 1: qDebug() << "Host Lookup"; break; case 2: qDebug() << "Connecting"; break; case 3: qDebug() << "Sending"; break; case 4: qDebug() << "Reading"; break; case 5: qDebug() << "Connect"; break; case 6: qDebug() << "Closing"; break; } } void Handler::responseHeaderReceived(const QHttpResponseHeader &resp) { qDebug() << "Size : " << resp.contentLength(); qDebug() << "Type : " << resp.contentType(); qDebug() << "Status Code : " << resp.statusCode(); } void Handler::requestFinished(int id, bool error) { qDebug() << "Request Id : " << id; if(error) { qDebug() << "Error"; } else { qDebug() << http->readAll(); } } مثالی از نسخهٔ Qt5 void Downloader::doDownload() { manager = new QNetworkAccessManager(this); connect(manager, SIGNAL(finished(QNetworkReply*)), this, SLOT(replyFinished(QNetworkReply*))); manager->get(QNetworkRequest(QUrl("http://google.com"))); } void Downloader::replyFinished (QNetworkReply *reply) { if(reply->error() != QNetworkReply::NoError) { qDebug() << "ERROR!"; qDebug() << reply->errorString(); } else { qDebug() << reply->header(QNetworkRequest::ContentTypeHeader).toString(); qDebug() << reply->header(QNetworkRequest::LastModifiedHeader).toDateTime().toString(); qDebug() << reply->header(QNetworkRequest::ContentLengthHeader).toULongLong(); qDebug() << reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt(); qDebug() << reply->attribute(QNetworkRequest::HttpReasonPhraseAttribute).toString(); QFile file("C:/Qt/Dummy/downloaded.txt"); if(file.open(QFile::Append)) { file.write(reply->readAll()); } } reply->deleteLater(); } کتابخانهٔ Poco ارائه شده درPoco (پشتیبانی از تمامی پلتفرم‌ها) #include <Poco/Net/HTTPClientSession.h> #include <Poco/Net/HTTPRequest.h> #include <Poco/Net/HTTPResponse.h> #include <Poco/StreamCopier.h> #include <Poco/Path.h> #include <Poco/URI.h> #include <Poco/Exception.h> #include <iostream> #include <string> using namespace Poco::Net; using namespace Poco; using namespace std; int main(int argc, char **argv) { if (argc != 2) { cout << "Usage: " << argv[0] << " <uri>" << endl; cout << " fetches the resource identified by <uri> and print it" << endl; return -1; } try { // prepare session URI uri(argv[1]); HTTPClientSession session(uri.getHost(), uri.getPort()); // prepare path string path(uri.getPathAndQuery()); if (path.empty()) path = "/"; // send request HTTPRequest req(HTTPRequest::HTTP_GET, path, HTTPMessage::HTTP_1_1); session.sendRequest(req); // get response HTTPResponse res; cout << res.getStatus() << " " << res.getReason() << endl; // print response istream &is = session.receiveResponse(res); StreamCopier::copyStream(is, cout); } catch (Exception &ex) { cerr << ex.displayText() << endl; return -1; } return 0; } کتابخانهٔ wxWidgets ارائه شده درwxWidgets (پشتیبانی از تمامی پلتفرم‌ها) #include <wx/sstream.h> #include <wx/protocol/http.h> wxHTTP get; get.SetHeader(_T("Content-type"), _T("text/html; charset=utf-8")); get.SetTimeout(10); // 10 seconds of timeout instead of 10 minutes ... // this will wait until the user connects to the internet. It is important in case of dialup (or ADSL) connections while (!get.Connect(_T("www.google.com"))) // only the server, no pages here yet ... wxSleep(5); wxApp::IsMainLoopRunning(); // should return true // use _T("/") for index.html, index.php, default.asp, etc. wxInputStream *httpStream = get.GetInputStream(_T("/intl/en/about.html")); // wxLogVerbose( wxString(_T(" GetInputStream: ")) << get.GetResponse() << _T("-") << ((resStream)? _T("OK ") : _T("FAILURE ")) << get.GetError() ); if (get.GetError() == wxPROTO_NOERR) { wxString res; wxStringOutputStream out_stream(&res); httpStream->Read(out_stream); wxMessageBox(res); // wxLogVerbose( wxString(_T(" returned document length: ")) << res.Length() ); } else { wxMessageBox(_T("Unable to connect!")); } wxDELETE(httpStream); get.Close(); کتابخانهٔ Boost.Asio ارائه شده درBoost (پشتیبانی از تمامی پلتفرم‌ها) #include <iostream> #include <istream> #include <ostream> #include <string> #include <boost/asio.hpp> using boost::asio::ip::tcp; int main(int argc, char* argv[]) { try { if (argc != 3) { std::cout << "Usage: sync_client <server> <path>\n"; std::cout << "Example:\n"; std::cout << " sync_client www.boost.org /LICENSE_1_0.txt\n"; return 1; } boost::asio::io_service io_service; // Get a list of endpoints corresponding to the server name. tcp::resolver resolver(io_service); tcp::resolver::query query(argv[1], "http"); tcp::resolver::iterator endpoint_iterator = resolver.resolve(query); // Try each endpoint until we successfully establish a connection. tcp::socket socket(io_service); boost::asio::connect(socket, endpoint_iterator); // Form the request. We specify the "Connection: close" header so that the // server will close the socket after transmitting the response. This will // allow us to treat all data up until the EOF as the content. boost::asio::streambuf request; std::ostream request_stream(&request); request_stream << "GET " << argv[2] << " HTTP/1.0\r\n"; request_stream << "Host: " << argv[1] << "\r\n"; request_stream << "Accept: */*\r\n"; request_stream << "Connection: close\r\n\r\n"; // Send the request. boost::asio::write(socket, request); // Read the response status line. The response streambuf will automatically // grow to accommodate the entire line. The growth may be limited by passing // a maximum size to the streambuf constructor. boost::asio::streambuf response; boost::asio::read_until(socket, response, "\r\n"); // Check that response is OK. std::istream response_stream(&response); std::string http_version; response_stream >> http_version; unsigned int status_code; response_stream >> status_code; std::string status_message; std::getline(response_stream, status_message); if (!response_stream || http_version.substr(0, 5) != "HTTP/") { std::cout << "Invalid response\n"; return 1; } if (status_code != 200) { std::cout << "Response returned with status code " << status_code << "\n"; return 1; } // Read the response headers, which are terminated by a blank line. boost::asio::read_until(socket, response, "\r\n\r\n"); // Process the response headers. std::string header; while (std::getline(response_stream, header) && header != "\r") std::cout << header << "\n"; std::cout << "\n"; // Write whatever content we already have to output. if (response.size() > 0) std::cout << &response; // Read until EOF, writing data to output as we go. boost::system::error_code error; while (boost::asio::read(socket, response, boost::asio::transfer_at_least(1), error)) std::cout << &response; if (error != boost::asio::error::eof) throw boost::system::system_error(error); } catch (std::exception& e) { std::cout << "Exception: " << e.what() << "\n"; } return 0; } کتابخانهٔ Libcurl ارائه شده درLibcurl (پشتیبانی از تمامی پلتفرم‌ها) #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); /* example.com is redirected, so we tell libcurl to follow redirection */ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* always cleanup */ curl_easy_cleanup(curl); } return 0; } کتابخانهٔ Neon ارائه شده درNeon (پشتیبانی از تمامی پلتفرم‌ها) #include <ne_session.h> #include <ne_request.h> #include <ne_utils.h> #include <ne_uri.h> int httpResponseReader(void *userdata, const char *buf, size_t len) { string *str = (string *)userdata; str->append(buf, len); return 0; } int do_get(string host) { ne_session *sess; ne_request *req; string response; ne_sock_init(); sess = ne_session_create("http", host.c_str(), 80); ne_set_useragent(sess, "MyAgent/1.0"); req = ne_request_create(sess, "GET", "/SomeURL/method?with=parameter&value=data"); // if accepting only 2xx codes, use "ne_accept_2xx" ne_add_response_body_reader(req, ne_accept_always, httpResponseReader, &response); int result = ne_request_dispatch(req); int status = ne_get_status(req)->code; ne_request_destroy(req); string errorMessage = ne_get_error(sess); ne_session_destroy(sess); printf("result %d, status %d\n", result, status); cout << response << "\n"; switch (result) { case NE_OK: break; case NE_CONNECT: throw ConnectionError(errorMessage); case NE_TIMEOUT: throw TimeOutError(errorMessage); case NE_AUTH: throw AuthenticationError(errorMessage); default: throw AnotherWebError(errorMessage); } return 0; } کتابخانهٔ NET. ارائه شده در.NET (پشتیبان از ویندوز Xp به بعد) #using <System.dll> using namespace System; using namespace System::Net; using namespace System::Text; using namespace System::IO; // Specify the URL to receive the request. int main() { array<String^>^args = Environment::GetCommandLineArgs(); HttpWebRequest^ request = dynamic_cast<HttpWebRequest^>(WebRequest::Create( args[ 1 ] )); // Set some reasonable limits on resources used by this request request->MaximumAutomaticRedirections = 4; request->MaximumResponseHeadersLength = 4; // Set credentials to use for this request. request->Credentials = CredentialCache::DefaultCredentials; HttpWebResponse^ response = dynamic_cast<HttpWebResponse^>(request->GetResponse()); Console::WriteLine( "Content length is {0}", response->ContentLength ); Console::WriteLine( "Content type is {0}", response->ContentType ); // Get the stream associated with the response. Stream^ receiveStream = response->GetResponseStream(); // Pipes the stream to a higher level stream reader with the required encoding format. StreamReader^ readStream = gcnew StreamReader( receiveStream,Encoding::UTF8 ); Console::WriteLine( "Response stream received." ); Console::WriteLine( readStream->ReadToEnd() ); response->Close(); readStream->Close(); } کتابخانهٔ IXMLHTTPRequest ارائه شده در مایکروسافت (پشتیبان از ویندوز Xp به بعد) #include <atlbase.h> #include <msxml6.h> HRESULT hr; CComPtr<IXMLHTTPRequest> request; hr = request.CoCreateInstance(CLSID_XMLHTTP60); hr = request->open( _bstr_t("GET"), _bstr_t("https://www.google.com/images/srpr/logo11w.png"), _variant_t(VARIANT_FALSE), _variant_t(), _variant_t()); hr = request->send(_variant_t()); // get status - 200 if succuss long status; hr = request->get_status(&status); // load image data (if url points to an image) VARIANT responseVariant; hr = request->get_responseStream(&responseVariant); IStream* stream = (IStream*)responseVariant.punkVal; CImage *image = new CImage(); image->Load(stream); stream->Release(); کتابخانهٔ cpp-netlib ارائه شده در cpp-netlib (پشتیبان از همهٔ پلتفرم‌ها) using namespace boost::network; using namespace boost::network::http; client::request request_("http://127.0.0.1:8000/"); request_ << header("Connection", "close"); client client_; client::response response_ = client_.get(request_); std::string body_ = body(response_); حال وقت آن است که یکی را به عنوان بهترین انتخاب متناسب با هدف خود انتخاب کنیم. اگر شما به یک برنامهٔ کاملاً قابل اعتماد در این حوزه نیاز دارید بهتر است از Libcurl استفاده کنید. اگر قرار است برنامه‌ای توسعه دهید که دارای رابط کاربری است بهترین انتخاب Qt و برای آن‌هایی که از تمامی ویژگی‌های سی++۱۱ می‌خواهند استفاده کنند Casablanca گزینهٔ مناسبی است. اگر برنامهٔ شما تحت پلتفرم دات‌نِت توسعه داده می‌شود می‌توانید از NET. استفاده کنید، اما توجه داشته باشید که آن فقط محدود بر پلتفرم ویندوز خواهد بود. در صورتی که می‌خواهید برنامه‌ای توسعه دهید که شامل رابط کاربری نیست می‌توانید از Poco و Boost.Asio استفاده کنید که برای مدیریت جزئی‌تر ابزار‌های بسیاری در اختیار شما قرار خواهند داد. نکته: در استاندار ۲۰ شاهد افزوده شدن ماژول شبکه که از کتابخانهٔ Boost الهام گرفته است خواهیم بود.
  7. کامبیز اسدزاده

    کتابخانهٔ Qt

    نگارش ۵.۱۵.2

    517 دریافت

    کیوت (به انگلیسی: Qt) مجموعه‌ای از کتابخانه‌ها و سرآیندهای نوشته‌شده به زبان سی++ است که به برنامه‌نویس امکان توسعه آسان نرم‌افزارهای کاربردی را می‌دهد. کیوت شامل چندین کلاس برای کار با واسط گرافیکی، چندرسانه، ابزارهای پایگاه‌داده، شبکه و … است. نرم‌افزارهای نوشته شده با ابزار کیوت قادرند تا با استفاده از یک کامپایلر زبان سی‌پلاس‌پلاس برای طیف وسیعی از سیستم‌عامل‌ها از جمله گنو/لینوکس (نسخه‌های رومیزی و وسیله‌های قابل حمل)، ویندوز، ویندوز CE، مک‌اواس و … همگردانی شوند. بدین ترتیب حمل نرم‌افزار نوشته شده بدون تغییر در متن کد نوشته شده امکان‌پذیر است. از کیوت در زبان‌های برنامه‌نویسی متعددی مانند سی++ و جاوا و پایتون می‌توان استفاده‌کرد. جهت مشاهدهٔ مباحث مرتبط با این کتابخانه به این بخش مراجعه کنید.

    رایگان

  8. با سلام، در این پست ما قصد داریم در رابطه با نحوهٔ آغاز یادگیری کیوت توضیح دهیم. اینکه به عنوان یک تازه‌کار چه پیش‌نیازاتی را باید مطالعه و در نهایت چگونه و تحتِ چه منابعی این کتابخانهٔ قدرتمند را بیاموزیم. همچنین پاسخ برخی از سوالات شما را در این پُست به طور شفاف ارائه شده است که طیِ چندین سال سوال علاقه مندان بوده‌اند. معرفی سریع و سادهٔ کیوت (Qt) این ابزار (به انگلیسی: Qt) با آوای «Cute» به فارسی (کیوت) مجموعه‌ای از کتابخانه‌ها و سرآیندهای نوشته‌شده به زبان سی++ است که به برنامه‌نویس امکان توسعه آسان نرم‌افزارهای کاربردی را می‌دهد. کیوت شامل چندین کلاس برای کار با واسط گرافیکی، چندرسانه، ابزارهای پایگاه‌داده، شبکه و … است. نرم‌افزارهای نوشته شده با ابزار کیوت قادرند تا با استفاده از یک کامپایلر زبان سی‌پلاس‌پلاس برای طیف وسیعی از سیستم‌عامل‌ها از جمله گنو/لینوکس (نسخه‌های رومیزی و وسیله‌های قابل حمل)، ویندوز، ویندوز CE، مک‌اواس و … همگردانی شوند. بدین ترتیب حمل نرم‌افزار نوشته شده بدون تغییر در متن کد نوشته شده امکان‌پذیر است. از کیوت در زبان‌های برنامه‌نویسی متعددی مانند سی++ و جاوا و پایتون می‌توان استفاده‌کرد. پیش‌نیازات برای یادگیری کتابخانه‌ Qt دانش متوسط و به بالا در رابطه با زبان‌ برنامه‌نویسی مُدرن سی‌پلاس‌پلاس نسخه‌‌های ۱۱ به بعد، (بنابراین اگر شما هیچ اطلاعی در رابطه با ساختار برنامه‌های سی‌پلاس‌پلاس و نحوهٔ عملکرد آن ندارید، شانس موفقیت شما بسیار پایین خواهد بود و ممکن است برنامهٔ تولید شدهٔ شما به بدترین شکل ممکن پیاده سازی شود و حتی مدام دست به کمک دیگران باشید). من پیشنهاد می‌کنم قبل از آن با زبان سی‌پلاس‌پلاس آشنا شوید. آشنایی با کامپایلر و نحوهٔ عملکرد آن در پلتفرم‌های مختلف از جمله ویندوز، مک‌او‌اِس، لینوکس، اندروید و آی‌او‌اِس. مهم است بدانید تسلط کافی در زبان سی++ و ساختار برنامه‌های نوشته شده در این زبان بسیار موثر است. آشنایی و تسلط کافی به ابزار‌های ساخت و ساز مانند CMake یا QMake و QBS. آشنایی با معماری‌های مختلف مانند x86، x86-64، Arm و غیره... و پیکربندی پروژه و تهیهٔ خروجی. آشنایی با معماریِ سیستم‌عامل‌ها، برخی از رابط‌های برنامه‌نویسی (Api)، برای مثال اگر قرار است از خاصیت چند-سکویی کیوت استفاده کنید تا یک برنامهٔ تحت اندروید را توسعه دهید، در این صورت باید در نظر داشته باشید که همه چیز توسط کیوت حاضر و آماده نیست، شما بدون درکِ معماری سیستم‌عامل اندروید و پیکربندی برنامه در مراحل توسعه نمی‌توانید به راحتی از پسِ این کار بر آیید و هر از گاهی نیاز است به شیوهٔ اختصاصی پلتفرم مورد نظر برنامهٔ خود را توسعه دهید. در پلتفرم‌های اپل نیز تسلط کافی به Xcode و مدیریت حساب توسعه در Apple Developer مورد نیاز است، شما باید بدانید چطور یک پروفایل را برای پلتفرم آی‌او‌اس باید تنظیم کنید. اگر شما در پلتفرم‌های مختلف کار می‌کنید، قطعاً نیاز به کار با کیت‌های توسعه، رابط‌های توسعه و همچنین ابزار‌های ساخت هر پلتفرم خواهید داشت. بنابراین، در محیط ویندوز نیاز دارید محیط خود را با ابزار‌های ساخت و ساز آن مانند Microsoft Visual Studio ‌Build Tools که شامل کامپایلر‌ها، دیباگر و برخی از ابزار‌های برنامه‌نویسی است هماهنگ کنید، چرا که بدون آن امکان توسعه وجود ندارد (نیاز نیست نرم‌افزار محیط توسعهٔ یکپارچهٔ Visual Studio را نصب کنید، همان ابزار Build Tools کافی است). در محیط لینوکس نصب پیش‌نیاز‌ها و کامپایلر‌های GCC و یا Clang مهم است و در مک نیز به‌روز رسانی و نصب ابزار‌های ساخت و ساز و همچنین نسخهٔ کامل Xcode از واجبات توسعه در کیوت خواهد بود. بنابراین داشتن تجربه و آشنایی کافی با این ابزار‌ها متوسط به بالا به نفع شماست. آشنایی با اصطلاحات و مفاهیم تجربه‌کاربری و رابط‌کاربری جهت طراحی مناسب با فناوری‌های Qt Widget و Qt Quick (در صورتی که علاقه‌مند به طراحی ظاهر برنامه‌های خلاقانه دارید). آشنایی Xml برای سبک سنتی و ویجت و JavaScript پیش‌نیاز خوبی برای درک مسائل مربوط به فناوری طراحی در کیوت‌کوئیک است که تحت QML رابط‌های کاربری و اجزای مختلف و خلاقانه را پیاده سازی خواهید کرد. توجه کنید که مستندات کیوت به اندازهٔ کافی جهت آشنایی با پیش‌نیازات به‌روز رسانی می‌شود و نسبت به نسخه‌های ۵ و حتی ۶ توضیحات لازم را ارائه می‌کند. با توجه به این مسائل، مراحل نصب و داشتن حساب کاربری در کیوت لازم است، اما به این معنا هم نیست که شما از نسخهٔ رایگان نمی‌توانید استفاده کنید، توجه داشته باشید که تنها تفاوت بین نسخهٔ رایگان و تجاری در یک سری ویژگی‌های اختصاصی شرکت کیوت است که در پشتیبانی از آن‌ها اعمال شده و نه بیشتر. آیا کیوت یک زبان برنامه‌نویسی است؟ چرا نحوِ (Syntax) آن با سی‌پلاس‌پلاس استاندارد فرق می‌کند؟ خیر، کیوت ابتدا به عنوان یک کتابخانهٔ رابط گرافیکی کاربر توسعه داده شده است که بعد‌ها برای توسعه اهدافِ بیشتری شامل کتابخانه‌های شبکه و غیره شده است که در قالب یک چهارچوب (فریم‌وُرک) که تحت زبان برنامه‌نویسی سی‌پلاس‌پلاس برای این زبان توسعه یافته است و در زمینه‌های مختلفی کاربرد‌های فراوان دارد. دلیل زیبایی و ظاهر سادهٔ آن ساختار بسیار قدرتمند آن است که موجب شده همانند چهارچوب‌های قدرتمند دیگری خودنمایی کند. (اما قول این ظاهر و سادگی آن را نخورید، چون با سی‌پلاس‌پلاس طرف هستیم) آیا کیوت از سرویس‌ها و قابلیت‌های اختصاصی‌ِ اپلیکیشن‌های اندروید و آی‌او‌اِس را به طور کامل پشتیبانی می‌کند؟ به صورت پیش‌فرض خیر، هیچ ابزاری به صورت چند-سکویی فعلاً (تاکید می‌کنیم - فعلاً تا به این تاریخ) وجود ندارد که تمامی امکانات اختصاصی این پلتفرم‌ها را بدون کد نویسی اختصاصی پشتیبانی کند. اما این به این معنی نیست که جواب منفی خواهد بود، لذا شما در برنامه‌نویسی سی‌پلاس‌پلاس به راحتی می‌توانید برای پلتفرم‌های فوق با سرویس‌های آن‌ها ارتباط برقرار کنید. این کار کمی نیاز به دانش فنی بالایی خواهد داشت! برای مثال (دسترسی به سرویس‌های اندروید یا آی‌او‌اس) با ترکیب کُد‌های آبجکتیو-سی و جاوا امکانپذیر است و یا باید با توجه به SDK‌های پلتفرم‌های مورد نظر آن‌ها را سفارشی نویسی کنید. این کار به راحتی قابل انجام خواهد بود و کافی است شما در رابطه با نحوهٔ ترکیب کُد‌های آن آشنا باشید. کیفیت خروجی برنامه‌های تحت کیوت چگونه است؟ اگر شما واقعاً یک برنامه‌نویسِ ماهرِ سی‌پلاس‌پلاس باشید می‌توانید برنامه‌ای را تولید کنید که بسیار خوش دست‌تر و سریعتر از برنامه‌های پیشفرضِ پلتفرم‌ها باشد. در بارهٔ دلایل آن به ساختار برنامه‌های نوشته شده توسط این زبان به این مقاله مراجعه کنید. اگر غیر از این باشد برنامهٔ شما بسیار بد و کُند عمل خواهد کرد و بهتر است سراغ زبان‌های پیشنهادی (هر پلتفرم) بروید. هرچند سی‌پلاس‌پلاس یک زبان بومی برای تمامی پلتفرم‌ها محسوب می‌شود اما این ریسک برای افراد مبتدی پیشنهاد نمی‌شود. معمولاً برنامه‌های گسترده و عظیم توسط سی‌پلاس‌پلاس توسعه داده می‌شوند که برنامه‌نویسان آن واقعا حرفه‌ای و با قوانین این زبان آشنا هستند. آیا برای تولید برنامه‌های مک و آی‌او‌اس نیاز به سیستم خاصی داریم؟ بله، شما بدون وجود سیستم‌عامل مک نمی‌توانید برنامه‌ای را بر روی دستگاه‌های اپِل کامپایل کنید. این امر مستلزمِ سیستم عامل اختصاصی این شرکت بوده و باید توسعه دهنده دارای حساب کاربری معتبر سالانه باشد تا بتواند برنامهٔ خود را بر روی دستگاه‌های مورد نظر اجرا کند. در غیر این صورت تنها می‌تواند برنامهٔ خود را بر روی سیستم خود مورد آزمایش و خطا قرار دهد. آیا کیوت در ایران بازار کار مناسبی دارد، آیا ارزش دارد من این کتابخانه را یاد بگیرم؟ خوشبختانه کیوت بیشتر از ۲۰ سال است که در دنیا مورد استفاده قرار می‌گیرد و کشور‌های پیشرفته از آن استقبال می‌کنند. در کشور ما مدتی است این کتابخانه مورد استقبال قرار گرفته و بسیاری از شرکت‌ها مایل به ساخت و توسعهٔ برنامه‌های خود تحت این کتابخانه هستند که برخی از دلایل آن (بهره بردن از قابلیت‌های زبان سی و سی‌پلاس‌پلاس و ویژگی‌های خاص آن است). از طرفی کیوت به عنوان یک کتابخانهٔ چندسکویی، مناسب برای تولید و توسعهٔ محصولات در قالب اپلیکیشن‌های موبایل و برنامه‌های کاربردی بر روی دسکتاپ است که در نوع خود کم نظیر است. استفاده از این کتابخانه، موجب سهولت و افزایش سرعت توسعهٔ تولید و طراحی نرم‌افزار می‌شود و شما می‌توانید با توجه به حفظ کیفی کد‌های خود از یک محیط مجهز به ابزار‌های طراحی پیشرفته استفاده کنید. پشتیبانی بسیار خوب از زبان فارسی و به خصوص تاریخ شمسی و دیگر موارد، طراحی به شیوهٔ استاندارد راست‌ به چپ و رعایت اصول در آن یکی از دلایلی است که می‌توان تضمین کرد کیوت یک ابزار مناسب در طراحی و توسعهٔ برنامه‌های بومی به زبان فارسی است. چه کسانی یا شرکت‌هایی از این فریم‌ورک استفاده می‌کنند؟ جالب است بدانید کتابخانهٔ کیوت محدود به فرد یا شرکت خاصی نیست، با توجه به دو نسخهٔ تجاری و رایگان آن، شرکت‌های خصوصی، افراد و توسعه‌دهندگان بسیار هستند که از آن به عنوان یک فریم‌ورک طراحی و تولید برنامه استفاده می‌کنند. معمولاً شرکت‌های توسعه‌دهندهٔ تجهیزات سخت‌افزاری، پزشکی، رباتیک، صنعتی و دیگر موارد از آن استفاده می‌کنند. همچنین بازار طراحی نرم‌افزار‌های هوشمند موبایل، نرم‌افزار‌های کاربردی و پرکاربرد از این کتابخانه استفاده می‌کنند. اما تبلیغات در این زمینه به دلیل عدم شناخت، تسلط و آشنایی به سی++ نسبت به دیگر ابزار‌ها کم‌تر است. درآمد و هزینه‌هایی که می‌توان از انجام پروژه‌های کیوت دریافت کرد چگونه است؟ به طور کلی نمی‌توان در مورد یک تعرفهٔ مشخص صحبت کرد، این بستگی به نوع مهارت شخصی و کیفیت کار دارد. اما در این مقاله می‌توان به این اشاره کرد که برنامه‌نویسی سی++ و کیوت یکی از خوش درآمد‌ترین مباحثی هستند که می‌توان به آن اشاره کرد که البته بستگی به مهارت و تسلط کافی توسعه‌دهنده دارد. آیا کیوت از سکوی وِب پشتیبانی می‌کند؟ کیوت از تمامی پلتفرم‌ها پشتیبانی می‌کند، مخصوصاً با پشتیبانی از ماژول‌های QtWebEngine و QtWebAssembly این امر امکانپذیر است که برنامه‌های خود را تحت فناوری‌های وِب نیز توسعه دهید. آیا من حتماً باید به زبان سی‌پلاس‌پلاس مسلط باشم؟ هرچند زبان سی++ یکی از الزامات کیوت است، اما همانطور که اشاره شد، آشنایی با هسته، کتابخانهٔ پیش‌فرض، سینتکس و روش‌های برنامه‌نویسی رایج آن برای درکِ بهتر کیوت مهم هستند. من دانشجو یا متخصص رشتهٔ کامپیوتر نیستم، آیا می‌توانم این کتابخانه را یاد گرفته و از آن در توسعه برنامه‌های مورد نظر خود استفاده کنم؟ بله، اما ممکن است در تجزیه و تحلیل رفتار‌های سیستم‌عامل، مدیریت خطاها و پیکربندی ابزار‌های تخصصی (برنامه‌نویسی) با مشکلاتی مواجه شوید که تنها متخصصات این رشته می‌توانند آن را درک و حل کنند. آیا واقعاً حجم برنامه‌های کیوت نسبت به Net. یا Java بیشتر است !؟ خیر، به طور ذاتی برنامه‌های توسعه داده شده توسط سی‌++ دارای کمترین حجم برنامه هستند، معمولاً کتابخانه‌های استاندارد این زبان به صورت پیشفرض بر روی سیستم عامل‌ها تعبیه شده و در دسترس قرار دارند. اما شما در ویندوز زمانی که با دات‌نت برنامه‌نویسی می‌کنید، فریمورک مربوطه از قبل بر روی سیستم عامل ویندوز نصب بوده و بدون آن هیچ برنامهٔ نوشته شده توسط دات‌نِت قابل اجرا نمی‌باشد. اما چون از قبل این کتابخانه بر روی سیستم‌عامل تعبیه شده است شما نیاز به تنها داشتن فایل اجرایی دارید و نیازی نیست فریم‌ورک دات‌نت را در کنار فایل اجرایی خود مستقر کنید. بنابراین حجم مربوط به چهارچوب به چشم نیامده و اینطور به نظر می‌رسد که برنامه‌های تحت دات نت بسیار سبُک‌تر هستند! متاسفانه این تفکری اشتباه است برنامه‌های تحت سی‌پلاس‌پلاس نسبت به زبان‌های دیگر کم حجم‌تر و سبُک‌تر بوده و شما کافی است فایل‌های مربوط به کتابخانه را در کنار برنامهٔ خود داشته باشید. در رابطه با کتابخانهٔ Qt نیز باید گفت کیوت به عنوان یک چهارچوب مانند دات نت شامل کلاس‌ها و ماژول‌هایی است که باید همانند دات نت بر روی سیستم عامل تعبیه شود اما چون اینکار به صورت جداگانه در کنار برنامهٔ شما قرار می‌گیرد اینگونه تصور می‌شود که برنامه‌های مبتنی بر کیوت نسبت به دات نت از حجم بیشتری برخوردار هستند. این کاملاً طبیعی بوده و به عنوان نکته ضعف نیست. من علاقهٔ خاصی به سی‌پلاس‌پلاس دارم و می‌خواهم کیوت را یاد بگیرم، از کجا و چه تحت منابعی باید شروع کنم؟ خوشبختانه کیوت از لحاظ مستندات بسیار جامع است و شما می‌توانید از این آدرس به تمامی مستندات مورد نیاز خود دسترسی داشته باشید. همچنین اگر نگران اینترنت خود هستید و یا به آن دسترسی مداوم ندارید می‌توانید از داخل محیط توسعهٔ کیوت کریتور از بخش Help آن مستندات مورد نیاز خود را به صورت آفلاین دریافت کنید. من دنبال کتاب آموزشی کیوت هستم، آیا کیوت کتاب‌های آموزشی مفیدی در این زمینه از مقدمه تا پیشرفته دارد؟ بله، در این بخش شما می‌توانید کتاب‌هایی را در این زمینه مشاهده کنید که مرجع رسمی‌ِ کیوت آن‌ها را تایید کرده است. من به زبان انگلیسی تسلط کافی ندارم، ترجیح می‌دهم که از مراجع فارسی معتبر استفاده کنم، آیا کیوت در این زمینه منابعی دارد که معتبر باشند؟ خوشبختانه کیوت به قدری طعمِ جذابی برای برنامه‌نویسی دارد که دو کتاب مقدماتی و پیشرفتهٔ این کتابخانه به زبان فارسی نوشته و در کتابخانهٔ ملی کشور به صورت رسمی به ثبت رسیده‌اند و عبارتند از نسخه‌‌های مقدماتی برای Qt Widgets و نسخهٔ پیشرفته برای Qt Quick (این کتاب‌ها تجاری هستند) که در لیست کتابخانهٔ اصلی کیوت نیز تأیید و ثبت شده‌اند. آیا مقالات یا کتاب‌های آموزشی رایگانی هم برای کیوت وجود دارد؟ تنها مرجع آموزشی که در این رابطه به زبان فارسی توضیح می‌دهد، آی‌او‌استریم است، تقریباً هیچ مقاله یا کتاب جامع و کاملی به صورت رسمی به زبان فارسی خارج از مرجع آی‌او‌استریم (به رایگان) وجود ندارد. اما وعده‌هایی می‌دهیم که در پلتفرم فانوکس آموزش‌های جدی و با ارزشی برای کیوت ارائه شود که در دو هدف رایگان و تجاری برنامه‌ریزی شده‌اند. آیا لیستی برای مشاهدهٔ برنامه‌های توسعه یافته توسط Qt داریم؟ بسیاری از برنامه‌های قدرتمند و خارق‌العاده‌ای توسط سی‌پلاس‌پلاس توسعه داده می‌شوند که می‌توان لیست عظیمی از آن‌ها را نام برد. اما در این میان لیستی از برنامه‌هایی که تحت کیوت توسعه داده شده‌اند در این بخش آمده است. برای یادگیری استاندارد سی‌پلاس‌پلاس و تقویت مهارت خود در این زبان کدام مقالات و کتاب‌ها را پیشنهاد می‌کنید؟ علاوه بر این که شما می‌توانید در مرجع به دنبال آموزش‌های مرتبط با این زبان باشید، پیشنهاد ما این است که از مراجع رسمی آن نیز استفاده کنید. برخی از آن‌ها به صورت زیر آمده‌اند: cppreference.com http://www.cplusplus.com/ Learn C++ C++ Tutorial | SoloLearn: Learn to code for FREE! Learn C++ (Introduction and Tutorials to C++ Programming) Qt Documents Qt Quick & QML اگر سوالی داشته باشم کجا می‌توانم آن را مطرح کرده و به پاسخ خود برسم؟ شما می‌توانید برای سوال و پرسش در انجمن‌های این مرجع اقدام کنید. اساتید و دوستان با تجربه سوالات شما را دریافت و مناسبترین پاسخ‌ها را ارائه خواهند داد. همچنین شما می‌توانید ما را در گروه سی‌پلاس‌پلاس و کانال تلگرامی دنبال کنید. نکته (در این پُست بنابر اهداف فرهنگ‌سازی برای حق چاپ) فایل‌های مرتبط با کتاب‌های آموزشی زبان اصل و یا زبان فارسی قرار داده نشده است. کتاب‌های زیادی در رابطه با این زبان وجود دارند که به زبان اصلی می‌باشند اما برای احترام به نویسندهٔ آن‌ها از ارسال چنین فایل‌هایی معذوریم. این پُست ممکن است ویرایش یا به‌روز رسانی شود.
  9. بهنام صباغی

    کتابخانه VTK یک کتابخانه مجسم سازی سه بعدی اطلاعات و پردازش تصویر است. این شامل یک کتابخانه کلاس C++ و چندین لایه رابط تفسیری از جمله Tcl / Tk، Java و Python است. VTK یک کتابخانه کراس پلتفرم است که از سیستم‌عامل‌های لینوکس ، یونیکس ، مک و ویندوز پشتیبانی می‌کند. این ابزار پشتیبانی از پردازش موازی و ادغام با پایگاه های داده های مختلف در ابزارهای GUI مانند Qt و Tk را داراست. در سایت رسمی این کتابخانه به آدرس VTK - The Visualization Toolkit می‌توانید منابع آموزشی متعددی برای یادگیری این کتابخانه پیدا کنید. برای استفاده از این کتابخانه نیاز به کامپایل سورس این کتابخانه داریم . برای دریافت سورس میتوانید از صفحه دانلود سایت رسمی VTK استفاده کنید. بعد از دریافت این کتابخانه میتوانید با توجه به سیستم‌عامل خود از صفحه wiki سایت رسمی VTK برای تنظیم و کامپایل این کتابخانه استفاده کنید. دقت نمایید اگر نیاز دارید که از فریمورک Qt در برنامه خود استفاده کنید و صفحات گرافیکی VTK را در پنجره‌های Qt نمایش دهید باید به این مرحله پیکربندی با Cmake که مرتبط به کیوت 5 می‌باشد دقت کنید. بعد از کامپال و نصب کتابخانه میتوانید پروژه مثال استفاده از VTK و Qt در گیتهاب را اجرا کرده و صحیح بودن پیکربندی و ساخت کتابخانه را آزمایش کنید. برای یادگیری این کتابخانه میتوانید از کتاب یا ویدئو های موجود استفاده کنید ولی روش شخصی بنده برای یادگیری و استفاده از این کتابخانه در پروژه مشاهده و تحلیل مثال‌های کتابخانه VTK بود. این مثال ها جزء به جزء برای هر قابلیت پیاده سازی شده‌اند. در قسمت بعد روند کلی کارکرد این کتابخانه از روی سورس مثال معرفی شده از گیتهاب را برای شما عزیزان شرح می‌دهم.
  10. سید محمد عباسی

    در جلسه قبل کتابخانه را دانلود و نصب کردیم و برای تست کدی را اجرا کردیم که حاصل ان نمایش یک تصویر در یک پنجره بود اما درباره ی کلاس Matو همچنین توابع imread،imshow،waitKey توضیحی ندادیم کلاس Mat یک ماتریس است که تا هر چند بعد را در خود ذخیره میکند تابع imread برای بارگذاری تصویر است که تصویر را خوانده و در قالب یک ماتریس برمیگرداند که اینجا تصویر دو بعد دارد RowوColumn وقتی تصویر بارگذاری شد باید در یک ماتریس ذخیره شود پس به یک ماتریس نیاز داریم که همونطور که دیدید تعریف کردیم تابع imshow برای نمایش تصویر است ورودی اول این تابع نام پنجره است و ورودی دوم یک InputArray است که یک ورودی از ارایه از ما میخواهد در اینجا ما از هر کلاس کانتینری یا حتی ارایه معمولی هم بدهیم قبول میکند چون از ما یک ورودی ارایه میخواهد فرقی نمی کند که این ورودی چگونه و از چه نوعی باشد اما چون این یک تصویر را نمایش میدهد باید ورودی بدهیم که حاوی داده های تصویر باشد نه چیز دیگری پس به این موضوع هم دقت کنید تابع waitKey منتظر می ماند تا بعد از نمایش تصویر و فشردن کلیدی از صحفه کلید به برنامه پایان دهد. در این جلسه به کلاس Image Filtering توابع کاربری ان میپردازیم ابتدا چند تابع این کلاس را توضیح خواهم داد و سپس از هر کدام یک مثال خواهم زد. چند تابع که این کلاس دارد عبارتند از:bilateralFilter،blur،boxFilterLaplacian،medianBlur این چند تابع هر کدام فیلتری رو تصویر اعمال میکنند در هنگام دادن ورودی به توابع به ان چیزی که میخواهد توجه کنید و مقادیر صحیح را به ورودی توابع بدهید که به خطا مواجه نشوید در غیر اینصورت به مشکل برمیخورید. تابع bilateralFilter: یک محدوده ی مشخص شده توسط پارامتر سوم را با اندازه های داده شده در پارامتر های چهارم و پنجم را که مشخص کنند رنگ و فاصله هستند ترکیب میکند پارامتر سوم مشخص میکند در چه محدودهای از پیکسل های تصویر شروع به ترکیب رنگ در فاصله ی داده شده در پارامتر پنجم کند این محدوده اگر کوچکتر از پارامتر های چهارم و پنجم باشد بخشی از پیکسلها را در برمیگیرد اگر در پارامتر های چهارم و پنجم اندازه ی بیش از حد بدهیم و اندازه ی پارامتر سوم بیش از حد کوچک باشد تصویر به حالت کدر در می اید در غیر اینصورت اگر پارامتر ها بدرستی تنظیم شده باشند یک ترکیب رنگ زیبا در تصویر را خواهیم داشت این ترکیب رنگ در خود تصویر است به مثال زیر دقت کنید: #include <opencv2\opencv.hpp> #include <Windows.h> using namespace cv; int main() { Mat output_image; Mat image_read = imread("C:\\Users\\Mohamad4030\\Desktop\\beautiful-sunset-sunrise-photo-5.jpg", IMREAD_COLOR); bilateralFilter(image_read, output_image, 100, 300, 500); imshow("befor", image_read);//befor Filtering imshow("after", output_image);//after Filtering ShowWindow(GetConsoleWindow(), SW_HIDE); waitKey(0); } حاصل اجرای کد بالا به صورت زیر خواهد بود: تابع blur: با دریافت عرض و ارتفاع و موقعیت xوy در تصویر حالت تاری را به وجود می اورد باید دقت کنید موقعیت باید به همان اندازه مشخص شود که در عرض و ارتفاع مشخص میشود بیشتر از عرض و ارتفاع باشد برنامه متوقف خواهد شد چون نباید بزرگتر از عرض و ارتفاع باشد هر چه موقعیت بیشتر باشد تاری در ان موقعیت بیشتر میشود به مثال زیر دقت کنید: #include <opencv2\opencv.hpp> #include <Windows.h> using namespace cv; int main() { Mat output_image; Mat image_read = imread("C:\\Users\\Mohamad4030\\Desktop\\beautiful-sunset-sunrise-photo-5.jpg", IMREAD_COLOR); //bilateralFilter(image_read, output_image, 100, 300, 500); blur(image_read, output_image, Size(100, 100),Point(99,99)); imshow("befor", image_read);//befor Filtering imshow("after", output_image);//after Filtering ShowWindow(GetConsoleWindow(), SW_HIDE); waitKey(0); } حاصل اجرای کد بالا به صورت زیر خواهد بود: برای بهتر متوجه شدن این تابع چند بار موقعیت xوy را تغییر دهید و نتیجه را ببینید. تابع boxFilter: با مشخص کردن عمق برای تصویر و عرض و ارتفاع و موقعیت xوy ان منطقه از تصویر را با توجه به مقداری که برای عمق تصویر داده میشود تغییرمیدهد در بعضی موارد که به عنوان مثال عمق تصویر 0 باشد تصویر در همان حالت خود باقی میماند و درواقع کار تابع blur را انجام میدهد در پارامتر اخر میتوانید حالت border ان را تایین کنید که میتواند توسط خود نوع های شمارشی مورد استفاده قرار گیرد که جایی که فیلتر شده است خط مرزی ان رسم شود به مثال زیر دقت کنید: #include <opencv2\opencv.hpp> #include <Windows.h> using namespace cv; int main() { Mat output_image; Mat image_read = imread("C:\\Users\\Mohamad4030\\Desktop\\0.047489001316013508_pixnaz_ir.jpg", IMREAD_COLOR); //bilateralFilter(image_read, output_image, 100, 300, 500); boxFilter(image_read, output_image, 5, Size(1, 1)); imshow("befor", image_read);//befor Filtering imshow("after", output_image);//after Filtering ShowWindow(GetConsoleWindow(), SW_HIDE); waitKey(0); } حاصل اجرای کد بالا به صورت زیر خواهد بود: تابع Laplacian: با دریافت عمق سایز پیکسل مقیاس برای روشنایی و مقدار دلتا تصویر را به حالت های مختلف درمی اورد دقت داشته باشید برای دریافت نتیجه مطلوب باید مقیاس و دلتا هر دو مقداری داشته باشند نداشتن مقدار برای هر کدام تصویر را روشن و تیره میکند به مثال زیر دقت کنید: #include <opencv2\opencv.hpp> #include <Windows.h> using namespace cv; int main() { Mat output_image; Mat image_read = imread("C:\\Users\\Mohamad4030\\Desktop\\c9ac_d2ynkbk.jpg", IMREAD_COLOR); //bilateralFilter(image_read, output_image, 100, 300, 500); //boxFilter(image_read, output_image, 5, Size(1, 1)); Laplacian(image_read, output_image, 0,1,10.0,100.0); imshow("befor", image_read);//befor Filtering imshow("after", output_image);//after Filtering ShowWindow(GetConsoleWindow(), SW_HIDE); waitKey(0); } حاصل اجرای کد بالا به صورت زیر خواهد بود: با تعغیر دادن مقیاس و دلتا نتایج دیگری بدست می اید همچنین عمق و سایز پیکسل با تعغیر رو تصویر تاثیر میگذارند. تابع medianBlur: با دریافت سایز در پارامتر سوم تصویر را بصورت خاصی کدر میکند که هرچه سایز بیشتر باشد تصویر کارتونی به نظر میرسد به مثال زیر دقت کنید: #include <opencv2\opencv.hpp> #include <Windows.h> using namespace cv; int main() { Mat output_image; Mat image_read = imread("C:\\Users\\Mohamad4030\\Desktop\\c9ac_d2ynkbk.jpg", IMREAD_COLOR); //bilateralFilter(image_read, output_image, 100, 300, 500); //boxFilter(image_read, output_image, 5, Size(1, 1)); medianBlur(image_read, output_image, 17); imshow("befor", image_read);//befor Filtering imshow("after", output_image);//after Filtering ShowWindow(GetConsoleWindow(), SW_HIDE); waitKey(0); } حاصل اجرا کد بالا بصورت زیر خواهد بود:
  11. کامبیز اسدزاده

    کتابخانه‌ی GLFW

    نگارش 3.2.1

    15 دریافت

    گرافیک کامپیوتری همواره از جمله جذابترین جنبه های کامپیوترها بوده است. بازیها، برنامه های طراحی گرافیکی دو بعدی و سه بعدی و شبیه سازیها همگی به نوعی از قابلیتهای گرافیکی یک کامپیوتر بهره می‌برند. مهمترین نکته در این زمینه، برقراری تعادلی منطقی بین کیفیت تصاویر نمایش داده شده بر روی صحنه و سرعت اجرای برنامه می‌باشد. کتابخانه‌ی GLFW ابزاری برای استفاده با اوپن‌جی‌ال (OpenGL) است که امکاناتی برای برنامه‌نویس برای قابلیت کشیدن و مدیریت پنجره‌ها و کانتکست اوپن‌جی‌ال و ورودی جوس‌استیک، صفحه‌کلید و موشواره فراهم می‌کند.

    رایگان

  12. سید محمد عباسی

    همانطور که میدانید کتابخانه‌ی OpenCV کتابخانه‌ای قدرتمند در زمینه پردازش است این پردازش شامل مواردی مانند پردازش تصویر، پردازش ویدیو، سیستم تشخیص چهره ، تشخیص حرکت، الگورریتم‌های گوناگون مانند الگوریتم گراف و... است. بیشتر تمرکز این کتابخانه بر روی پردازش تصویر است که میتوان گفت به خوبی در این زمینه نمایان شده است. برای اینکه بتوانیم از این کتابخانه استفاده کنیم باید آن را در محیطی که کدنویسی می‌کنیم وارد کنیم که محیط مورد نظر در این اموزش ویژال استویو است. برای این منظور ویژوال استودیو رو باز کنید و New Project رو انتخاب کنید از پنجره ای که باز می‌شود قسمت Other Languages و ++Visual C و General را انتخاب کنید در این قسمت باید یک پروژه خالی بسازید پس Empty Project و نام و مسیر پروژه را انتخاب کنید و Ok را بزنید پس از ان از قسمت View و Solution Explorer را انتخاب کنید روی پروژه خود کلیک راست کنید و گزینه Manage NuGet Packages را انتخاب کنید در اینجا باید به اینترنت متصل باشید تا بتوان کتابخانه ی مورد نظر را دانلود کرد در کادر بالای پنجره باز شده عبارت OpenCV را بنویسید و پس از جستجو اخرین نسخه از این کتابخانه را دانلود کنید مراحل نصب و پیکربندی پس از دانلود بصورت خودکار انجام می‌شود پس از نصب ما می‌توانیم کد نویسی خود را با این کتابخانه شروع کنیم برای اینکه مطمئن شویم کتابخانه بصورت صحیح نصب شده است باید ان را تست کنیم برای این کار به یک فایل منبع نیاز داریم پس بر روی پوشه ی Source کلیک راست کرده گزینه Add را انتخاب کرده سپس بر روی گزینه New Item کلیک کرده و در پنجره باز شده ++File C را انتخاب کنید در پایین پنجره نام فایل را انتخاب کنید و Ok را بزنید اکنون کد زیر را در برنامه خود وارد کنید و اجرا کنید : #include <opencv2\opencv.hpp> #include <Windows.h> using namespace cv; int main() { Mat image_read = imread("beautiful-sunset-sunrise-photo-5.jpg", IMREAD_COLOR); imshow("Show", image_read); ShowWindow(GetConsoleWindow(), SW_HIDE); waitKey(0); } در ورودی اول تابع imread مسیر تصویر را بدهید که تصویر مورد نظر در این مثال در پوشه پروژه است.
  13. با توجه به وجود کتابخانه‌های متعدد در سی‌پلاس‌پلاس در این پُست قصد داریم آموزش‌هایی در رابطه با نحوهٔ راه اندازی انواع کتابخانه‌ها را در سی‌پلاس‌پلاس توضیح دهیم. محیط‌های توسعه جهت نصب Visual Studio و Qt Creator خواهند بود. در صورتی که نیاز است کتابخانه‌ای را به صورت سفارشی کامپایل کنید نکاتی را باید مورد توجه قرار دهید که در ادامه آمده‌اند. قبل از هر چیز نیاز است توضیحاتی در رابطه با انواع کتابخانه‌ها داده شود. کتابخانه‌ها برای اینکه در پروژه مورد استفاده قرار بگیرند نیاز است آن‌ها از سمت منبع خود کامپایل و ساخته شوند. البته در این فرآیند باید توجه داشته باشید که نوع معماری در پیکربندی یک کتابخانه بسیار مهم است. برای مثال اگر قرار است کتابخانه‌ای را بر روی یک پروژه‌ای که تحت معماری x64 پیکربندی شده است و در وضعیت release منتشر شود، در این صورت حتماً باید کتابخانه مورد نظر تحت همین پیکربندی کامپایل شود. کتابخانه‌ها ممکن است خودشان وابستهٔ کتابخانه‌های دیگری باشند. برای مثال بخشی از ماژول کتابخانه Boost و Poco وابستهٔ کتابخانهٔ OpenSSL می‌باشد. و یا بخشی از کتابخانهٔ MySQL وابستهٔ کتابخانهٔ Boost می‌باشد. بنابراین قبل از پیکربندی پروژه تحت هر کتابخانه‌ای مطمئن شوید که پیش نیازات آن را در اختیار داشته باشید. توجه داشته باشید که حتماً راهنمای کتابخانهٔ مورد نظر خود را جهت نحوهٔ پیکربندی مطالعه نمایید، زیرا هیچ روش عامیانه‌ای وجود ندارد که بر روی تمامی کتابخانه‌ها صادق باشد. با توجه به نکات بالا آموزش لازم جهت پیکربندی و راه اندازی کتابخانه‌ها را تحت دو گزینهٔ Boost و MFSL ادامه می‌دهیم: نسخهٔ مورد نظر کتابخانهٔ مورد نظر را از این بخش دریافت کنید. فایل‌ دریافت شده را استخراج و در یک مسیر مشخصی مانند C://کتابخانهٔ شماکپی کنید. محیط کنسول در سیستم عامل را باز کنید، پیشنهاد می‌شود از Visual Studio Cross Tools Command Prompt استفاده کنید. به مسیر کتابخانه تحت دستور cd رفته و وارد آن شوید. در این مرحله نیاز است تا قبل از ساخت کتابخانه آن را پیکربندی کنید، بنابراین دستور زیر را اجرا خواهیم کرد: ./configure دقت کنید که این مرحله معمولاً در کتابخانه‌ها متفاوت می‌باشد، برای مثال در کتابخانهٔ Boost فایلی به نام bootstrap.bat متخص ویندوز و فایل bootstrap.sh برای محیط‌های یونیکس موجود است که وظیفهٔ پیکربندی و تولید فایل ساخت را بر عهده دارد. البته در نظر داشته باشید که این چنین پیکربندی در کتابخانه‌های خاص ممکن است و در بیشتر آن‌ها باید با دستورات configure و فلگ‌های موجود در هر یک از آن‌ها اقدام به پیکربندی کنید. بنابراین با توجه این مورد می‌توانید آموزش لازم را در این بخش پیگیری نمایید. بعد از پیکربندی دستور make، nmake، cmake و یا qmake متناسب با نوع ابزار سازنده باید اجرا شود تا کتابخانه بر اساس پیکربندی تنظیم شده شروع به کامپایل و ساخت کند. این مرحله معمولاً بر اساس قدرت پردازشی سیستم شما زمان متغیری خواهد داشت. بعد از به اتمام رسیدن زمان کامپایل کتابخانهٔ مورد نظر فایل‌های lib را تحت پسوند‌های .dll در ویندوز و .lib و .so در لینوکس و یونیکس تولید خواهد کرد که بهتر است مسیر include برای هدر‌های کتابخانه و lib برای فایل‌های کامپایل شده مشخص شود. طبق شرایط ذکر شده برای مثال ما از کتابخانهٔ SDL در این بخش استفاده خواهیم کرد. نسخهٔ از پیش کامپایل شده مربوط به آن را از این بخش دریافت و استخراج نمایید. قست اول (نصب و راه اندازی تحت محیط Visual Studio) وارد محیط ویژوال استودیو شده و بعد از ایجاد پروژه بر روی پروژه راست کلیک و گزینهٔ Properties را انتخاب کنید، به زبانه C/C++ رفته و زبانه General گزینهٔ Additional Include Directories را انتخاب کنید. در ادامه مسیر include را از کتابخانهٔ SDL به پروژه معرفی کنید. مرحله کنونی را تایید کنید، و به زبانهٔ Linker و سپس General بروید، در این بخش گزینهٔ Additional Linker Library را انتخاب و مسیر Lib را از کتابخانهٔ SDL معرفی کنید. در این مرحله فایل‌های کتابخانه معرفی شده‌اند. به زبانهٔ General و Input برگشته و در بخش Additional Dependences فایل‌های SDL2.lib و SDL2_image.lib و SDL2main.lib و SDL2_ttf.lib را معرفی کنید. در نهایت فایل‌های dll موجود در پوشهٔ lib کتابخانه را در کنار فایل اجرایی کپی کنید. قست دوم (نصب و راه اندازی تحت محیط Qt Creator) پروژه خود را ایجاد و بر روی نام پروژه راست کلیک کنید. گزینهٔ Add Library و سپس External Library را بزنید. طبق شرایط قبل گزینه‌های lib را همراه با include به پروژهٔ خود اضافه نمایید. کد مربوط به فایل .pro به صورت زیر خواهد بود win32: LIBS += -L$$PWD/../../../../SDL2-2.0.8/lib/x86/ -lSDL2 -lSDL2main -lSDL2_ttf INCLUDEPATH += $$PWD/../../../../SDL2-2.0.8/lib/x86 DEPENDPATH += $$PWD/../../../../SDL2-2.0.8/lib/x86 طبق روش کامپایل برنامه را کامپایل کنید و قبل از اجرا فایل‌های dll یا lib را نسبت به پلتفرم خود در کنار فایل اجرایی پروژه قرار دهید. https://iostream.ir/forums/topic/33-روش-افزودن-کتابخانه‌های-دیگر-به-محیط-qt-creator/ روش فوق در بیشتر کتابخانه‌ها قابل انجام است.
  14. کامبیز اسدزاده

    با توجه به موضوع قبل بعد از نصب و راه اندازی کتابخانه برای اینکه ساده ترین مثال ممکن را توضیح دهیم در پروژه‌ی خود در فایل main.cpp کد زیر را وارد کنید. #include <iostream> #include <SFML/Window.hpp> int main() { sf::Window window(sf::VideoMode(640, 480), "Hello world!"); std::cout << "Window is created!" << std::endl; return 0; } در کتابخانه‌ی SFML تمامی کلاس‌ها در هدر‌های مخصوص خود قرار دارند، همانند استاندارد تمامی کتابهانه‌های سی‌پلاس‌پلاس ? بنابراین جهت نمایش یک پنجره ساده با ابعاد مشخص ما نیاز به هدر Window.hpp خواهیم داشت که در کُد بالا وارد شده است. از کلاس فوق نمونه گیری کرده و سپس تحت مشخصه‌ی VideoMode ابعاد و عنوان پنجره‌ی خود را وارد می‌کنیم. برنامه را اجرا کنید در صورتی که کتابخانه‌ی شما مشکلی نداشته باشد پنجره‌ی شما با مشخصات وارد شده نمایان خواهد شد. دقت کنید که برای ثابت نگه داشتن در یک بازه‌ی زمانی بهتر است از کد دستوری زیر برای نگه‌داری پنجره در زمان اجرا استفاده شود که هیچ قدرت قابل توجهی را از جانب پردازنده نمی‌طلبد: sf::sleep(sf::seconds(3)); کُد بهینه شده با توجه به ایجاد رخداد کلیدی برای پایان دادن برنامه به صورت زیر خواهد بود: #include <SFML/Window.hpp> int main() { sf::Window window(sf::VideoMode(640, 480), "Hello world!"); while (window.isOpen()) { sf::Event event; while (window.pollEvent(event)) { if (event.type == sf::Event::KeyPressed) window.close(); } } return 0; } در داخل حلقه‌ی while در صورتی که رخداد فشرده شدن کلیدی از طرف دستگاه ورودی مانند صفحه کلید رُخ دهد، پنجره بسته خواهد شد. کُد مربوطه را اجرا کنید، در صورتی که مشکلی وجود نداشته باشد پنجره ساخته شده شما نمایان و با فشرده شدن کلیدی از صفحه کلید بسته خواهد شد.? در ادامه آموزش‌های لازم در بخش مربوطه ارائه خواهد شد.
  15. کامبیز اسدزاده

    کتابخانه‌ی SFML به عنوان یک واسط کامپوننت‌های مفیدی را برای سیستم فراهم می‌کند که جهت توسعه برنامه‌های گرافیکی و بازی سازی بسیار مفید است. ماژول‌های این کتابخانه با عناوین System, Window, Graphics, Audio و Network به صورت چند-سکویی ارائه شده‌اند. جهت دریافت نسخه‌‌ی مورد نظر از این بخش اقدام کنید. بعد از دریافت در یکی از محیط‌های توسعه پروژه‌ای را ایجاد و مسیر‌های مرتبط با include و lib به پروژه‌ی خود معرفی کنید. به عنوان مثال در محیط Qt Creator به صورت زیر خواهد بود: win32: LIBS += -L$$PWD/../../YourPath/SFML-2.5.0/lib/ sfml-graphics.lib sfml-window-s.lib sfml-window.lib sfml-system-s.lib sfml-system.lib INCLUDEPATH += $$PWD/../../YourPath/SFML-2.5.0/include DEPENDPATH += $$PWD/../../YourPath/SFML-2.5.0/include توجه داشته باشید برای معرفی ماژول‌های ذکر شده می بایست آن‌ها را در بخش lib معرفی کنید. آموزش نصب و راه اندازی کتابخانه در ++C
  16. کامبیز اسدزاده

    کتابخانه‌ی SFML

    نگارش 2.5.۱

    64 دریافت

    کتابخانه‌ی SFML به عنوان یک واسط کامپوننت‌های مفیدی را برای سیستم فراهم می‌کند که جهت توسعه برنامه‌های گرافیکی و بازی سازی بسیار مفید است. ماژول‌های این کتابخانه با عناوین System, Window, Graphics, Audio و Network به صورت چند-سکویی ارائه شده‌اند. این کتابخانه برای زبان‌های C/C++/C#/Python و Java مورد استفاده قرار می‌گیرد. جهت یادگیری سریع این کتابخانه در مرجع می‌توانید به بخش اختصاصی SFML مراجعه کنید.

    رایگان

  17. کامبیز اسدزاده

    طبق موضوع قبلی جهت راه اندازی و استفاده از این کتابخانه برای آزمایش ساده ترین کُد ممکن در این کتابخانه در نسخه‌ی ویندوز یکی از محیط‌های توسعه نرم‌افزار مانند Qt Creator یا Visual Studio را اجرا کرده و یک پروژه ساده ایجاد کنید. ما در این مثال قرار است یک پنجره با ابعاد مشخصی را نمایان سازیم که به صورت زیر خواهد بود. نیاز است هدر SDL را به این صورت به کد خود اضافه کنیم: #include <SDL.h> سپس کُد زیر نمونه ساده ای از نمایش پنجره تحت SDL خواهد بود که در تابع main فراخوانی شده است: #include "SDL.h" int main(int argc, char ** argv) { bool quit = false; SDL_Event event; SDL_Init(SDL_INIT_VIDEO); SDL_Window * window = SDL_CreateWindow("Hello, World!", SDL_WINDOWPOS_UNDEFINED, SDL_WINDOWPOS_UNDEFINED, 640, 480, 0); SDL_Renderer * renderer = SDL_CreateRenderer(window, -1, 0); while (!quit) { SDL_WaitEvent(&event); switch (event.type) { case SDL_QUIT: quit = true; break; } } SDL_DestroyRenderer(renderer); SDL_DestroyWindow(window); SDL_Quit(); return 0; } شمارنده‌ی SDL_Event از هسته کتابخانه جهت مدیریت انواع رخداد‌ها می‌باشد. در ادامه کُد SDL_Init(SDL_INIT_VIDEO); جهت مقدار دهی اولیه است. جهت سفارشی سازی چنین بخشی بهتر است کُد آن به صورت زیر نوشته شود: if (SDL_Init(SDL_INIT_VIDEO) != 0){ std::cout << "SDL_Init Error: " << SDL_GetError() << std::endl; return 1; } در ادامه SDL_Window به عنوان نوع ساختار در SDL می‌باشد که با متد SDL_CreateWindow ترکیب و مقادیری چون عنوان، محور‌های y و x همچنین طول و عرض پنجره و در نهایت تنظیم فلگ وضعیت پنجره می‌باشد که به صورت پیش فرض بر روی مقدار ۰ تنظیم شده است. در صورتی که لازم باشد پنجره شما به صورت تمام صفحه نمایان شود کافی است فلگ آن را روی مقدار ۲ یا ۳ قرار دهید. جهت تولید (رندر) و ارسال پنجره به این مرحله کافی است از SDL_Renderer نمونه گرفته و پنجره‌ی خود را به متُد SDL_CreateRenderer ارسال کنید. در ادامه برای بررسی وضعیت حلقه‌ای تعریف شده است که در صورت رخداد خروج اجرا خواهد شد. while (!quit) { SDL_WaitEvent(&event); switch (event.type) { case SDL_QUIT: quit = true; break; } } در نهایت SDL_DestroyRenderer جهت نابود سازی زمینه‌ی تولید یک پنجره و تمامی موارد همراه آن و همچنین SDL_DestroyWindow جهت نابود سازی پنجره ساخته شده مورد استفاده قرار می‌گیرد که معمولاً در تمامی برنامه‌های تحت SDL مورد استفاده قرار خواهند گرفت. تابع SDL_Quit(); جهت پاکسازی تمامی موارد مقدار دهی شده زیر سیستمی مورد استفاده قرار می‌گیرد. برنامه را اجرا کنید، حال باید پنجره‌ای در ابعاد ۶۴۰ در ۴۸۰ پیکسل با عنوان Hello, World تولید و نمایش داده شود.?
  18. کامبیز اسدزاده

    کتابخانه‌ی SDL مخفف Simple DirectMedia Layer است که به صورت چند سکویی طراحی شده است که قدرت و سرعت بسیار زیادی در توسعه مالتی مدیا برای برنامه‌ها و بازی‌های رایانه ای دارد. توسط این کتابخانه می‌توانید مواردی چون صدا، ویدیو، دستگاه‌های ورودی، درایور سی دی و غیره را مدیریت کنید. همچنین این کتابخانه تحت Direct3D و OpenGL موارد ۳ بعدی را مدیریت می‌کند. نسخه‌های پایدار این کتابخانه ۲.۰.۸ می‌باشد که برای دریافت بر روی پلتفرم ویندوز 32 بیتی از این لینک و برای پلتفرم‌ 64 بیتی ویندوز از این لینک آن را دریافت کنید. برای پلتفرم macOS از این لینک برای دریافت اقدام کنید. دریافت کتابخانه برای پلتفرم لینوکس. توجه داشته باشید این کتابخانه به صورت پیشفرض تمامی ماژول‌های خود را همراه ندارد. برای مثال در صورتی که می‌خواهید با رندر بر روی متن و تصاویر کار کنید باید آن را از این بخش دریافت و در کنار کتابخانه‌ی اصلی قرار دهید. توجه داشته باشید که پوشه‌ی include و lib را بر اساس نوع معماری پردازنده و سیستم عامل خود مشخص کنید. SDL2Main.lib و SDL2.lib را نیاز خواهید داشت. در این مثال کُد فوق در فایل .pro برای محیط Qt Creator به صورت زیر می‌باشد. INCLUDEPATH += $$PWD/../../YourPath/SDL2-2.0.8/include DEPENDPATH += $$PWD/../../YourPath/SDL2-2.0.8/include win32: LIBS += -L$$PWD/../../YourPath/SDL2-2.0.8/lib/x64/ -lSDL2 win32: LIBS += -L$$PWD/../../YourPath/SDL2-2.0.8/lib/x64/ -lSDL2main جهت اجرای صحیح برنامه فایل SDL2.dll را در کنار فایل اجرایی برنامه‌ی خود کپی کنید. در ادامه‌ی این موضوع آموزش‌های مرتبط با این کتابخانه ارائه شده است. برای مثال (اولین برنامه) آموزش نصب و راه اندازی کتابخانه در ++C
  19. کامبیز اسدزاده

    همانطور که می‌دانید کتابخانه‌ی بوست یکی از بهترین کتابخانه‌های Non-STL برای سی‌پلاس‌پلاس می‌باشد. در این پُست قصد داریم در رابطه با ساخت و استفاده کتابخانه‌ی بوست توضیح دهیم. ابتدا کتابخانه را از اینجا دریافت کنید. فایل‌های دریافتی را در یک مسیر مشخص استخراج کنید. راه اندازی در پلتفرم ویندوز برای مثال در این آموزش ما فایل‌های مورد نظر خود را در مسیر C:/Boost استخراج کرده‌ایم. در کنسول به مسیر فوق رفته و دستور زیر را اجرا کنید. bootstrap.bat این دستور تحت ابزار مخصوص بوست فایل کانفیگ ساخت آن را ارزیابی و اجرا می‌کند. بنابراین دستور بعدی به صورت زیر خواهد بود: b2 toolset=msvc-14.0 --build-type=complete --abbreviate-paths architecture=x86 address-model=64 install -j4 گزینه‌ی toolset برای مشخص کردن کامپایلر و نسخه‌ی آن می‌باشد که در اینجا آن را msvc-14.0 قرار داده ایم. گزینه‌ی architecture جهت مشخص کردن معماری پردازنده است که به صورت پیش فرض بهتر است بر روی x86 تنظیم شود تا بر روی هر دو معماری ۶۴ و ۳۲ بیتی اجرا شود. گزینه‌ی address-model جهت مشخص سازی نوع پردازنده‌ای که پلتفرم اجرایی دارا می‌باشد را مشخص می‌سازد. برای مثال ما بر روی ویندوز ۶۴ بیتی و پردازنده ۶۴ بیتی گزینه x64 را انتخاب کرده ایم. گزینه‌ی -j برای مشخص کردن تعداد هسته‌های قابل استفاده در زمان کامپایل می‌باشد. که به صورت پیشفرض بر روی ۴ تنظیم شده است (۴ هسته قابل اجرا به صورت هم زمان). بعد از اجرای دستور فوق چیزی حدود ۳۰ دقیقه (کمتر و یا بیشتر) متناسب با قدرت پردازشی سیستم شما نیاز خواهد بود تا کتابخانه‌ی بوست کامپایل شود. توجه داشته باشید که بخشی از کتابخانه‌های موجود در بوست به صورت پیش فرض کامپایل نمی‌شوند و در صورت نیاز شما باید آن‌ها را به صورت سفارشی تحت دستور --with-libraryname مشخص نمایید. کد زیر را اجرا نموده و نتیجه را مشاهده کنید: #include <boost/scoped_ptr.hpp> #include <iostream> int main() { boost::scoped_ptr<int> p{new int{1}}; std::cout << *p << '\n'; p.reset(new int{2}); std::cout << *p.get() << '\n'; p.reset(); std::cout << std::boolalpha << static_cast<bool>(p) << '\n'; } این آموزش برای پیکربندی کتابخانه‌های chrono, thread, filesystem, regex و...بر روی پلتفرم‌های macOS و Linux ادامه خواهد داشت...
  20. سلام، بنابر درخواست اعضای محترم لازم شد آموزشی در رابطه با نحوهٔ افزودن کتابخانه‌های دیگر به این محیط را توضیح دهیم. من در این آموزش کتابخانهٔ Poco را در نظر گرفته ام. کتابخانه را دانلود کرده و در یک مسیر مشخص اضافه کنید. برای مثال C:/MyLib/poco-1.9.0-all و یا در لینوکس و مک در مسیر /Users/{username}/Documents/Libs/poco-1.9.0-all در نظر داشته باشید که هر کتابخانه‌ای معمولاً دارای دو پوشه lib و include خواهد بود که شما باید این دو را به پروژهٔ خود اضافه کنید. هر کتابخانه‌ای باید قبل از کامپایل پیکربنی شده و سپس بیلد شود. برای مثال در کتابخانهٔ پوکو دستورات زیر را بعد از دریافت اجرا خواهیم کرد. cd /Users/username/Documents/Libs/poco-1.9.0-all سپس دستور ./configure و بعد از آن دستور make را اجرا کنید تا کتابخانه شروع به کامپایل شدن کند. بعد از کامپایل در پوشهٔ lib تمامی کتابخانه‌ها ایجاد خواهند شد. وارد محیط Qt Creator شده و سپس بعد از ایجاد یک پروژه بر روی آن راست کلیک و گزینهٔ add library را انتخاب کنید. سپس گزینهٔ External library را انتخاب نمایید. در مرحلهٔ بعد فایل libPocoFoundation.60.dylib و libPocoNet.60.dylib را در بخش library file و سپس مسیر include آن را در include path وارد کنید که مشابه مسیر زیر خواهد بود. Library file : /Users/kambiz/Documents/Libs/poco-1.9.0-all/lib/Darwin/x86_64/libPocoFoundation.60.dylib Include path : /Users/kambiz/Documents/Libs/poco-1.9.0-all/Foundation/include Library file : /Users/kambiz/Documents/Libs/poco-1.9.0-all/lib/Darwin/x86_64/libPocoNet.60.dylib Include path : /Users/kambiz/Documents/Libs/poco-1.9.0-all/Net/include بعد از افزودن کسیر و کتابخانه کُد تولید شده در فایل .pro به صورت زیر خواهد بود: win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../Libs/poco-1.9.0-all/lib/Darwin/x86_64/release/ -lPocoFoundation.60 else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../Libs/poco-1.9.0-all/lib/Darwin/x86_64/debug/ -lPocoFoundation.60 else:unix: LIBS += -L$$PWD/../../Libs/poco-1.9.0-all/lib/Darwin/x86_64/ -lPocoFoundation.60 INCLUDEPATH += $$PWD/../../Libs/poco-1.9.0-all/Foundation/include DEPENDPATH += $$PWD/../../Libs/poco-1.9.0-all/Foundation/include win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../Libs/poco-1.9.0-all/lib/Darwin/x86_64/release/ -lPocoNet.60 else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../Libs/poco-1.9.0-all/lib/Darwin/x86_64/debug/ -lPocoNet.60 else:unix: LIBS += -L$$PWD/../../Libs/poco-1.9.0-all/lib/Darwin/x86_64/ -lPocoNet.60 INCLUDEPATH += $$PWD/../../Libs/poco-1.9.0-all/Net/include DEPENDPATH += $$PWD/../../Libs/poco-1.9.0-all/Net/include مراحل افزودن به پایان رسید، وارد محیط کیوت شده و داخل فایل main.cpp هدر‌های مرتبط با کتابخانه و همچنین کُد آزمایشی آن را اضافه کنید. در این مثال من از کتابخانهٔ Net استفاده می‌کنم. //Qt Lib #include <QCoreApplication> //STL & External Lib #include "Poco/Net/SocketAddress.h" #include "Poco/Net/StreamSocket.h" #include "Poco/Net/SocketStream.h" #include "Poco/StreamCopier.h" #include <iostream> int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Poco::Net::SocketAddress sa("www.iostream.ir", 80); Poco::Net::StreamSocket socket(sa); Poco::Net::SocketStream str(socket); str << "GET / HTTP/1.1\r\n" "Host: www.iostream.ir\r\n" "\r\n"; str.flush(); Poco::StreamCopier::copyStream(str, std::cout); return a.exec(); } برنامه را کامپایل و اجرا کنید ?
  21. کامبیز اسدزاده

    کتابخانه‌ی بوست (Boost)

    نگارش 1.69.0

    59 دریافت

    کتابخانه Boost منبعی از کتابخانه‌های قابل حمل و آزاد ++C را فراهم می‌کند که از اصطلاح Peer-Reviewed پشتیبانی می‌کند. ما بر این تاکید می‌کنیم، Boost کتابخانه ای است که به خوبی با کتابخانه ی استاندارد ++C کار می‌کند. بوست مجموعه ‌ای از کتابخانه‌‌های برنامه ‌نویسی برای زبان برنامه ‌نویسی سی پلاس پلاس است که پشتیبانی از کارهایی مانند جبر خطی، ساخت اعداد شبه تصادفی, ریسه‌بندی, پردازش تصویر, عبارت باقاعده و آزمایش واحد را ارائه می‌دهد. بیشتر این کتابخانه ‌ها تحت پروانه نرم ‌افزار بوست منتشر می‌شوند که به بوست اجازه می‌دهد هم در یک نرم ‌افزار آزاد و هم در یک نرم‌ آفزار انحصاری استفاده شود. بسیاری از پدید آورندگان بوست عضو کمیته استانداردسازی سی++ هستند و چند کتابخانه بوست برای الحاق به استانداردهای TR1 و C++11 پذیرفته شده ‌اند.

    رایگان

  22. کامبیز اسدزاده

    کتابخانه‌ی پوکو (Poco)

    نگارش 1.9.0

    23 دریافت

    این کتابخانه توسط شرکت appinf تولید و انتشار یافته است. هدف از این کتابخانه در مرحله اول فراهم نمودن کلاس های قدرتمند و تخصصی برای شبکه و اینترنت می‌باشد.

    رایگان

  23. کامبیز اسدزاده

    کتابخانه‌ٔ cURL

    کتابخانه cURL یک پروژه نرم‌افزاری کامپیوتر است که یک کتابخانه و ابزار خط فرمان را برای انتقال داده ها با استفاده از پروتکل‌های مختلف را فراهم می‌کند. چیزی که موجب محبوبیت این کتابخانه شده است پشتیبانی از پروتکل‌های کثیری مانند DICT, FILE, FTP, FTPS, Gopher, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, POP3, POP3S, RTMP, RTSP, SCP, SFTP, SMB, SMTP, SMTPS, Telnet و TFTP می‌باشد. همچنین cURL گواهی‌نامه های SSL را نیز پشتیبانی می‌کند. پروژه cURL با دو عنوان libcurl و cURL در سال ۱۹۹۷ توسط دانیل استنبرگ معرفی شد. به طور کلی libcurl یک کتابخانه انتقال داده سمت-کاربر است و cURL یک خط فرمان جهت دریافت و ارسال داده تحت آدرس url است. برای مثال کد زیر نمونه ای از نحوه عملکرد این کتابخانه جهت استفاده از متد Get برای کار با پروتکل HTTP می‌باشد: #include <stdio.h> #include <curl/curl.h> int main(void) { CURL *curl; CURLcode res; curl = curl_easy_init(); if(curl) { curl_easy_setopt(curl, CURLOPT_URL, "http://example.com"); /* example.com is redirected, so we tell libcurl to follow redirection */ curl_easy_setopt(curl, CURLOPT_FOLLOWLOCATION, 1L); /* Perform the request, res will get the return code */ res = curl_easy_perform(curl); /* Check for errors */ if(res != CURLE_OK) fprintf(stderr, "curl_easy_perform() failed: %s\n", curl_easy_strerror(res)); /* always cleanup */ curl_easy_cleanup(curl); } return 0; }
×
×
  • جدید...