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

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

بنیـــان گذار
  • تعداد ارسال ها

    505
  • تاریخ عضویت

  • روز های برد

    266

تمامی مطالب نوشته شده توسط کامبیز اسدزاده

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

    همین روشی هست که مثال زدم، فقط از یه فایل js کمک گرفته که تو این مراحل نیازی نیست.
  2. کامبیز اسدزاده

    سادست که! محتوای فایل اول هست MyFirstFile.qml و محتوای فایل دوم MySecondFile.qml پایینی هست. فایل اول شما شامل Component ای هستش که می‌خواهید مقادیرش رو تو فایل دیگه‌ای تغییر بدین. فایل دوم که شامل فراخوانی و اعمال تغییرات روی کامپوننت به حساب میاد.
  3. کامبیز اسدزاده

    از پراپرتی‌های سراسری و همچنین QtObject استفاده کنید، نمونه مثال زیر رو برای این منظور نوشتم که پاسخ سوال شماست. //MyFirstFile.qml import QtQuick 2.11 import QtQuick.Controls 2.2 Page { property color setColor: "green" property string setTitle: "Hi" QtObject { id: myObjectSetting property color color: setColor property string title: setTitle } Loader { sourceComponent: myComp anchors.centerIn: parent } Component { id: myComp Rectangle { color: myObjectSetting.color; width: 100; height: 100; Text { anchors.centerIn: parent text: myObjectSetting.title color: myObjectSetting.color } } } } //MySecondFile.qml import QtQuick 2.11 import QtQuick.Layouts 1.3 import QtQuick.Controls 2.4 ColumnLayout { anchors.centerIn: parent MyFirstFile { id:myItem setTitle: "Hi" setColor: "red" } Button { text: "Change" onClicked: { myItem.setColor = "yellow" myItem.setTitle = "Bye!" } } }
  4. لطفاً جهت ارسال آگهی‌های خود در حوزه‌ی درخواستی خود برای برنامه‌نویس و تشکیل تیم توسعه خود قوانین زیر را در نظر داشته باشید. در غیر این صورت آگهی شما تایید نخواهد شد. آگهی نباید شامل تصویر باشد. سعی کنید نیاز خود را برای درخواست با جزئیات کامل ارسال کنید. آدرس و مزایای استخدامی خود را مشخص نمایید. در صورتی که نیاز است لینکی را ارسال کنید سعی کنید آن لینک آدرس سایت شرکت خودتان باشد. این بخش به صورت رایگان در نظر گرفته شده است، و مرجع هیچ مسئولیتی در قبال نتایج استخدامی شما نخواهد داشت. قوانین نگارشی و شرایط ارسال محتوا برای ارسال آگهی‌های خود از این بخش اقدام کنید.
  5. شرایط و مجوز‌های تحت کیوت نوع مجوز و ویژگی‌ها LGPLV3 GPLV2/GPLV3 مجوز تجاری هزینه رایگان رایگان شروع هزینه از ۴۵۹ دلار در هر ماه حقوق و خدمات پشتیبانی جامعه پشتیبانی رسمی از طرف شرکت کیوت شما می‌توانید نرم‌افزارتان را به صورت خصوصی نزد خود نگه‌دارید. در صورتی که اپلیکیشن خود را به صورت لینک-پویا (Dynamic-link) کامپایل کرده باشید، می‌توانید آن را خصوصی برای خود حفظ کنید. بدون ارائه مکانیزم خاصی برای کتابخانه‌های کیوت (می‌توانید همیشه از کامپایل استاتیک) بهره‌مند شوید. نیازی برای ارائه کپی از مجوز و صراحت از استفاده کیوت نمی‌باشد. نیازی برای ارائه یک کپی (نسخه) از سورس کُد کیوت برای مشتری را ندارید. حقوق کامل برای تغییرات در کد منبع کیوت و سفارشی آن اجبار و تاکید بر (مدیریت حقوق دیجیتال) مشاهده‌ جزئیات در مجوز LGPv3 مشاهده‌ جزئیات در مجوز LGPv3 اجبار و تاکید بر (پیاده سازی پروتکل های نرم افزاری) مشاهده‌ جزئیات در مجوز LGPv3 مشاهده‌ جزئیات در مجوز LGPv3 می‌توانید دستگاه‌های مصرف کننده‌ی بسته شده ایجاد کنید ماژول‌ها ماژول Qt Essentials افزونه‌های عمومی کیوت ماژول Qt Charts ماژول Qt Data Visualization ابزار‌ها محیط توسعه یکپارچه‌ی نرم‌افزاری Qt با تمامی قابلیت‌ها ابزار‌های مستند‌ سازی ابزار داخلی سازی (درونی ساز) ابزار طراحی Qt Quick Designer ابزار Qt Quick Profiler ابزار توسعه و پیشرفت در Visual Studio ابزار Qt Quick 2D Renderer، استفاده بدون OpenGL ابزار کامپل Qt Quick Compiler ابزار‌ها و راه حل‌های کیوت برای ساخت دستگاه‌های اِمبِد ابزار Qt Virtual Keyboard خطایابی (دیباگینگ مستقیم) بر روی دستگاه ابزار Boot to Qt نصب و استقرار با یک کلیک در دستگاه و پلتفرم هدف دستورالعمل‌های پروژه Yocto برای سفارشی سازی ایمیج‌های از پیش ساخته شده توجه داشته باشید که معمولاً شرکت کیوت بعضی از ویژگی‌های موجود را که مختصِ نسخه‌ی تجاری است بعضاً در نسخه‌های جدید تحت مجوز‌های LGPv3 منتشر می‌کند. در این اواخر نمونه‌ای از آن‌ها Qt Quick Compiler بود که در نسخه‌ی ۵.۱۱.۰ منتشر شد.
  6. در این پست قصد داریم در رابطه با نحوه‌ی نصب و راه‌اندازی محیط کیوت جهت توسعه‌ی نرم‌افزار توضیح دهیم. بنابراین مراحل آن به ترتیب به صورت زیر خواهد بود. انتخاب پلتفرم توسعه (ویندوز، مک یا لینوکس) انتخاب و دانلود نسخه‌ی مورد نظر برای محیط توسعه نصب و راه اندازی محیط توسعه پیکربندی و اجرای اولین برنامه ساخت و استقرار برنامه طبق توضیحات بالا، ابتدا وارد بخش مرکز دریافت در مرجع شده و نسخه‌ی Qt مربوط به پلتفرم مورد نظر خود را دریافت کنید. برای این منظور از این بخش وارد شوید (دقت کنید که حتما وارد حساب کاربری خود شده باشید). نکته : نسخه‌ی موجود در این مرجع به‌روز‌ترین نسخه‌ی ممکن خواهد بود. نکته‌ ۲ : در محیط ویندوز حتماً توجه داشته باشید که باید Visual Studio نصب باشد. اگر به خاطر حجم آن قادر به نصب نیستید سعی کنید نسخه‌ی Build Tools را نصب نمایید. این بسته شامل کامپایلر‌ها و SDK های ویندوز است که برای کار با سی++ به آن‌ها نیاز خواهید داشت. در صورتی که یکی از این دو پیشنهاد را نصب نکنید ممکن نیست که بتوانید برنامه‌ای را کامپایل کنید. نکته ۲ : در محیط لینوکس مطمئن باشید که GCC نصب است. همچنین دستورات زیر را قبل از نصب کیوت اعمال کنید تا پکیج‌های مورد نیاز نصب شود. sudo apt-get install build-essential libgl1-mesa-dev نکته ۳ : در محیط macOS حتماً باید Xcode نصب باشد. جهت نصب کیوت فایل نصبی آن را در محیطی که هستید اجرا کنید تا برنامه نصبی اطلاعات مربوطه را بررسی نماید. در ادامه گزینه‌ی Next را بزنید، در صورتی که مایل هستید اطلاعات ثبت‌نام (جهت ثبت اطلاعات در سرور Qt) را وارد کنید. در غیر این صورت گزینه‌ی Skip را بزنید و ادامه دهید. در مرحله‌ی بعد گزینه Next را زده و مسیر نصبی خود را انتخاب کنید، سعی کنید همان مسیر پیشفرض را تایید کنید. مهمترین بخشی که بسیاری از کاربران در مورد آن سوال می‌کنند این مرحله است که چه گزینه‌هایی را باید برای نصب انتخاب کنیم. در این بخش تمامی گزینه‌ها را انتخاب کنید به جز گزینه‌هایی که منسوخ شده اند و با واژه‌ی (Deprecated) مشخص شده اند و قرار است در نسخه‌های بعدی حذف شوند. همچنین گزینه‌هایی که مقابل آن‌ها TP نوشته شده است مخفف Technology Preview است به معنی اینکه این ماژول یا پلاگین به صورت آزمایشی فعلاً در این پکیج قرار گرفته اما نهایی نشده است. در بخش Tools تمامی گزینه‌ها را انتخاب کنید همه‌ی آن‌ها نیاز است. همچنین برای اینکه بتوانید از دیتابیس و پلاگین‌هایی مانند QMySQL استفاده کنید باید گزینه‌ی Source را انتخاب کنید تا بعداً امکان ساخت این ماژول فراهم شود. توجه کنید که در این مثال گزینه‌های MSVC 2015 انتخاب نشده است. دلیل آن است که ما روی سیستم از نسخه‌ی ۲۰۱۷ ویژوال استودیو استفاده می‌کنیم و ابزار‌های ساخت ویرایش ۲۰۱۷ تعبیه شده اند. بنابراین با توجه به نسخه‌ی VS آن‌ها را انتخاب کنید. مواردی که شامل گزینه‌های UWP هستند به خاطر آن است که شما بتوانید تحت کیوت برنامه‌های Universal Windows Platform را استقرار و اجرا کنید. همچنین جهت امکان تولید برنامه‌های اندروید و ویندوز فون گزینه‌های Android ARMv7 و UWP ARMv7 نیاز هستند. دقت کنید که گزینه‌ی x86 برای اندروید معمولاً برای نسخه‌ی مجازی دسکتاپ مورد استفاده قرار می‌گیرد. در پلتفرم‌های لینوکس و مک‌او‌اس گزینه‌های مرتبط با MSVC وجود ندارد. تنها با این تفاوت که در پلتفرم مک گزینه‌ی Android و iOS نیز موجود هستند و شما می‌توانید با انتخاب گزینه‌ی iOS آن را به محیط توسعه خود اضافه کنید. در نهایت شرایط و مجوز‌های کیوت را تایید کنید که در ادامه آمده است: توجه داشته باشید که بر اساس انتخاب‌هایی که کرده‌اید فضای لازم برای نصب Qt به صورت زیر به اطلاع شما رسانده می‌شود که در این بخش چیزی حدود ۱۰ گیگابایت است. بر روی Install کلیک کنید و مراحل نصب را نهایی سازی نمایید. بعد از نصب سیستم توسعه‌ی شما آماده‌ی استفاده است. یک پروژه جدید ساخته در صورتی که مراحل توضیح داده شده را به درستی انجام داده باشید انتخاب کامپایلر برای شما به درستی اعمال خواهد شد. در ادامه برای ساخت و اجرای برنامه نوع کامپایلر را انتخاب و کامپایل کنید. در نهایت برنامه بدون مشکلی اجرا خواهد شد. همچنین مرحله‌ی آخر، جهت بررسی نحوه‌ی استقرار و اجرای برنامه این بخش را مطالعه کنید.
  7. با سلام، با توجه به سوالات مکرر برخی از کاربران و خصوصاً دانشجویان جدید، تصمیم گرفته شد تا توضیحاتی دربارهٔ نحوهٔ یادگیری برنامه‌نویسی با سی‌پلاس‌پلاس بیان شود. قبل از هر چیز لازم است بدانید، سی‌پلاس‌پلاس یک زبان برنامه‌نویسی کاملاً تخصصی مهندسی است. بنابراین یادگیری آن طبیعتاً نیاز به تلاش، تحمل و پشت‌کار کافی در مقابل چالش‌های آن خواهد داشت. مقدمه در حال حاضر بیش از سه دهه است که از ساخت و معرفی زبان برنامه‌نویسی ++C می‌گذرد. در رابطه با آن‌ که هدف از ایجاد این زبان چه چیزی بوده و مزایای آن نسبت به زبان‌های دیگر چه چیزی است (چرا موتور مخفی جهان مدرن امروزی است) را می‌توانید در این مقاله مطالعه کنید. اما بسیاری از افراد علاقه‌مند به زبان‌های برنامه‌نویسی تمایل بسیاری دارند تا در برنامه‌نویسی با این زبان به درجه مطلوب و درواقع (حرفه‌ای) برسند. قبل از هر چیز باید مواردی را در نظر داشته باشیم که یاد گیری زبان‌های برنامه‌نویسی به خودی خود کافی نیست! مخصوصاً زبان‌‌های C و ++C مستلزم پیش‌نیاز‌های تخصصی بسیاری هستند که در روند تولید، توسعه، تجزیه و تحلیل لایه‌های مختلف مهم است. آیا زبان سی‌پلاس‌پلاس در حال توسعه‌ است؟ به جرأت می‌توانم بگویم که سی‌پلاس‌پلاس به عنوان پیش‌تاز زبان‌های برنامه‌نویسی با سرعت بسیار زیادی در حال گسترش و توسعهٔ خود است. بهتر است بدانید این زبان از شیوهٔ نسخه‌نگاری معمولی بهره نمی‌برند، بلکه از «استاندارد‌‌» (ISO/IEC) که کمیتهٔ استاندارد‌سازی آن را تأیید و نهایی می‌کند بهره می‌برد. بنابراین، بر اساس استانداردی پیش می‌رود که پیش‌نویسه‌ها و بهبود‌های آن تماماً با حفظ (پشتیبانی از عقب‌گرد) قابل توجه است. همانطور که در تصویر مربوطه می‌بینید، سی‌پلاس‌پلاس در آخرین به‌روز رسانی، به نقشهٔ توسعهٔ خود در سال‌های بعد نیز اشاره کرده است که در قالب استاندارد‌های ۲۳، ۲۶ و ۲۹ از الآن یاد شده‌اند. چیزی که در هیچ زبانی در وضعیت فعلی به صورت نقشهٔ راه از توسعه آن‌ها نمی‌توان دید! این خود یک نکتهٔ بسیار مثبت است که تیم (کمیته) استاندارد‌سازی این زبان کاملاً این اطمینان را می‌دهد که این زبان نسبت به نیاز و آینده در حال به روز بوده، است و خواهد بود. لازم است بدانید، استاندارد‌های فعلی، ۱۷ و ۲۰ و بعد ۲۳ به عنوان یک نسل انقلابی و جهش یافته از سی‌پلاس‌پلاس یاد می‌شوند، اگر شما تجربهٔ نوینی از برنامه‌نویسی را می‌طلبید، بهتر است به استاندارد ۲۰ خوش‌آمد‌گویی کنید که در کنار کارآیی بسیار عالی، یک نحو و سبک بسیار ساده و روان در اختیار توسعه‌دهنده قرار می‌دهد. در ادامه ما به سوالاتی که معمولاً توسط تازه‌کاران پرسیده شده است پاسخ داده‌ایم: ابعاد علمی و اقتصادی کار با ++C در ایران متاسفانه اکثر ما ملتی هستیم، تَنبَل و حاضر برای لُقمهٔ آماده! بنابراین بازار کار در ایران به گونه‌ای است که بیشتر شرکت‌ها و افراد توسعه دهنده به سراغ زبان‌های ساده‌تر و در دسترس‌تر (بی دردسر) می‌روند. غافل از آن که یک برنامهٔ تولید شده توسط سی++ بسیار سریع، جذاب، قدرتمند و انعطاف‌پذیرتر است. همهٔ بحث در اینجا تمام نمی‌شود، چرا که شاید در سال‌های اخیر وضعیت تقریباً فرق کرده و به کمک اطلاع رسانی‌های اساتید و دوستان حرفه‌ای، ما در این زمینه این اطلاع‌رسانی به خوبی صورت گرفته و توسعه دهنده‌ها از قابلیت‌ها پنهان این زبان آگاه شده‌اند و می‌دانند که سی‌پلاس‌پلاس به عنوان یک زبان بسیار کاربردی در زمینه‌های مختلف جایگاه ویژه‌ای دارد. شرکت‌ها و گروه‌های برنامه‌نویسی بسیاری به دنبال برنامه‌نویس‌های سی++ هستند که این امر نشان دهندهٔ این است که نسبت به سال‌های گذشته پیشرفت و آگاهی جامعهٔ برنامه‌نویسی در این حوزه منطقی‌تر و بهتر شده است. من بارها در مورد بحث محدودیت‌های سخت‌افزاری، مشکلات و محدودیت‌های پیش و روی قانون مور، مسائل مربوط به انرژی سبز و غیره صحبت کرده‌ام. و اکنون زمان آن رسیده است که بیشتر در این باره فکر کنید که واقعاً چه ابزار‌هایی آیندهٔ بهتر و موثر‌تری در پیشرفت صنایع خواهند داشت. بنابراین، بهتر است قبل از هرچیز در نظر داشته باشید که هدف از این تاپیک، این نیست که اثبات کنیم یک زبان نسبت به زبان دیگر برتری دارد. هدف اصلی من این است به واقعیت‌هایی اشاره کنم که غیر منطقی نیستند. چرا که واقعاً کارفرمایانی وجود دارند که نیازمند به برنامه‌نویسانی هستند که تخصص خوبی در زبان‌های برنامه‌نویسی دیگری مانند ++C دارند. همه چیز در زبان‌های سطح‌بالا‌تر خلاصه نشده است! توجه داشته باشید که هدف از این توضیحات چنین نیست که بعد از خواندن این مطالب زبان برنامه‌نویسی مورد علاقهٔ خود را کنار گذاشته و به سمت سی++ بروید، خیر! یا مقصود آن نیست که با دیدن و شنیدن پیچ و خم‌های آن از یادگیری آن منصرف شوید. من بارها گفته‌ام، تمامی زبان‌ها به عنوان ابزار‌های کاری شما در یک جعبهٔ ابزار هستند و هر زبانی حوزهٔ کاربردی خودش را دارد. بنابراین قبل از اینکه شما تصمیم بگیرید که چه زبانی را یاد خواهید گرفت باید حوزهٔ کاری وعلاقهٔ خودتان را مشخص کنید سپس وارد تحقیق و بحث و نظر خواهی راجع به آن زبان نمایید. مقایسهٔ زبان طبق این قانون کاملاً کار اشتباه و بچه‌گانه است و به هیچ عنوان در مورد یک زبان برنامه‌نویسی گاردِ تعصبی نگیرید. متاسفانه به خاطر تفکرات اشتباه و معرفی‌های غیر منطقی و غیرعلمی برنامه‌نویسان کشور ما که ممکن است حتی خودِ شما هم چنین تصور کنید، در رابطه با سایر زبان‌ها مانند سی++ بسیاری از کارفرمایان نیازمند چنین برنامه‌نویسانی هستند که در کشور ما واقعاً نیاز است. توجه داشته باشید که انتخاب درست این نیست که چون همه سراغ زبان‌های پر مخاطب‌تری می‌روند و چون تمامی آگهی‌ها استخدامی مرتبط با آن‌ها است پس فقط باید آن‌ها را یاد گرفت! خیر چنین تفکری اشتباه است و ضربهٔ بسیار بزرگی در صنعت و دانش آیندهٔ جامعهٔ تخصصی هر کشوری که به این شکل پیش می‌رود خواهد زد، چرا که ما باید طبق مسیر و سرعتی که دنیا در حال جهش است، خود را هماهنگ و به‌روز کنیم. نکاتی در این میان وجود دارد که باید به آن‌ها اشاره کرد: متاسفانه در کشور ما بسیاری از برنامه‌نویسان چه مبتدی چه حرفه‌ای اینطور تصور می‌کنند که تولید محصول نرم‌افزاری یعنی برنامه‌نویسی یک نرم‌افزار که قرار است به بانک اطلاعاتی متصل شده و کار‌هایی مانند ثبت و ویرایش اطلاعات و در نهایت گزارش گیری و دیگر عملیات ممکن را انجام دهد! این تفکر به شدت اشتباه است! الآن دیگر سیستم نرم‌افزاری، معماری‌ها و سبک و سیاق‌های ساخت‌و‌ساز فرق کرده است. مبتنی بودن بر خدمات متمرکز، غیر‌متمرکز و دیگر فناوری‌ها بسیار مهم است. توجه کنید که بزرگ‌ترین و معروف‌ترین فناوری‌ها مطرح جهانی معمولاً به واسطهٔ این زبان طراحی می‌شوند، مانند، سیستم‌عامل‌ها، نرم‌افزار‌ها، زیر‌ساخت‌ها و حتی بلاک‌چین و بیت‌کوین که خالی از لطف نیستند. بسیاری از بانک‌ها و شرکت‌های صنعتی و اقتصادی مهم کشور نیازمند برنامه‌نویسان سی++ هستند تا بتوانند در بحث بانکی برای توسعه دستگاه‌های پرداخت مانند Pos و ATM از این زبان‌ و برنامه‌نویسان بهره‌ ببرند. در صنایع بزرگ خودرو سازی و دیگر موارد نرم‌افزار‌های مورد نیاز است تا با سرعت بسیار و بدون محدودی پلتفرمی پاسخگوی یک چرخهٔ تولید باشند تا بتواند زیرساخت‌ها و رابط‌های یک شرکت بزرگ را مدیریت و آن را بهینه کند. در بسیاری از حوزه‌های صنعتی کشور شرکت‌های غول‌پیکر در زمینهٔ تولیدات انبوه و سنگین که توسط ماشین‌آلات صورت می‌گیرد به دنبال برنامه‌نویسان سی و سی++ هستند که ممکن است به صورت معرف یا آشنا با آن‌ها مواجه و استخدام شوید. شرکت‌های سخت‌افزاری و استارت‌آپ‌هایی که در حوزهٔ الکترونیک و سخت‌افزار فعالیت می‌کنند به دنبال برنامه‌نویسیان سی++ هستند تا بتوانند در حوزهٔ کاری خود اهداف خود را توسعه و شما را به عنوان مهره‌ای مفید پیش ببرند. شرکت‌های توسعه‌دهندهٔ موبایل و خطوط تولیدی تلفن‌های همراه داخلی گسترش یافته و به شدت نیازمند برنامه‌نویسان سی++ هستند که برخی از آن‌ها مبادلات بین‌المللی نیز دارند. در بخش حوزهٔ شهر سازی، مدیرت شهر و همچنین راه‌‌‌داری شرکت‌هایی هستند که برای تولید سیستم‌های مدیریتی مانند مدیریت راه‌ها و تردد‌های خودرو و یا مدیریت ترافیک و موارد این چنینی به دنبال برنامه‌نویسان سی++ هستند. بسیاری از شرکت‌ها و حتی تیم‌های توسعه بر روی پلتفرم‌های iOS و Android به صورت تخصصی سفارشی سازی و حتی ساخت و توسعهٔ اپلیکیشن‌های ایرانی تمرکز دارند که جدیداً به لطف آگاهی از فریم‌وُرک‌هایی مانند Qt به سمت این حوزه آمده و نیازمند سی++ کاران هستند. شرکت‌های بازی‌سازی کشور ما که این سال‌ها با پیشرفت‌های خوبی مواجه شده‌اند به دنبال برنامه‌نویسان سی++ هستند که بتوانند در این صنعت برای فرهنگ‌سازی و توسعه صنعت بازی سازی جلو بروند. بسیاری از شرکت‌های پنهان وجود دارد که به صورت بسیار مخفیانه در صنایع سه‌بعدی و پیشرفته‌ در حال فعالیت‌ هستند که محصولات خود را نه در ایران بلکه در خارج از آن آمریکا و دیگر کشور‌های اروپایی به فروش می‌رسانند که به سفارش آن‌ها بوده است. با دید سطحی به این مسائل نباید نگاه کنید، اگر آگهی‌های استخدامی نمیبینید به خاطر این است که این زبان کار کُن می خواهد نه تَنبل! بنابراین شما باید به سراغ آن بروید چرا که بسیاری از شرکت‌های بین‌المللی فعالیت‌های بزرگی انجام می‌دهند که هیچوقت از آن‌ها خبر ندارید و به صورت کاملاً سفارشی و حساسیت کامل به دنبال برنامه‌نویسان این زبان هستند (چون می‌دانند یک سی++ کار هدفمند و با دید بازتری به توسعه نگاه می‌کند). چنین شرکت‌ها معمولاً استخدام را به صورت رابطه‌ای انجام می‌دهند و تعداشان هم کم نیست. ما می‌دانیم که شاید شما با دیدگاه اینکه حتماً باید نرم‌افزار‌های کاربردی تولید کنید به قضیه نگاه می‌کنید، خوشبختانه فریم‌ورک‌ کیوت به قدری قدرتمند و پُخته شده است که می‌توان هر محصول کاربردی در هر زمینه‌ای را تولید کرد که از کارایی بسیار بهتری نسبت به دات نت بهره‌مند است. در حوزهٔ امنیت، شبکه و موارد این چنینی شرکت‌های بزرگ و Isp‌ها نیازمند این زبان هستند. البته دلایل بسیاری وجود دارد که موجب می‌شود شرکت‌ها از روی ناچاری به سراغ برنامه‌نویسان دیگر بروند، که من شخصاً آن را تجربه کرده ام ! در بسیاری از پروژه‌ها که به عنوان مشاور فنی در آن‌ها شرکت کرده بودیم متوجه آن شدیم شرکت‌ها به خاطر عدم وجود برنامه‌نویس سی++ برای ادامهٔ چرخهٔ تولید خود مجبوراً سراغ برنامه‌نویس‌های دیگر زبان‌ها می‌روند. این امر به خاطر این است که واقعاً درصد تعداد برنامه‌نویسان این زبان نسبت به زبان‌های دیگر به خاطر (راحت طلبی) و شاید عدم آگاهی از این زبان دور هستند. یکی از نکته‌هایی که اخیراً جالب بوده است، آن است که شما به واسطهٔ سی‌پلاس‌پلاس می‌توانید حتی وب‌سایت‌‌های مورد نیاز خود را بسازید! یک سیستم چند-منظوره طراحی کنید که در حوزه‌های قابل استفاده باشد. برخی از هماهنگی‌هایی که این زبان خود را به به‌روز رسانی‌های بسیار سریع در فناوری وفق داده‌ است، پشتیبانی از ساختار‌های چند-سکویی و کاملاً بومی با کارآیی بالا است که در حوزه‌های موبایل، دسکتاپ و وب می‌توانید آن را مورد استفاده قرار دهید. از فناوری‌های مربوط به فریم‌ورک‌های طراحی گرفته، تا امکان ساخت‌و‌ساز در قالب وب‌اسمبلی، بلاک‌چین و دیگر موارد. یک نکتهٔ بسیار مهم که طی این سال‌ها تجربه کرده‌ام، این است که خیلی از شرکت‌ها و خدمات دهنده‌ها با این که در جریان مزایای این زبان هستند، مجبوراً به خاطر عدم وجود متخصص کافی از ابزار‌های دیگر برای توسعهٔ کار خود استفاده می‌کنند. هرچند مشکلات این زبان تا به الآن شفاف شده است، اما به‌روز رسانی‌ها و توسعه‌های پی در پی آن موجب بهبود‌های بسیار چشم‌گیری در آن نیز شده‌است. برخی از سوالاتی که علاقه‌مندان به این حوزه می‌پرسند در ادامه آمده است: من یک دانشجو هستم و رشتهٔ تحصیلی من کامپیوتر است، به برنامه‌نویسی با ++C علاقه دارم از کجا باید شروع کنم؟ اگر شما به قصدِ حرفه‌ای شدن دنبال یادگیری این زبان هستید، همانطور که اشاره‌ای شد مباحث پیش نیاز برای یادگیری این زبان مهم هستند و برای درک هرچه بیشتر این زبان بهتر است دانش خوبی در زمینهٔ تجزیه و تحلیل رفتار کامپایلر داشته باشید. علاوه بر این برای آشنایی با کامپایلر رفتار سیستم‌عامل و واکنش‌های کامپایلری در سیستم‌عامل‌های متفاوت بسیار مهم است. به عنوان مثال کامپایلر GCC بر روی ایستگاه‌های یونیکس تعبیه شده و برای خود قوانین و استاندارد‌هایی را دارد. در کنار آن کامپایلر MSVC نوعی کامپایلر اختصاصی تحت ویندوز است که متناسب با ساختار و معماری ویندوز رفتار می‌کند. در نگاه اول آشنایی با آن‌ها شاید الزامی به نظر نرسد، چرا که شما صرفاً به سمت یادگیری زبان، نحو (سینتکس)، ویژگی‌ها، کتابخانهٔ پیش‌فرض و هستهٔ آن می‌پردازید. اما در بُعد ساخت و ساز یک محصول عالی اطلاعات شما در زمینه‌های مختلف لازم است کافی باشد. من یک دانشجو هستم اما متاسفانه رشتهٔ تحصیلی من کامپیوتر نیست، به برنامه‌نویسی با ++C علاقه دارم از کجا باید شروع کنم؟ این کار کمی دشوار است، در مرحلهٔ اول پیشنهاد ما این است که سراغ زبان‌های برنامه‌نویسی دیگری بروید که نیازی نداشته باشد شما درگیر درک کامپایلر یا رفتار‌های سیستم‌عاملی شوید. اما به هر حال اگر شما به هر نحوی می‌خواهید این زبان را یاد بگیرید چارهٔ کار تلاش مستمر و حوصله است. متاسفانه سی‌پلاس‌پلاس ذاتی مرموز دارد و آن این است که اگر بتوانید به آن مسلط شوید یک زبان با وفا و قدرتمندی خواهد بود که در هر زمینه‌ای به نیاز‌های شما پاسخگو خواهد شد. اما اگر به هر دلیلی نتوانید با این زبان دوست شوید به طور بسیار مرموزی اعصابتان را به هم خواهد ریخت ? که البته طبیعی است چون سی++ تحت کامپایلر‌های خود دستِ برنامه‌نویس را آزاد گذاشته و شما هستید که انتخاب می‌کنید کُد شما به چه شیوه‌ای با توجه به هدف چگونه عمل کند. چقدر زمان لازم است تا من این زبان برنامه‌نویسی را یاد بگیرم؟ با توجه به ساختار زبان و رفتار‌های کامپایلر می‌توان گفت به قدری دامنهٔ سی++ گسترده است که تنها راه حل ممکن برای رسیدن به یک وضعیت مطلوب از دانش مرتبط با آن باید زمان مشخصی در نظر گرفته شود. ممکن است شما بتوانید در بازهٔ ۱ الی ۳ ماه مباحث مقدماتی این زبان را درک کنید. اما توجه داشته باشید پیش‌نیازات آن نیز نیازمند تحقیق، تجربه عملی و نتیجه‌گیری تئوری و علمی هستند. با توجه به اینکه شما (سریع، هوشمند با گیرایی بالا باشید) می‌توانید در کمتر از ۶ ماه به یک پایداری تقریباً قابل قبول در حد مقدماتی این زبان برسید. استاندارد زبان را درک کنید و نحوهٔ برقراری ارتباط با کتابخانه‌های پیشفرض STL و غیره را تجربه کنید. برای کسب دانش و افزایش آن به میزان متوسط و به بالا نیازمند تلاش بسیار بیشتری خواهید بود که باید در قالب پروژه‌های عملی و واقعی صورت گیرد. متاسفانه سی++ به دلیل گسترده‌ بودن چنان پیچیدگی‌هایی را دارد که تنها می‌توان در موقع برنامه‌نویسی به صورت عملی (بر روی پروژه‌های واقعی) آن را تجربه کرد. آیا ارزش دارد من این زبان را یاد بگیرم؟ فرصت من کم است و می‌خواهم سریعاً به درآمدزایی برسم در همین ابتدا به شما می‌گویم که اگر صرفاً به درآمد‌زایی سریع فکر می‌کنید، سی‌پلاس‌پلاس گزینهٔ مناسبی برای این رویا نیست! اگر شما به عنوان یک برنامه‌نویس متوسط و به بالا به این زبان تسلط دارید، و حداقل می‌توانید با یکی از کتابخانه‌های خوب آن ارتباط برقرار کنید، وقت آن است که با کتابخانه‌های قدرتمند این زبان وارد عمل شوید. کتابخانه‌هایی مانند Boost، Poco، Qt و غیره از سری کتابخانه‌هایی می‌باشد که امکانات بسیاری را در اختیار شما علاقه‌مندان این زبان قرار می‌دهند تا بتوانید در کمترین زمان ممکن به نیاز‌های خود دسترسی داشته و آن را پیاده سازی کنید. همهٔ آن‌ها در ساخت و توسعهٔ محصول به شما کمک می‌کنند. فراموش نکنید که بارها گفته‌ام به زبان‌ها، کتابخانه‌ها و فناوری‌ها به عنوان ابزار در داخل جعبه‌ابزار خود بنگرید. توجه داشته باشید که لازمهٔ طراحی و توسعه یک محصول مفید (قابل قبول) در قالب MVP (کمینه محصول پذیرفتنی) مستلزم داشتن دانش طراحی محصول نیز می‌باشد. اما همه چیز اینگونه خلاصه نشده است و شما برای اینکه بتوانید یک محصول واقعاً قابل قبول را پیاده سازی کنید مسلماً باید آن را مجهز به قابلیت‌های دیگری مانند منابع ذخیره‌ داده و یا سرویس‌ها و ماژول‌هایی کنید که بتواند به عنوان یک محصول کاربردی روی آن حساب کرد. آیا صرفاً با دانستن زبان‌های برنامه‌نویسی و تسلط بر آن می‌تواند یک محصول استاندارد و سطح جهانی را به طور کامل تولید کرد؟ نظر من قطعاً خیر است! اگر شما واقعاً با دیدگاه یک سازنده، یک تولید کننده و مهندس تمام عیار در ذهن خود رویا‌ پروری می‌کنید، در این صورت باید بدانید همه چیز در زبان خلاصه نمی‌شود! از نظر من حداقل مواردی که (به طور خیلی خیلی خلاصه و محدود) نیاز است تا یک متخصص بتواند پاسخ‌گوی‌ تصمیم‌گیری نقشهٔ توسعهٔ یک محصول برای مشتری در ابعاد مختلف و سطوح متفاوت از حوزه‌های موجود در قالب اصولی باشد به صورت زیر است که فرد یا یک تیم باید به آن‌ها اشراف کافی داشته باشد: ۱- آشنا مبانی کامپیوتر که امر طبیعی (شامل درک و فهم مسائل و نحوهٔ حلشون متناسب با پلتفرم اجرایی محصول) ۲- آشنا به ساختار نوع محصول استاندارد در یک حوزه مثل: وب، آی‌او‌اس، اندروید یا دسکتاپ‌های مختلف مثل لینوکس، مک و ویندوز، اینترنت اشیاء و دیگر موارد. ۳- آشنا به فلسفهٔ بک‌اند و فرانت‌اند یا ترکیبی از این دو به همراه ابزار‌های مناسب. ۴- آشنا به اصول طراحی UI/UX به عنوان یک نیاز و یک فاکتور مهم در ساخت محصولی که وابسته به عملکرد کاربر دارد و در حوزهٔ فرانت‌اند مهم و کاربردی هست. ۵- آشنا به اصول SOLID و امثالش مهم هستند. ۶- آشنا اصول برنامه‌ریزی ساخت بانک اطلاعاتی، اینکه از چه بانک اطلاعاتی‌ای استفاده کنی و چرا؟ ۷- آشنا به ارتباطات داده‌ای، جداول و ارتباط بین فیلد‌ها، جداول و روش‌های درست تبادل اطلاعات مابینی داده‌ها. ۸- آشنا و تسلط کافی به یک محیط توسعه و ادغام ابزار‌ها و محیط طراحی برای هدف. ۹- آشنا به معماری ساختار و رابط‌های برنامه‌نویسی (Api) ۱۰- آشنا به استاندارد‌های Http، درک و مدیریت درخواست، پاسخ‌ها و ... ۱۱- آشنا به الگو‌های طراحی برنامه‌نویسی (DP) ۱۲- آشنا به روش‌های نگه‌داری و آزمایش نرم‌افزار و کد‌ها به خصوص درک مبحث Fault tolerance. ۱۳- آشنا به روش‌های اطمینان‌سازی و ایمن‌سازی پردازش‌های داخلی نرم‌افزار برای جلوگیری یا دشوار سازی نفوز و خراب‌کاری. ۱۴- آشنا به روش‌ها و معماری‌های احراز هویت و نحوهٔ ادغامش با نرم‌افزار مثل:JWT, OAuth, AWS و غیره... ۱۵- آشنا به نوع پارادایم‌های زبان برنامه‌نویسی، در قالب‌های (دستوری) Imperative و (اعلانی) Declarative مثل OOP، functional و دیگر موارد. ۱۶- آشنا به سبک معماری نرم‌افزاری (Microservice یا مثلاً Monolith) مزایا و معایب آن‌ها. ۱۷- آشنا به سبک معماری طراحی مانند MVC در طراحی بدنهٔ محصول. ۱۸- آشنا به سبک و الگو‌های طراحی ساختاری در بک‌اند مانند Builder، Abstract، Factory و غیره. ۱۹- آشنا به ساختار یک زبان (در صورتی که می‌خواهید جوابگوی مسائلِ پیش آمده باشید) کالبد‌شکافی زیر‌پوستی و عمیق یک زبان مهم است. ۲۰- آشنا و درک کامپایلر‌ها و مفسر‌ها، تفاوت‌ها و شیوه‌های عملکردیشون نسبت به کد‌های بهینه شده و عادی. ۲۱- آشنا و درک مدل‌های مختلفی از سیستم‌های توزیع شده مثل IaaS، PaaS، SaaS یا FaaS. ۲۲- آشنا به ابزار‌های ساخت و فرآیند کاری اون‌ها مثل CMake، NMake، QMake و غیره. ۲۳- آشنا به روش‌های مدیریت وابستگی‌های نرم‌افزار و ابزار‌های لازم برای بسته‌بندی بهتر خروجی. ۲۴- آشنا به روش‌های کد‌نویسی قابل آزمایش (Unit Test) و استفاده از ابزار‌هایی مثل CTest, GTest, Catch2 و غیره. ۲۵- آشنا به توسعهٔ آزمون محور (Test Driven- Development) ۲۶- آشنا به گام‌ها و شرایط نسخه‌نگاری و مراحل توسعهٔ نرم‌افزار (SDP) ۲۷- آشنا به روش‌های امنیت در کد و توسعه به شیوه‌های بررسی از طریق Fuzz-Test، Sanitizer، آنالیزر‌های پویا و ایستا و غیره... ۲۸-آشنا به قوائد طراحی بر پایهٔ خدمات مبتدی بر معماری ابری برای خدمات پیامی، وب‌سرویس‌ها، پردازش و غیره. ۲۹- در سطوح وب آشنا به مکانیزم شاخص بندی، فاکتور‌های SEO و شیوه‌‌های درست بهبود صفحات وب. ۳۰- آشنا به روش‌های به کار گیری و پیاده‌سازی ثبت کننده‌ٔ وقایع در دل محصول و روش‌های بازخورد برای توسعهٔ بهتر به همراه مانیتورینگ، نظارت و تریسینگ. ۳۱- در شرایط لزوم آشنا به نحوهٔ به کار گیری و دلیل استفاده از فناوری‌هایی مثل Redis، Memcached و غیره. ۳۲- آشنا و درک صحیح از مفاهیم هم‌زمانی (Concurrency) و روش‌های به کار گیری آن نسبت به زبان برنامه‌نویسی و شرایط مناسب استفاده. ۳۳- آشنا به سبک و قوائد و ساختار زبان‌های برنامه‌نویسی و فرآیند ساخت و ترجمه. ۳۴- و تا صد‌ها گزینهٔ دیگر که می‌توان در این بخش لیست کرد که اگر انتخاب شما زبان‌های نزدیک به سیستم باشد این داستان در ادامهٔ این توضیحات سر به فلک خواهد کشید. با توجه به این موارد اگر بخواهید محصولی را بسازید که طبق استاندارد‌ آن را توسعه و تولید کنید که در بستر سی‌پلاس‌پلاس شکل می‌گیرد، باید ابزار‌ها و موارد پیشنهادی زیر را در اختیار داشته باشید و کار با آن‌ها را تا حد نیاز بدانید: یک محیط توسعه یکپارچهٔ نرم‌افزار مانند Qt Creator، Xcode یا Visual Studio (پیشنهاد ما Qt Creator است) این محیط به عنوان IDE نیز یاد می‌شود. پلتفرم توسعه (سیستم‌عاملی) که قرار است محیط توسعهٔ یکپارچه خود را بر روی آن نصب و شروع به برنامه‌نویسی کنید را مشخص نمایید. اگر شما کاربر ویندوز هستید باید محیط توسعهٔ یکپارچهٔ شما مجهز به کامپایلر MSVC و یا نسخهٔ پورت شدهٔ GCC یعنی MinGW باشد. اگر شما کاربر مک‌او‌اِس هستید به صورت پیشفرض با نصب محیط توسعه کامپایلر Clang بر روی آن تعبیه خواهد شد. البته می‌توانید به صورت سفارشی از کامپایلر GCC نیز استفاده کنید. در صورتی که کاربر لینوکس هستید کامپایلر GCC به صورت پیشفرض بر روی محیط توسعه‌‌ی شما تعبیه خواهد شد. آشنا به دستورات ترمینال و یا کنسول در سیستم‌عامل‌های لینوکس، مک و ویندوز در ساخت و ساز‌های دستوری مفید هستند و نیاز است آن‌ها را بدانید. آشنا به Git و دستورات مربوط به آن در نگه‌داری و به اشتراک‌گذاری مخازن پروژه می‌تواند برای شما سودمند باشد. بر اساس پیشنها جهت محیط توسعه‌ کتابخانهٔ Qt نیز پیشنهاد می‌شود (دلیل آن این است که این کتابخانه به شما کمک می‌کند تا بتوانید رابط کاربری نرم‌افزار (محصول) خود را پیاده سازی کنید). اگر هدف شما طراحی یک محصول استانداردی است که از شکل و ظاهر آن‌چنانی برخوردارد نیست بهتر است از ماژول‌های پیشفرض Qt مانند Qt Widget برای طراحی آن استفاده کنید. این کار بسیار ساده است و نیازی برای داشتن دانش در رابطه با حوزه‌های JavaScript و QML ندارد. البته می‌توانید با ترکیب CSS طراحی رابط کاربری برنامهٔ خود را بهبود ببخشید. بعد از این موارد نیاز است که شما هدف توسعهٔ خود را مشخص کنید، اینکه می‌خواهید توسعه دهندهٔ چه پلتفرمی باشید؟ تولید کننده برنامه‌های دسکتاپ بر روی ویندوز؟ یا لینوکس و مک؟ یا همهٔ آن‌ها؟ خوشبختانه با توجه به قابلیت‌های ذاتی سی++ و کیوت شما می‌توانید برنامهٔ خود را تنها با داشتن محیط توسعهٔ خود بر روی پلتفرم مورد نظر خود کامپایل و خروجی بگیرید (البته به شرط اینکه از سرویس‌های اختصاصی سیستم‌عاملی) استفاده نکرده باشید. البته دقت کنید اگر شما توسعه‌دهندهٔ اختصاصی برای فقط یک سیستم‌عامل خواهید بود، در این صورت نیازی به یادگیری مفاهیم یا رابط‌های اختصاصی برنامه‌نویسی یک پلتفرم دیگر نخواهید بود. اگر مشتاق آن هستید که برای پلتفرم‌های موبایل مانند آی‌او‌اس یا اندروید برنامه تولید کنید، موضوع کمی گسترده‌تر خواهد شد و حتماً باید ملزوماتی که در ابتدای مقاله به آن اشاره شده است را در نظر داشته باشید. برای مثال تولید یک نرم‌افزار iOS مستلزم آن است که شما علاوه بر داشتن دانش سی++ در رابطه با معماری و ساختار و همچنین قوانین، قوائد و ساختار نرم‌افزار‌های مرتبط با اپل راداشته باشید. در Android نیز این چنین است. اگر شما تازه کار هستید پیشنهاد می‌کنیم هدف خود را فعلاً محدود بر یک پلتفرم خاص کنید، حتماً نیاز نیست اطلاعات خود را کامل و سپس اقدام کنید. برای مثال توسعه محصول بر روی ویندوز برای آغاز کار بسیار مناسب است و شما صرفاً بر روی این پلتفرم متمرکز خواهید بود. در نهایت شما محصول خود را با آزمایش وخطا‌های بسیاری می‌توانید تولید و با توجه به مستنداتی که در همین مرجع ارائه شده اس مستقر و برای کاربر نهایی ارائه کنید. برای اینکه بدانید مزایای این زبان در چیست و چه کتابخانه‌هایی می‌توانند مفید باشد و برخی از سوالات احتمالی که ممکن است به ذهن شما برسد این بخش را مطالعه کنید. برای نحوهٔ شروع کار با Qt این بخش را مطالعه کنید. جهت نحوهٔ نصب و راه اندازی محیط توسعه این بخش را مطالعه کنید. منابع فارسی یا زبان اصلی؟ پاسخ این سوأل بدون شک راحت است! زبان انگلیسی، زبان علم است، بنابراین هر آنچه که شما در زبان‌های بومی و غیر انگلیسی مطالبه می‌کنید، ممکن است با محدودیت‌های شدیدی مواجه شوید. بنابراین برای یادگیری محتوای علمی به شدت توصیه می‌شود به کمک مراجع انگلیسی آن را بیاموزید! من زبانم ضعیف هست، آیا باید به زبان انگلیسی تسلط کافی داشه باشم تا بتوانم زبان‌های برنامه‌نویسی را یاد بگیرم؟ این یکی از سوأل‌های بسیار پر تکرار است که بار‌ها با آن مواجه می‌شویم! در پاسخ باید صادقانه بگویم، شما به حداقل‌های زبان انگلیسی واقعاً نیاز دارید! در حد این که متن‌های عادی را بخوانید، آن‌ها را متوجه باشید و بر اساس نگارش معنای صحیح جمله و واژه‌ها را درک کنید. رفته رفته به آن عادت خواهید کرد و در آن نیز حرفه‌ای خواهید شد. اما فراموش نکنید که زبان‌آموزی در کنار برنامه‌نویسی از لزومات است. در مورد واژه‌های تخصصی هم نگران نباشید، معمولاً واژه‌هایی که معنای آن‌ها را مابین جملات و کتاب‌ها نمی‌دانید، در مراجع و یا پا‌نویس‌های آن‌ها تعریف می‌کنند. بسیاری از واژه‌ها در قالب یک روش، مفهوم یا اصطلاح عنوان می‌شوند و شما باید به دنبال تعریف کامل آن باشید. به عنوان مثل، اصطلاح RAII در سی‌پلاس‌پلاس که به برخی از آن‌ها در این بخش اشاره کرده‌ام. من سن پایینی ندارم، آیا برای شروع کردن برای یادگیری سی‌پلاس‌پلاس دیر است؟ شاید من تجربهٔ سنیِ کافی، نسبت به کسانی که این سوأل را می‌پرسند نداشته باشم، اما نسبت به تجربه‌ای که در مهندسی کامپیوتر و به خصوص ساخت‌و‌ساز و توسعهٔ محصولات نرم‌افزاری دارم، می‌توانم به جرأت بگویم که این یک دغدغهٔ ذهنی‌ای به حساب می‌آید که شاید در قالب و جنسِ ترسِ بیهوده از دست دادن زمان را به خود بگیرید. اما واقعیت آن است، تا زمانی که شما شروع نکنید، بله نمی‌توانید! اما نکته‌ای که مد نظرم است بدانید، این است که در انتخاب زبان‌ها، به خصوصی یادگیری سی‌پلاس‌پلاس، بهتر است بخشی از هدف و استعدادی که به آن دارید را هدف قرار دهید، (هدف مشخص و شفافی داشته باشید) چون خاصیت این زبان در چند-منظوره بودن آن است، و ممکن است شما را وسوسهٔ خود در همهٔ جوانب کند! که این باعث می‌شود شما هرگز به یک نقطهٔ شروع نرسید. به عنوان مثال، برای شروع بهتر است یک حوزه را انتخاب کنید و پیش‌برورید، مانند: برنامه‌نویسی و طراحی اپلیکیشن در سیستم‌عامل ویندوز. یا برنامه‌نویسی در حوزهٔ موبایل، وب، بازی‌سازی، امبد‌ها (سیستم‌های درون‌سازی شده) و غیره... این بستگی به سلیقهٔ شما و نوع نیازی که در بازار می‌بینید خواهد داشت. در زیر منابعی را معرفی می‌کنم که به رایگان یا با کمترین هزینه می‌توانید به آن‌ها دسترسی داشته باشید: منابع استاندارد و رسمی زبان سی‌پلاس‌پلاس: https://en.cppreference.com https://isocpp.org برای یادگیری در سطوح مقدماتی وب‌سایت‌های زیر پیشنهادات مناسبی هستند: https://www.geeksforgeeks.org/references-in-c http://www.cplusplus.com/reference https://www.tutorialspoint.com/cplusplus/cpp_references.htm https://www.learncpp.com در صورتی که می‌خواهید در حالت بسیار ساده، تصویری و در قالب برگه‌های تقلب به ویژگی‌های زبان و کتابخانه‌های آن بپردازید، وب‌سایت زیر یک نمونه بسیار مناسب است: https://hackingcpp.com توجه کنید که خیلی از مباحث در وب‌سایت‌ها ذکر نمی‌شود، نیاز است بعضی از کتاب‌ها را در نظر بگیرید و آن‌ها را عمیقاً مطالعه کنید، بنابراین برای مطالعه به ترتیب سطح مقدماتی و پیشرفته را در زیر عنوان می‌کنم: Beginning C++ Programming Beginning C++20 A Tour of C++ The C++ Programming Language C++ Primer Programming: Principles and Practice Using C++ کتابهای معرفی شده به استاندارد‌های ۱۱، ۱۴، ۱۷ و ۲۰ اشاره می‌کنند. کتاب‌های پیشنهادی برای سطح پیشرفته: Effective C++ Professional C++ C++ Templates: The Complete Guide – Second Edition Modern C++ Programming Cookbook Hands-On System Programming with C++۱۷ C++ High Performance Optimized C++ در صورتی که نیاز به کسب دانش بیشتر در حوزهٔ سطح پایین، سخت‌افزار، معماری و ساختار‌های نرم‌افزاری دارید کتاب‌های زیر بسیار مفید هستند: Computer Organization & Design RISC-V / ARM / MIPS / x86 Software Architecture with C++ در صورتی که تجربیات و نوشته‌های خودم رو در این باره نیاز دارید به صورت زیر دسته‌بندی کردم که به ترتیب پیشنهاد می‌کنم مطالعشون کنید: اگر به دنبال مشاوره‌ها، منابع یا مقالات و توصیه‌های فارسی یا انگلیسی من هستید، پیشنهاد می‌کنم در همین وب‌سایت، یوتیوب، گیت‌هاب و یا کانال تلگرامی من ملحق بشید. من هر جا که باشم، با شناسهٔ KambizAsadzadeh اگر در حد توانم باشد شما را راهنمایی خواهم کرد.
  8. کامبیز اسدزاده

    ششمین ماراتون برنامه‌نویسی تلفن همراه کشور

    ششمین ماراتون برنامه‌نویسی تلفن همراه کشور در تاریخ ۱۵ تا ۱۷ شهریورماه سال جاری در محل دانشگاه صنعتی شریف برگزار می‌شود. این رویداد باهدف « شناسایی تیم‌های برنامه‌نویسی برجسته کشور، شناسایی ایده‌های بکر و خلاقانه و ورود این تیم‌ها به بازار کار» برگزار می‌شود . مهلت ثبت‌نام در این رویداد تا ۳۱ مردادماه ۱۳۹۷ است. این رویداد از معتبرترین مسابقات برنامه‌نویسی تلفن همراه کشور است و از سال ۱۳۹۲ تاکنون ۵ دوره این مسابقات در سطح کشور برگزارشده و تیم‌های برنامه‌نویسی متعددی را وارد بازار کار کرده است. در این مسابقات، تیم‌های برنامه‌نویسی ۴۸ ساعت فرصت دارند تا نسخه اولیه یک برنامه تلفن همراه در حوزه‌های مشخص‌شده توسط کمیته ارتباط با صنعت مسابقه را به تیم داوری تحویل دهند. در کل این مدت، تیم‌ها در محل برگزاری رویداد قرنطینه هستند و تیم‌های داوری و مشاور به‌صورت کامل بر نحوه عملکرد تیم‌ها نظارت می‌کنند. در انتها، تیم‌های برتر با نظر داورها به مرحله نهایی راه پیدا می‌کنند و فرصت دارند تا مجددا برنامه خود را برای داوران ارایه دهند. ثبت‌نام در این رویداد رایگان و ظرفیت آن محدود است، اما اولویت با تیم‌هایی است که زودتر ثبت‌نام کرده باشند. ثبت‌نام به‌صورت اینترنتی و از طریق سایت اختصاصی مسابقات انجام خواهد پذیرفت. تیم داوری از اساتید برتر دانشگاه صنعتی شریف و با مدیریت جناب آقای دکتر ربیعی (مدیر آزمایشگاه و مدیر گروه فناوری اطلاعات دانشگاه صنعتی شریف) هستند. سه تیم اول جوایز نقدی دریافت خواهند کرد. گروه‌ها در قالب تیم‌های ۲ الی ۴ نفره خواهند بود. همچنین مدت‌زمان ماراتون ۴۸ ساعت است و گروه‌ها با حضور در محل مسابقه، امکان خروج از محل تا پایان مدت‌زمان ماراتون را نخواهند داشت. البته تامین محل استراحت، وعده‌های غذایی، میان وعده‌ها و اینترنت پرسرعت بر عهده برگزارکننده ماراتون است. جهت ثبت‌نام و کسب اطلاعات بیشتر می‌توانید به سایت ششمین ماراتون برنامه‌نویسی تلفن همراه کشور مراجعه کنید.
  9. همانطور که می‌دانید منابع بسیاری در شبکه‌ی گیت‌هاب وجود دارد که بعضاً به عنوان کتابخانه‌های Third-Party بسیار مفید هستند. در این پُست به ترِند‌های برخی از زبان‌هایِ برنامه‌نویسی این ماه در GitHub اشاره شده است. ۲۰ نوع منبعِ ترِند شده‌ی امروز و این ماه تحت زبان‌ برنامه‌نویسیِ ++C: Tensorflow Electron OpenCV Protobuf Bitcoin Pytorch EventCleaner Mcilroy-regex Grpc Aseprite Waterius Godot Msgui Swift v8 XGboost Google Test AnyQ Aspia Tars ۲۰ نوع منبعِ ترِند شده‌ی امروز و این ماه تحت زبان‌ برنامه‌نویسیِ #C: Shadowsocks-Windows Wox eShopOnContainers Docs .Net ML Blazor DNSpy Corefx PowerShell Ml-Agents Graphy ShareX Musoq Roslyn SimplCommerce MaterialDesignInXamlToolkit SafetyKatz Azure-functions-host UnityCsReference React-NW 15 نوع منبعِ ترِند شده‌ی امروز و این ماه تحت زبان‌ برنامه‌نویسیِ Php: Laravel SecLists Composer Larastan Faker PhpSpreadsheet Phpstan Phpunit Twine Guzzle Symfony Nextcloud Server Voyager Swiftmailer Parsedown 18 نوع منبعِ ترِند شده‌ی امروز و این ماه تحت زبان‌ برنامه‌نویسیِ JavaScript: Javascript-algorithms Ndb Browsh Vue Terminalizer React Graphql Engine Carbon-now-cli v8n Mdx-deck Guppy Evergreen Axios Rogue.js Parcel Node Gatsby Storybook 16 نوع منبعِ ترِند شده‌ی امروز و این ماه تحت زبان‌ برنامه‌نویسیِ QML: Latte-Dock Monero-gui QtQuickControls2 Turtle-wallet-go Qml Material Fluid Material Unity8 Cutegram Deepin-movie Terrarium-app Qml Bootstrap Quick Android Yunit QDriverStation Got-qt 18 نوع منبعِ ترِند شده‌ی امروز و این ماه تحت زبان‌ برنامه‌نویسیِ Python: System Dp Cheat.sh Termtosvg Photon Models Youtube-dl Python Robotics 100-Days-Of-ML-Code Public-apis Glow Awesome Python Cartoonify Termgraph Faust Byob Flask Django cPython 19 نوع منبعِ ترِند شده‌ی امروز و این ماه تحت زبان‌ برنامه‌نویسیِ Swift: Opensource macOS app Wormholy GPUImage3 Bartinter CocoaDebug Sica Awesome iOS iina Top AudioKitSynthOne Alamofire RxSwift RxCoordinator Hero Charts SkeletonView Twig WeScan Lona 20 نوع منبعِ ترِند شده‌ی امروز و این ماه تحت زبان‌ برنامه‌نویسیِ Objective-C: EasyReact lottie-ios YNPageViewController React-native-maps DBDebugToolkit Texture iOS-InterviewQuestion-collection TZImagePickerController SDWebImage AFNetworking Sequelpro iTerm2 IGListKit Expo FLEX MonkeyDev AAChartKit FSCalendar ZFPlayer Realm-cocoa 19 نوع منبعِ ترِند شده‌ی امروز و این ماه تحت زبان‌ برنامه‌نویسیِ Java: Java-Interview Jib Data Transfer Project J Design Pattern Spring-boot Proxyee-down Elasticsearch Weixin-java-tools Vjtools Incubator-dubbo Spring-framework Apollo Nacos Guava S-MVP RxJava Pandora Sentinel Netty
  10. کامبیز اسدزاده

    من دقیقا در همین کانفیگ کار رو انجام دادم و خطایی که داد رو گرفتم و با این روش حل شد! این خطا در صورتی بروز داده می‌شه که یا gradle نصب نباشه یا SDK شما آپدیت نشده باشه. توجه داشته باش که SDK رو از داخل Qt Creator آپدیت کنی. و البته از بخش Build & Run زبانه‌ی Kits از گزینه‌ی Android for armeabi-v7a (GCC 4.9, Qt 5.11.1 for Android armv7) یک Clone بگیر و نامش رو بزار Android for armeabi-v7a و دقت کن که Qt Version اش هم ست شده باشه و بدون هیچ علامت اخطار یا خطایی تایید بشه.
  11. برای وب سرویس‌ها شما می‌تونید تحت زبان‌های مختلفی این کار رو سمت سرور انجام بدین. با همین سی‌++ هم میشه اما پیشنهادم اینه برای شروع کار از PHP استفاده کنید. مثال ساده از Php برای ساخت وب‌سرویس از نوع Restful یک مخزن مفید از Php برای ساخت Api یک مخزن مفید از ++C برای ساخت Api تحت Poco اینم یک سری مقالات در رابطه با سرویس Api تحت معماری Restful لینک اول لینک دوم لینک سوم مثال اول یک نمونه‌ی بسیار ساده هستش. گزینه‌ی دوم یک کتابخانه‌ی ساده برای این کار تحت Php و گزینه‌ی سوم یک منبع ساده اما خوب برای ++C تحت کتابخانه‌ی Poco هستش. *ممکنه برای شروع کار دشوار باشه اما برای آشنایی با ساختار چنین سرویسی بد نیستند.
  12. منظورتون اطلاعات موجود در جداول مربوط به یک دیتابیس بر روی سرور هست؟ اگه درست متوجه شدم در این صورت بهتره در رابطه با مباحث وب‌ سرویس‌ها مطالعه کنید. برای مثال سمت سرور باید Api درست کنید و خروجی اون رو در قالبی به شکل JSon یا Xml یا معماری جدیدتری مثل GraphQL تولید و در سمت کلاینت توسط کتابخانه‌های سی++ این‌هارو دریافت و تجزیه تحلیل (پارس) کنید. روش‌های سریع و در دسترس در سی‌پلاس‌پلاس تحتِ کتابخانه‌های Qt و کلاس QNetworkRequest می‌تونید این کار رو انجام بدین و یا کتابخانه‌های دیگه‌ای مثل Poco در ماژول Net و کلاس HTTPRequest این امکان وجود داره.
  13. کامبیز اسدزاده

    کتابخانهٔ Qt

    نگارش ۵.۱۵.2

    523 دریافت

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

    رایگان

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

    مواردی که اشاره کردی بهشون درسته، بررسی کن ببین gradle نصب هست؟ قبل از کامپایل باید توسط وی-پی-ان موقع کامپایل یک بار دانلود بشه (خود کیوت این کار رو انجام میده). همچنین فایل‌های ساخته شده رو که در قالب کَش هستند پاک کن و از بخش Project از Shadow Build استفاده کن.
  15. معمولاً برای بازنشر مطالب، سوال و پرسش‌های خود در شبکه‌های اجتماعی یا گروه‌ها و کانال‌های پیام‌رسان نیاز است تا لینک آن را قرار دهیم.اما به صورت پیشفرض لینک مطالب کوتاه نیستند و برای حل این مشکل بهتر است از سیستم کوتاه کننده‌ی لینک استفاده شود که مثالی برای دریافت آن آمده است: فرض کنید سوالی پرسیده‌اید، برای دریافت لینک کوتاه و مفید آن بر روی دکمه‌ی بازنشر در بالای پُست کلیک کنید: برای دریافت لینک کوتاه و مناسب بر روی آن کلیک کرده و آدرس کوتاه شده را جهت بازنشر کپی کنید: * نکته، ممکن است شما نیاز داشته باشید تا آدرس پاسخ به سوالی را بازنشر کنید، در این صورت به پایینترین قسمت پاسخ خود رفته و بر روی گزینه‌ها کلیک کنید و سپس گزینه‌ی بازنشر را انتخاب و لینک مورد نظر خود را دریافت کنید.
  16. کامبیز اسدزاده

    سلام، نسخه‌ی JDK، NDK و SDK شما چند هست؟
  17. با سلام، در این پست ما قصد داریم در رابطه با نحوهٔ آغاز یادگیری کیوت توضیح دهیم. اینکه به عنوان یک تازه‌کار چه پیش‌نیازاتی را باید مطالعه و در نهایت چگونه و تحتِ چه منابعی این کتابخانهٔ قدرتمند را بیاموزیم. همچنین پاسخ برخی از سوالات شما را در این پُست به طور شفاف ارائه شده است که طیِ چندین سال سوال علاقه مندان بوده‌اند. معرفی سریع و سادهٔ کیوت (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 اگر سوالی داشته باشم کجا می‌توانم آن را مطرح کرده و به پاسخ خود برسم؟ شما می‌توانید برای سوال و پرسش در انجمن‌های این مرجع اقدام کنید. اساتید و دوستان با تجربه سوالات شما را دریافت و مناسبترین پاسخ‌ها را ارائه خواهند داد. همچنین شما می‌توانید ما را در گروه سی‌پلاس‌پلاس و کانال تلگرامی دنبال کنید. نکته (در این پُست بنابر اهداف فرهنگ‌سازی برای حق چاپ) فایل‌های مرتبط با کتاب‌های آموزشی زبان اصل و یا زبان فارسی قرار داده نشده است. کتاب‌های زیادی در رابطه با این زبان وجود دارند که به زبان اصلی می‌باشند اما برای احترام به نویسندهٔ آن‌ها از ارسال چنین فایل‌هایی معذوریم. این پُست ممکن است ویرایش یا به‌روز رسانی شود.
  18. کامبیز اسدزاده

    پیشنهاد این هست که سمت سی‌++ این کار‌ها رو انجام بدین (بَک اِند) مشخصی داشته باشید. خوشبختانه QML از جاوا اسکریپت ارث بُرده و شما می‌تونید تحت روش‌های جاوا اسکریپتی توسط شیء XMLHttpRequesسمت سرور درخواست بفرستین و پاسخش رو مدیریت کنید. اما فعلاً بعضی محدودیت‌ها رو شامل میشه. بهترین روش برای این کار همون روش سی‌پلاس‌پلاس هست.
  19. همانطور که می‌دانید، در سی‌پلاس‌پلاس برای ساخت یک کلاس انتزاعی (در قالب یک ساختار) یا همان Interface تحت کلمات کلیدی virtual امکان‌پذیر است. به طور کلی کلاسی که متُد‌های آن به صورت مجازی اعلان می‌شوند و شامل هیچ تعریف قبلی نیستند به عنوان کلاس انتزاعی (Abstract) یاد می‌شوند. برای مثال کلاس زیر را در نظر بگیرید: class Person { public: Person(); virtual ~Person(); virtual void print() = 0; //... }; کلاس Person به عنوان یک کلاس انتزاعی تعریف شد است. چرا که اعضای این کلاس فقط اعلان شده اند و به تنهایی هیچ کاری یا واکنشی را نسبت به خود ندارند. کلمهٔ کلیدی virtual برای تعریف یک تابع از نوع مجازی ضروری است و اَصل پلئومورفیسم (چند ریختی / چند شکلی) را دربر دارد. در اصل اگر قرار باشد کلاسی بنویسید که مربوط به یک ماشین باشد (هر ماشین چه از نوع زمینی، چه از نوع صنعتی، و چه از نوع‌های دیگر) دارای کلید استارت (روشن/خاموش)، دارای قدرت موتور و یک سری ویژگی‌هایی است که ممکن است در هر یک از آن‌ها یکسان و یا متفاوت عمل کند. برای این منظور بهتر است کلاسی به صورت انتزاعی پیاده سازی شده و سپس در هر بخش هر یک از متد‌ها را نسبت به نیاز سفارشی سازی کنیم. فرض می‌کنیم که نیاز است در یک بازی کلاسی برای دریافت اطلاعات یک خودرو، هواپیمای جنگنده و یا غیره... ایجاد شود. کلاس انتزاعی ما درای ویژگی‌های ثابت غیر قابل توسعه و ویژگی‌هایی دارای قابلیت بازتعریف (جهت توسعه توسط کاربر) را فراهم کرده ایم. به مثال زیر دقت کنید: class Machine { public: Machine() {} virtual ~Machine() {} enum class Start {ON, OFF}; virtual bool start(const Start &start) const final { return true; } virtual std::string name(const std::string &nameValue) const final { return nameValue; } virtual int gears(const int &gears) const final { return gears; }; virtual int power(const int &powerValue) const { return powerValue; } virtual int cylinders(const int &totalValue) const final { return totalValue; } virtual int length(const int &lengthValue) const final { return lengthValue; } virtual int width(const int &widthValue) const final { return widthValue; } virtual std::string engineType() const = 0; }; class Porsche : public Machine { public: enum class EngineType { eSuper, eJuniur, e64, e356, e550, e911 }; enum class Color { White, Black, Red, Blue, Green }; Porsche(EngineType type) { etype = type; } ~Porsche() {} std::string color(const Porsche::Color &colorValue) const { switch (colorValue) { case Color::Black : eColor = "Black"; break; case Color::White : eColor = "White"; break; case Color::Blue : eColor = "Blue"; break; case Color::Red : eColor = "Red"; break; case Color::Green : eColor = "Green"; break; } return eColor; }; std::string engineType() const override { switch (etype) { case EngineType::eSuper : eTypeResult = "Super"; break; case EngineType::eJuniur : eTypeResult = "Juniur"; break; case EngineType::e64 : eTypeResult = "64"; break; case EngineType::e356 : eTypeResult = "356"; break; case EngineType::e550 : eTypeResult = "550"; break; case EngineType::e911 : eTypeResult = "911 Turbo"; break; } return eTypeResult; } private: EngineType etype; mutable std::string eTypeResult; mutable std::string eColor; }; class Aircraft : public Machine { public: enum class EngineType { e2SI, e3W, eAce, eSaturn}; Aircraft(EngineType type) { etype = type; } ~Aircraft() {} int power(const int &powerValue) const override { return powerValue; } std::string engineType() const override { switch (etype) { case EngineType::e2SI : eTypeResult = "2SI"; break; case EngineType::e3W : eTypeResult = "3W"; break; case EngineType::eAce : eTypeResult = "ACE"; break; case EngineType::eSaturn : eTypeResult = "Saturn AL-31 Series"; break; } return eTypeResult; } private: EngineType etype; mutable std::string eTypeResult; }; کلاس Machine دارای مشخصه‌هایی از نوع سطح دسترسی final و pure می‌باشد که توابع از نوع دسترسی final یک بار برای تمامی کلاس‌های ماشین‌ها تعریف شده و توابع pure برای توسعه در نظر گرفته شده اند. در ادامه ما کلاسی برای خودروی Porsche و کلاسی را برای هواپیمای جنگنده Aircraft در نظر گرفته‌ایم که دارای ویژگی‌های اختصاصی باز تعریف شده تحت نام‌های engineType و غیره می‌باشد. تابع اول برای مشخص سازی نوع موتور ماشین (برای خودرو و هواپیما) و تابع بعدی برای مشخص سازی نوع کد رنگ پیاده سازی شده است. دقت کنید که تابع engineType از کلاس والد مشتق و باز توسعه یافته است که توسط کلمهٔ کلیدی override مشخص شده است. این کلمه به کامپایلر اعلان می‌کند که تابع تعریف شده دقیقاً همان تابع تعریف شده در کلاس والد است (با همان پارامتر و همان نام و همان نوع) در صورتی که این کلمه استفاده نشود تابع باز تعریف شده توسط کامپایلر خطا گرفته خواهد شد. این کلمه کلیدی برای هشدار به کاربری است که قرار است بر اساس کلاس والد کلاس مخصوص خود را توسعه دهد و صرفاً جهت اطلاع رسانی توسط کامپایلر به کاربر مورد استفاده قرار می‌گیرد. توابع از نوع دسترسی final توابعی هستند که کاربر به هیچ عنوان نمی‌تواند آن‌ها را دستکاری و باز توسعه دهد. برای مثال تابع name به دلیل اینکه نام در تمامی ماشین‌ها از نوع و ورودی یکسانی برخوردار هستند به صورت ثابت تعریف شده است تا کاربر نتواند این ساختار را به هم بزند. زمانی از final استفاده کنید که قرار نباشد ساختار اصلی متدی از کلاس مشتق شده تغییر یابد. همانطور که مشخص است در کلاس پایه ما توابعی را به صورت ثابت تعریف کرده ایم که نیازی نباشد توسعه دهنده مجدداً ساختاری را تولید کند که ممکن نیست خارج از این قالب باشد. حال وقتی قرار باشد وضعیت روشن بودن یا خاموش بودن یک خودرو را بررسی کنیم کافی است متد start را صدا بزنیم، این خاصیت در هواپیمای جنگنده هم وجود دارد بنابراین در هر دوی آن‌ها یکسان است. اما ممکن است برخی از ویژگی‌ها متفاوت باشد. برای مثال قدرت موتور یک خودرو با یک هواپیمای جندگنده یکسان نیست اما ساختار کلاس آن‌ها مسلماً یکی است. بنابراین کافی است از کلاس Machine مشتق گرفته و در کلاس خودرو و هواپیمای جنگنده آن‌ها را به آن صورتی که نیاز داریم باز تعریف (توسعه) دهیم. نتیجهٔ بر اساس نیازی که از کلاس والد داشته‌ایم به صورت زیر خواهد بود: Car Start Status : 1 Name : Cayman Engine Type : 911 Turbo Total Gears : 8 Power : 6300 Rpm Total Cylinders : 6 Color : Red Width : 1939 mm Length : 4855 mm Aircraft Start Status : 1 Name : Su 35 Engine Type : Saturn AL-31 Series روشی که در مورد آن توضیح دادیم، در پیاده سازی انواع پروژه‌های بزرگ و پیچیده (در صنعت بازی‌سازی، نرم‌افزار‌های یکپارچه و غیره...) کاربرد بسیاری دارید. به عنوان مثال یک موتور بازی سازی پیشرفته و یا کتابخانه‌ها و فریمورک‌های توسعه محصول از چنین ویژگی‌هایی برخوردار می‌باشند. این پُست ممکن است به‌روز رسانی شود.?
  20. کامبیز اسدزاده

    همونطور که در ابتدای کتاب توضیح داده شده، هدف آموزش کتابخانه‌ی کیوت در سی++ هستش و مطالبی که بهشون اشاره کردیم مرتبط با مفاهیم خود سی++ نیست! بلکه مرتبط با کتابخانه‌ی کیوت هست. برای مثال ساخت یک کلاس یا ارث بری توضیح داده نمیشه چون پیش نیاز این موارد رو شما باید در کتاب‌های مخصوص استاندارد STL به دست بیارید. بنابراین مهارت شما در سی‌پلاس‌پلاس حداقل باید متوسط باشه تا بتونید مفاهیمی که از روشون رد شدیم رو خودتون درک کنید? دقیقاً مطابق مثال‌های رسمی کیوت که همین روال رو دارند. برای تهیه کتاب‌های سی++ با استاندارد STL هم منظور کتاب‌های موجود در اینترنت هستند که به زبان اصل می‌باشند.
  21. در این پُست قصد دارم در رابطه با نحوهٔ نصب و اجرای برنامه‌های تحت کیوت تحت موارد زیر را توضیح دهم. راهنمای فرایند نصب و استقرار برنامه بر روی پلتفرم Windows راهنمای فرایند نصب و استقرار برنامه بر روی پلتفرم macOS راهنمای فرایند نصب و استقرار برنامه بر روی پلتفرم Linux راهنمای فرایند نصب و استقرار برنامه بر روی پلتفرم Android راهنمای فرایند نصب و استقرار برنامه بر روی پلتفرم iOS قبل از هر چیز لازم است بدانید که برای نصب و راه اندازیِ برنامه‌های نوشته شده تحتِ سی‌پلاس‌پلاس و کتابخانه‌هایِ آن باید پیش‌نیازات آن‌ها درقالب فایل‌هایی از کتابخانه در کنار برنامه قرار بگیرد. راهنمای فرایند نصب و استقرار برنامه بر روی پلتفرم Windows در این محیط نسبت به نوع و نسخهٔ Qt و کامپایلری که مورد استفاده قرار گرفته است باید توجه داشته باشیم که هنگام کامپایلر و خروجی گرفتن متناسب با سیستم مقصد آن را تهیه کنیم، برای مثال نوع معماری یعنی x64 یا x86 بودن یک سیستم بسیار مهم است. مواردی که باید به آن‌ها هنگام کامپایل توجه کنیم: مشخص سازی نوع کامپایل برنامه حالت یا همان Mode ای که برنامه روی آن ساخته می‌شود، اگر برنامه بر روی Debug ساخته می‌شود تمامی موارد بعدی بر اساس دیباگ تعیین و در غیر اینصورت بر اساس نوع Release مشخص خواهند شد. نوع معماری خروجی در برنامه، باید توجه داشته باشید برنامه‌های 32 بیتی توسط کامپایلرهای x86 یا 32 بیتی تهیه می‌شوند و برنامه‌های 64 بیتی توسط کامپایلر های x64 که خود نیازمند سیستم و بستر برنامه‌نویسی می‌باشند که 64 بیتی هستند، یعنی اگر نیاز باشد برنامه شما 64 بیتی کامپایل شود ابتدا باید سیستم عامل و نسخه کامپایلر محیط توسعه از آن پشتیبانی کند. انواع ماژول‌های استفاده شده در کتابخانه Qt مهم است، به عنوان مثال در حالت عادی ماژول Qt5Core نیاز است ولی اگر در پروژه شما از ماژول‌های دیگری مانند Network استفاده شده باشد در این حالت نیاز خواهید داشت فایل یا ماژول مربوط به آن را وارد برنامه کنید که شامل Qt5Network می‌باشد که لیست کاملی از ماژول‌ها را بر اساس نیاز در ادامه مشخص خواهیم کرد که بر چه اساسی چه نوع ماژول و چه فایلی باید همراه برنامه موجود باشد. شروع کامپایل و گسترش برنامه: معمولاً نسخه های آزمایشی یک محصول در حالت Debug جهت بررسی و آنالیز خطاهای موجود در آن می‌باشد که توسط تیم توسعه‌دهنده یا افرادی که میتوانند در باگ گیری آن همیاری نمایند استفاده خواهند کرد، بنابراین بر فرض اینکه ما قرار است یک نسخه استاندارد و نهایی از محصول را در اختیار کاربر قرار دهیم از حالت Release استفاده خواهیم کرد. در بخش Projects می‌توان نوع کامپایلر و مسیر خروجی از آن را مشخص کرد، دقت کنید که در این بخش قسمت Build بر روی حالت Release باشد، در این مثال ما از کامپایلر MSVC2017 و نسخه ۶۴ بیتی آن استفاده کرده‌ایم که مسیر خروجی آن مشخص است. همانند مک و لینوکس در ویندوز نیز ابزاری با نام windeployqt وجود دارد که در مسیر QTDIR/bin/windeployqt می‌باشد. توسط این ابزار می‌توان برنامه را در قالب یک پکیج جمع آوری و مستقر ساخت. برای مثال ما برنامه ای ساخته ایم که در مسیر مورد نظر MyAppRoot//C:/Users/Compez/Desktop می‌باشد. با دستور cd به مسیر فوق خواهیم رفت: cd C:/Qt/Qt5.11.0/5.11/msvc2017_64/MyAppRoot البته قرار است در این مسیر خروجی فایل بعد از کامپایل ایجاد شود که با غیر فعال سازی امکان Shadow Build این ممکن خواهد شد که فایل مربوطه در مسیر ریشه برنامه ایجاد شود. با فرض اینکه بعد از کامپایل فایل MyApplication.app در مسیر ذکر شده موجود باشد دستور زیر را در ترمینال وارد خواهیم کرد: C:/Qt/Qt5.11.0/5.11/msvc2017_64/bin/windeployqt MyApplication.exe دقت کنید که اگر نیاز باشد با استفاده از گزینه‌های موجود در ابزار برنامه خود را مستقر سازید کافی است دستور ایجاد را به صورت زیر وارد کنید: C:/Qt/Qt5.11.0/5.11/msvc2017_64/bin/windeployqt MyApplication.app –verbose=3 –no-plugins در ویندوز بر خلاف ایستگاه‌های یونیکس فراهم آوردن تمامی فایل‌ها در کنار برنامه صورت خواهد گرفت. اما بعد از اجرای دستور فوق برنامه به تنهایی قابل اجرا نخواهد٬ لذا فایل‌های msvcp140.dll و vcruntime140.dl‌ نیاز هستند تا در کنار برنامه قرار گیرند. این فایل‌ها در تمامی نرم‌افزار های بزرگ در کنار برنامه موجود هستند مگر اینکه به صورت جدا پکیج مربوط به آن را نصب کنید که توصیه نمی‌شود. توجه داشته باشید که فایل‌هایی که قبل از پسوند .dll آخر حرف آن‌ها به d ختم می‌شود نشانگر آن است که مربوط به نسخه دیباگ هستند. در صورتی که در حالت Release برنامه خود را کامپایل می‌کنید فایل‌هایی را در کنار برنامه خود قرار دهید که حرف آخر آن‌ها به d ختم نشده باشد. برای مثال فایل QtCored.dll مخصوص نسخه دیباگ بوده و فایل QtCore.dll مخصوص نسخه ریلیز. بعد از کامپایل برنامه و اجرای خروجی آن در ویندوزی که بر روی آن Qt و سی‌پلاس‌پلاس نصب نیست مسلما با خطاهای زیر مواجه خواهیم شد: خطا‌های فوق بیانگر این است که فایل‌های فوق در کنار پروژه یا در هسته سیستم عامل پوشه windows/system32 و یا windows/SysWow64 نصب نشده است که در ادامه برای حل این خطا راهکار ارائه داده شده است. بنابراین به مسیر زیر بروید : C:/Program Files (x86)/Microsoft Visual Studio 2017/Enterprise/VC/Redist/14.x.x/onecore/x64/Microsoft.VC150.CRT سپس فایل‌های موجود در پوشه را کپی و در کنار برنامه قرار دهید در این صورت برنامه بدون هیچ خطایی اجرا خواهد شد. مگر اینکه به جز کتابخانه Qt و STL از کتابخانه‌های دیگری استفاده کرده باشید که در این صورت هم باید فایل‌های مربوط به‌ آن‌ها را در کنار برنامه قرار دهید.
  22. امروز می‌خوام برای شروع کار نمونه مثال ساده ای رو که بخشی از کامپوننت‌های پروژه Jupiter برای شرکتمون بود قرار بدم. این نمونه شامل یک کنترل ورودی InputBox و Button با یک افکت و انیمیشن ملایم سفارشی شده است که قابلیت‌های شناور ماوس، واکنش دادن به ورودی و وضعیت نتیجه‌ی ورودی می‌باشد که ظاهری مشابه و حتی بهتر از Bootstrap 4.x را دارد. در این مثال فرم به صورت سفارشی به ورودی زبان، قالب ایمیل و تلفن حساس است. فرم در حالت عادی مقدار ورودی (نوع زبان) به غیر از فارسی نامعتبر تشخیص داده می‌شود. تایید ورودی‌های معتبر ویژگی‌های title، placeHolder، language، email و mobile در کنترل InputBox قابل تنظیم هستند. به عنوان مثال زمانی که شما مشخصه‌ی email را برابر true قرار دهید می‌توانید مقدار ورودی پست الکترونیکی را ارزیابی کنید. مثال : Controls.InputBox { id:email; title: "آدرس ایمیل"; email: true; placeHolder: "info@iostream.ir" } مثال : Controls.InputBox { id:firstname; title: "نام"; language: true; placeHolder: "کامبیز"; } Controls.InputBox { id:lastname; title: "نام خانوادگی"; language: true; placeHolder: "اسدزاده" } Controls.InputBox { id:mobile; title: "شماره تلفن همراه"; mobile: true; placeHolder: "09140000000" } Controls.InputBox { id:email; title: "آدرس ایمیل"; email: true; placeHolder: "info@iostream.ir" } مقادیر پرچم به صورت پیشفرض برابر با false هستند. زمانی که شما مقدار یکی از مشخصه‌های بالا را مشخص نکنید آن false در نظر گرفته می‌شود. مشخصه‌ی پست الکترونیکی شماره تلفن‌های همراه اول و ایرانسل را پشتیبانی می‌کند. شما می‌توانید برای مشاهده منبع کُد و همچنین نحوه‌ی برنامه‌نویسی این مثال فایل ضمیمه را دریافت کنید.? Jupiter-Component(InputBox).zip
  23. این تاپیک مخصوص نمونه مثال‌هایی از پروژه‌ها، ماژول‌ها، کامپوننت‌ها و افزونه‌هایی می‌باشد که به صورت استاندارد و مدرن توسط سی‌پلاس‌پلاس و جاوا‌اسکریپت تحت فناوری Qt Quick طراحی می‌شوند. بدون هیچگونه تعارفی باید بگوییم هر نرم‌افزار (اپلیکیشن) و یا محصولی که ساخته می‌شود باید مطابق استاندارد‌هایی که مهندسین طراحی بر روی آن تاکید دارند توسعه یابد. این استاندارد‌ها ممکن است شامل اصول کُدنویسی، الگو‌های کد‌نویسی و یا قوانین روانشناسی رنگ‌ها، چیدمان اشیاء و هر موردی که می‌تواند در نتیجه‌ی آن تاثیر مثبت داشته باشد مهم هستند. با هدف اینکه می‌خواهیم نمونه مثال‌هایی را برای تازه واردین قرار دهیم تا بتوانند به درستی ونحوه‌ی صحیح طراحی و پیاده سازی دو بخش بک‌اِند و فرانت‌اِند آشنا شوند، نمونه مثال‌های شما باید دارای شرایط زیر باشند ساختار استاندارد کلاس‌ها و توابع در سمت سی‌پلاس‌پلاس استفاده از اشاره گر‌های هوشمند و یا رعایت اصول مدیریت حافظه استفاده از ماکرو‌های سفارشی iOS، Android، Windows، macOS و لینوکس جهت مدیریت بهتر بعضی از ویژگی‌های منحصربفرد سیستم‌عامل‌ها تا جایی که می‌توانید سعی کنید از ابزار‌های qmake و qbs در این نمونه مثال‌ها استفاده کنید رعایت رنگ‌بندی و همچنین اصول UX درست مهم است مثال شما باید برگرفته و بر اساس استاندارد‌های توصیه شده‌ی doc.qt.io باشد. استفاده‌ی بهینه از لنگر‌ها و همچنین ترازبندی صحیح لایه‌ها و نگه‌دارنده‌ها در سمت QML استفاده از تصاویر و یا قالب‌های استاندارد و سبک مانند SVG, PNG و base64 استفاده از فونت آیکونیک‌ها مانند (FontAwesome) این پست ممکن است ویرایش و یا به روز‌رسانی شود. در ادامه شما می‌توانید بر اساس شرایطی که ذکر شده است و با توجه به استاندارد‌های Google Material، Microsoft Fluent و همچنین Apple Human Interface نمونه مثال‌های خود را ارائه دهید که برخی از مثال‌های استاندارد در زیر آمده اند.
  24. همانطور که می‌دانید یکی از مباحث شاید به ظاهر پیچیده در کیوت برقراری ارتباط بین سی‌پلاس‌پلاس و کیو‌ام‌اِل باشد. در این پست من تصمیم گرفتم مثالی را در قالب لیست تماس‌ها ایجاد کنم که شاید بعد‌ها توسعه آن ادامه داشته باشد. فرض کنید قرار است لیستی از تماس‌ها یا کاربران را دریافت و در بخش رابط کاربری خود در قالب یک لیست نمایش دهیم. قبل از هرچیز باید بدانید که برای چنین کاری کلاسی را در سمت بک‌اِند ایجاد کنید. نام این کلاس را در این مثال ContactList گذاشته‌ایم. فایل هدر مرتبط با کلاس تماس‌ها به صورت زیر است: // // File : contactlist.h // Class or Function (ContactList) // // Created by Kambiz Asadzadeh on 2018/7/19. // Copyright © 2018 Kambiz Asadzadeh. All rights reserved. // Official Website : http://kambizasadzadeh.com // Powered by : Dotwaves LLC (http://dotwaves.com) // #ifndef CONTACTLIST_H #define CONTACTLIST_H #include <QObject> //Namespace Contact namespace Contact { class ContactList; class ContactList : public QObject { Q_OBJECT Q_PROPERTY ( QString name READ name WRITE setName NOTIFY nameChanged ) Q_PROPERTY ( QString family READ family WRITE setFamily NOTIFY familyChanged ) Q_PROPERTY ( QString phone READ phone WRITE setPhone NOTIFY phoneChanged ) Q_PROPERTY ( QString device READ device WRITE setDevice NOTIFY deviceChanged ) Q_PROPERTY ( QString avatar READ avatar WRITE setAvatar NOTIFY avatarChanged ) Q_PROPERTY ( QString color READ color WRITE setColor NOTIFY colorChanged ) Q_PROPERTY ( QString url READ url WRITE setUrl NOTIFY urlChanged ) public: ContactList(QObject *parent=0); ContactList( const QString &name, const QString &family, const QString &phone, const QString &device, const QString &avatar, const QString &color, const QString &url, QObject *parent=0 ); ~ContactList(); QString name () const; QString family () const; QString phone () const; QString device () const; QString url () const; void setName (const QString &name); void setFamily (const QString &family); void setPhone (const QString &phone); void setDevice (const QString &device); void setUrl (const QString &url); //Avatar of user QString avatar () const; void setAvatar (const QString &image); //Color of user QString color () const; void setColor (const QString &color); signals: void nameChanged (); void familyChanged (); void phoneChanged (); void deviceChanged (); void avatarChanged (); void colorChanged (); void urlChanged (); private: QString m_name; QString m_family; QString m_phone; QString m_device; QString m_avatar; QString m_color; QString m_url; }; } #endif // CONTACTLIST_H قبل از هر چیز دقت کنید که برای استفاده و دسترسی به تمامی آبجکت‌های موجود در کیوت نیاز به کلاس QObject خواهیم داشت. بنابراین فایل هدر آن را در فایل خود افزوده‌ایم. فضای نام Contact سپس اعلان کلاس مشتق شده از کلاس QObject مشخص کرده و سپس برای فعال سازی امکان استفاده از سرویس متا آبجکت (به عنوان یک مکانیزم) برای دسترسی به سیگنال‌ها و اسلات‌ها در کیوت از ماکروی Q_OBJECT استفاد می‌کنیم. شکل کلی ماکروی Q_PROPERTY Q_PROPERTY(type name (READ getFunction [WRITE setFunction] | MEMBER memberName [(READ getFunction | WRITE setFunction)]) [RESET resetFunction] [NOTIFY notifySignal] [REVISION int] [DESIGNABLE bool] [SCRIPTABLE bool] [STORED bool] [USER bool] [CONSTANT] [FINAL]) ماکروی Q_PROPERTY جهت اعلان ویژگی‌های موجود در اشیاء کلاس به کار گرفته شده است که از کلاس QObject ارث بری می‌کند. در نظر داشته باشید که این ویژگی‌های موجود در اصل همانند اعضای موجود در کلاس‌ها رفتار می‌کنند، با این تفاوت که در اینجا امکانات و ویژگی‌های اضافی بر اساس مکانیزم سیستم متا آبجکت کیوت را ارائه می‌دهند. ویژگی‌های نام، نوع و تابع READ ضروری هستند. نوع می‌تواند هر نوعی را توسط QVariant پشتیبانی کند، یا توسط کاربر نوع مورد نیاز تعریف شود. آیتم‌های دیگر اختیاری هستند، اما یک تابع WRITE رایج است. صفات‌های دیگر به صورت پیشفرض به جز USER که به صورت پیش‌فرض false است همگی true می‌باشند. برای مثال Q_PROPERTY(QString title READ title WRITE setTitle USER true) بر اساس همین روش ما پارامتر‌های کلاس را اعلان و در نهایت توابع، سیگنال‌ها و اعضای خصوصی کلاس را بر اساس نیاز اعلان کرده‌ایم. تعریف کلاس و توابع آن در ادامه به صورت زیر آمده است: // // File : contactlist.cpp // Class or Function (ContactList) // // Created by Kambiz Asadzadeh on 2018/7/19. // Copyright © 2018 Kambiz Asadzadeh. All rights reserved. // Official Website : http://kambizasadzadeh.com // Powered by : Dotwaves LLC (http://dotwaves.com) // #include "contactlist.h" using namespace Contact; ContactList::ContactList(QObject *parent) : QObject(parent) { } ContactList::ContactList( const QString &name, const QString &family, const QString &phone, const QString &device, const QString &avatar, const QString &color, const QString &url, QObject *parent ) : QObject(parent), m_name (name), m_family (family), m_phone (phone), m_device (device), m_avatar (avatar), m_color (color), m_url (url) { } ContactList::~ContactList() {} QString ContactList::name() const { return m_name; } void ContactList::setName(const QString &name) { if (name != m_name) { m_name = name; emit nameChanged(); } } QString ContactList::family() const { return m_family; } void ContactList::setFamily(const QString &family) { if (family != m_family) { m_family = family; emit familyChanged(); } } QString ContactList::phone() const { return m_phone; } void ContactList::setPhone(const QString &phone) { if (phone != m_phone) { m_phone = phone; emit phoneChanged(); } } QString ContactList::device() const { return m_device; } void ContactList::setDevice(const QString &device) { if (device != m_device) { m_device = device; emit deviceChanged(); } } QString ContactList::avatar() const { return m_avatar; } void ContactList::setAvatar(const QString &avatar) { if (avatar != m_avatar) { m_avatar = avatar; emit avatarChanged(); } } QString ContactList::color() const { return m_color; } void ContactList::setColor(const QString &color) { if (color != m_color) { m_color = color; emit colorChanged(); } } QString ContactList::url() const { return m_url; } void ContactList::setUrl(const QString &url) { if (url != m_url) { m_url = url; emit urlChanged(); } } توجه داشته باشید که هر یک از توابع مقادیر ورودی را در قالب پارامتر‌های ثابت دریافت و در صورتی که اعضای موجود در کلاس مقداری نداشته باشند برابر با پارامتر ورودی خواهند بود. سپس در صورتی که مقدار آن‌ها تغییر یافت وضعیت تغییر آن‌ها توسط emit به عنوان یک پیش‌پردازندهٔ از قبل تعریف شده کیوت انتشار (ساطع) خواهد شد. بعد از اعلان و تعریف کلاس مربوطه در فایل main.cpp لیستی را به عنوان داده‌های ارسالی ایجاد می‌کنیم که به صورت زیر آمده است: #include <QGuiApplication> #include <QQmlApplicationEngine> #include <QQmlContext> #include "contactlist.h" using namespace Contact; int main(int argc, char *argv[]) { QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling); QGuiApplication app(argc, argv); QList<QObject*> dataList; dataList.append(new ContactList("کامبیز", "اسدزاده", "09140000000", "Apple iPhone", "https://avatars0.githubusercontent.com/u/4066299?s=460&v=4", "#00D397", "https://github.com/Kambiz-Asadzadeh")); dataList.append(new ContactList("حامد", "مصافی", "09350000000", "Samsung Galaxy", "https://avatars2.githubusercontent.com/u/13809362?s=460&v=4", "#E83B0B", "https://github.com/HamedMasafi")); dataList.append(new ContactList("بهنام", "صباغی", "09190000000", "Google Nexus", "https://avatars3.githubusercontent.com/u/17690495?s=460&v=4", "#E15504", "https://github.com/FONQRI")); dataList.append(new ContactList("آرش", "میلانی", "09140000000", "Apple iPhone", "https://avatars3.githubusercontent.com/u/586816?s=460&v=4", "#3650F7", "https://github.com/arashmilani")); dataList.append(new ContactList("سروش", "ربیعی", "09190000000", "Google Nexus", "https://avatars0.githubusercontent.com/u/920670?s=460&v=4", "#8C56EA", "https://github.com/soroush")); QQmlApplicationEngine engine; QQmlContext *ctxt = engine.rootContext(); qmlRegisterType<ContactList>("api.dotwaves.qml", 1, 0, "Data"); ctxt->setContextProperty("contactModel", QVariant::fromValue(dataList)); engine.load(QUrl(QStringLiteral("qrc:/main.qml"))); if (engine.rootObjects().isEmpty()) return -1; return app.exec(); } تحت کلاس QList اشیاء را به کلاس ساخته شده سفارشی خود به عنوان داده‌های جدید معرفی می‌کنیم. جهت رجیستر (ثبت) کردن کلاس و داده‌های سمت بک‌اِند به سمت فرانت اِند در QML توسط تابع qmlRegisterType به عنوان یک تابع سربار گذاری شده اقدام می‌کنیم که ساختار آن به صورت زیر است: qmlRegisterType<MyClass>("com.mycompany.qmlcomponents", 1, 0, "CppClass"); این کار باعث می‌شود شما به کلاس‌ها و توابع کلاس سفارشی خود در سمت فرانت اند دسترسی داشته باشید. این روش در این پروژه اختیاری بوده است و فعلاً آنچنان مهم نیست اما برای اینکه روش آن را بدانید آورده شده است. در ادامه با نمونه گیری کلاس QQmlContext تابع setContextProperty که به عنوان ریشه‌ای از محتوا مجموعه‌ای از خواص‌های موجود از مُدل کلاس را بر می‌گرداند را تنظیم می‌کند که نام ویژگی را در قالب QVariant برمی‌گرداند. در نهایت قرار است با استفاده از نوع ListView در سمت QML مقادیر ارسالی از سمت سی‌پلاس‌پلاس را دریافت کنیم. به عنوان مثال دریافت نام به صورت زیر خواهد بود: ListView { id:listview model : contactModel delegate: Rectangle { .... ....... Text { id: nameTitle text: model.modelData.name } } نمونه خروجی این مثال به صورت زیر است: برای دسترسی به منبع این مثال می‌توانید به گیت‌هاب من در این لینک مراجعه کنید.
  25. کامبیز اسدزاده

    اهمیت یادگیری ماشین

    یادگیری ماشین یک استراتژی برای تحقیق و بررسی به صورت خودکار جهت ساختن مُدل‌های توصیفی (نمایشی) می‌باشد. یادگیری ماشین چیست؟ چرا یادگیری ماشین مهم است؟ یادگیری ماشین یک استراتژی برای تحقیق و بررسی اطلاعات است که ساخت مُدل به صورت توصیفی را خودکار می‌کند. یک شاخه که از استدلال‌هایِ انسانی از نگاه ساختار‌ها است می‌تواند از اطلاعات به دست آید، نمونه‌ها را تشخیص دهد و با اختیار بی‌نظیر انسانی بین انتخاب‌ها اقدام به انتخاب کند. چرا یادگیری ماشین ضروری است؟ اشتیاق برای یادگیری ماشین به دلیل حجم توسعه و مجموعه‌ای از اطلاعاتی که قابل دسترس هستند طرفدار بسیاری دارد. همه‌ی کسانی که به دنبال پردازش محاسباتی ارزان هستند و معمولاً برای ذخیره سازی اطلاعات شتاب‌زده عمل می‌کنند، یادگیری ماشین را مهم می‌دانند. بنابراین این امکان وجود دارد که سریعاً و به طور طبیعی مُدل‌هایی در این زمینه ایجاد شود که بتواند اطلاعات بسیار بزرگ و پیچیده‌ی (سرگیجه‌آور) و دقیق‌تری را در اختیار شما قرار دهند که منجرع به ارائه‌ نتایج سریع و دقیق خواهشد شد، حتی در مقیاس بسیار بزرگ که شاید انتظارش را نداشته باشید. علاوه بر این، با ساخت مدل‌های دقیق، ویژگی برتری شکل می‌گیرند که امکان شناخت احتمالات مفید و یا نگه‌داری فاصله‌ی استراتژیکی از خطرات مبهم را فراهم می‌سازد. چه کسانی این فناوری را مورد استفاده قرار می‌دهند؟ اکثر شرکت‌هایی که با اطلاعات زیادی سرو کار دارند، نوآوری یادگیری ماشین را تخمین زده و آن را درک می‌کنند. آن‌ها با جمع‌آوری بیت‌های دانش از این اطلاعات استفاده کرده و اغلب به تدرج می‌توانند به صورت کارآمد‌تر (مفید‌تر) کار کرده و یا موقعیت‌های مطلوب را نسبت به رقبای خود انتخاب کنند. ادارات و بودجه بانک‌ها و سازمان‌های مختلف در صنایع مربوط به پول از نوآوریِ یادگیری ماشین برای دو هدف کلیدی استفاده می‌کنند: برای تشخیص تجربیاتِ بحرانی در اطلاعات و جلوگیری از اخاذی. بیت‌هایِ دانش می‌تواند فرصت‌های سرمایه‌گذاری را شناسایی کرده و یا به متخصصانِ مالی زمانی که می‌خواهند معامله کنند کمک کند. دولت اداره‌های دولتی، برای مثال، تامین امنیت به صورت امنیت باز و کاربردپذیری آن‌ها نیاز به یادگیری ماشین دارند، چرا که آن‌ها منابع فراوانی از اطلاعات را دارا هستند که می‌تواند به عنوان سر نقطه‌ای از دانش‌ باشد. به عنوان نمونه، روشی را برای افزایش مهارت و صرفه‌جویی در پولِ نقد را متمایز می‌کند. همچنین یادگیری ماشین می‌تواند در محدود سازی و ارائه‌ی اطلاعات نادرست کمک کند. خدمات انسانی یادگیری ماشین یک طرحِ (الگویِ) توسعه سریع در صنعت خدمات انسانی است که به عنوان یک ویژگی در قالب گجت‌های پوشدنی و سنسور‌هایی که می‌توانند اطلاعات قابل استفاده برای ارزیابی یک بیماری تصاعدی (در حال پیشرفت) را ارائه دهد مورد استفاده قرار می‌گیرد. همچنین این نوآوری می‌تواند در تجزیه کردن اطلاعات پیش‌رونده در قادر ساختن متخصصین برای تشخیص الگو‌های مناسب برای مقابله با خطراتی که ممکن است سریعاً نتیجه داده و درمان آن به آن‌ها کمک کند استفاده می‌شود. نمایشگاه‌ها و معاملات سایت‌ها چیز‌هایی را که ممکن است با توجه به خرید‌هایی که شما در گذشته داشته‌اید پیشنهاد دهند. آن‌ها می‌دانند که چگونه تاریخچه‌ی خرید شما را تجزیه و تحلیل کنند. این ظرفیت برای گرفتن اطلاعات، تجزیه آن‌ها و استفاده از آن‌ها برای سفارشی کردن یک پس زمینه‌ی خرید (و یا تحقق بخشیدن به ارائه‌ی تبلیغات) می‌باشد. نفت و گاز یافتن منابع جدید حیاتی؛ تجزیه‌ی مواد معدنی در زمین؛ پیش‌بینی‌های ناامیدانه‌ی سنسور یک پالایشگاه؛ بهینه سازی تولید و انتشار نفت برای تولید و آگاهی بیشتر، کمیتِ استفاده از یادگیری ماشین برای این صنایع بسیار بزرگ است و هنوز هم در حال گسترش می‌باشد. حمل و نقل تجزیه اطلاعات برای تمایز نمونه‌ها و الگو‌ها برای کسب‌و‌کار‌های حمل‌و‌نقل حیاتی است، که بستگی به دوره‌های تولیدی و پیش‌بینی مسائل بالقوه برای افزایش بهره‌وری دارد. بازرس اطلاعات و نمایش بخش‌هایی از یادگیری ماشین ابزار‌های ضروری برای حمل‌و‌نقل سازمان‌ها، حمل‌و‌نقل آزاد و دیگر انجمن‌های حمل‌و‌نقل می‌باشد.
×
×
  • جدید...