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

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

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

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

  • روز های برد

    266

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

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

    اکثر برنامه‌های زیبایی که در حال حاضر می‌بینید نسبت به نوع سیستم‌عامل و تصمیمات توسعه‌دهنده و منظور استفادهٔ آن توسعه یافته‌اند. بعضی از آن‌ها به صورت کاملاً بومی تحت رابط‌های برنامه‌نویسی خودِ سیستم‌عامل و چهارچوب‌های اختصاصی طراحی شده‌اند، و برخی تحت یک سری کیت‌ها و کتابخانه‌های چندمنظوره. برای مثال، برنامه‌های خالص (نه چند‌سکویی) بومی در سیستم‌عامل ویندوز معمولاً تحتِ رابط‌های برنامه‌نویسی بومی خود ویندوز Win32 Api یا MFC توسعه می‌یابند. رابط‌های برنامه‌نویسی Win32 Api بسیار سطح پایین بوده و استفاده از آن بسیار دشوار است با این مزیت که هر کاری می‌توان با آن انجام داد. نوع MFC را می‌توان به صورت منسوخ شده در نظر گرفت چون در محصولات مدرن دیگه ازش یاد نمیشه. در سیستم‌عامل مک رابط‌های Cocoa برای این منظور نیز ارائه شده‌اند. از طرفی در لینوکس ما رابط‌های برنامه‌نویسی مستقیمی برای ساخت و ساز در کنار هستهٔ سیستم‌عامل نداریم. اما پروتکل‌هایی برای ساخت و ساز این مبحث وجود داره که به نام X Window System شناخته می‌شوند که تحتِ کتابخانه‌هایی مثل GTK، FLTK یا Qt و wxWidgets در سطوح بالا‌تر در دسترس و به راحتی می‌شه باهاشون کار کرد. این گزینه‌ها به صورت چند سکویی هستند و نیازی نیست شما نسبت به هر نوع سیستم‌عامل از اول برنامه‌نویسی انجام دهید. مزایای این نوع کتابخانه‌ها بیشتر از آن‌چیزی است که شما فکرش رو می‌کنید. پیشنهاد من این است، اگر دیدگاه چند‌منظوره دارید، به جای درگیر شدن با سطوح پایین‌تر از رابط‌های برنامه‌نویسی (صرفاً جهت ساخت رابط‌کاربری) از کتابخانه‌ها و چهارچوب‌های مناسب مانند Qt استفاده کنید. و یا اینکه اگر محدود به یک پلتفرم کار می‌کنید سعی کنید باز هم از رابط‌های سطح‌بالای آن پلتفرم استفاده کنید. در ویندوز Win32 تحت دات‌نت، کوکوآ در مک و GTK در لینوکس. برتری استفاده از رابط‌های اختصاصی هر یک از سیستم‌عامل‌ها، صرفاً بهینه‌سازی و هماهنگی بسیار بالا و دسترسی به تمامی ویژگی‌های یک پلتفرم است. البته کتابخانه‌هایی مانند Qt نیز در لایه‌های زیرین خودشان هماهنگی‌های لازم را با این رابط‌های برنامه‌نویسی پیاده‌سازی کرده‌اند تا نیازی نباشد شما با آن‌ها درگیر شوید و تا حد قابل قبولی از آن ویژگی‌ها پشتیبانی می‌کنند. بنابراین، از لحاظ این که در همان اندازه کارآیی خواهند داشت هم تا حد بسیاری خیالتان راحت مشکل خاصی پیش نمیاد. به طور همیشگی خیر، در موارد لزوم از پردازندهٔ مرکزی برای پردازش برخی از مسائل استفاده می‌شود، مانند زمانی که راه‌انداز (درایور) کارت گرافیک قابل شناسایی نباشد و مجبوراً از روش‌های شبیه‌سازیِ رابط استفاده شود که در این صورت از پردازندهٔ مرکزی استفاده خواهد شد. از طرفی OpenGL فقط برای بازی‌سازی مورد استفاده قرار نمی‌گیرد، حتی نسخه‌های توسعه‌یافتهٔ آن با عنوان وُلکان را بررسی کنید. کتابخانه‌هایی مانند کیوت در صنایع مختلف تمامی کارهای تصویر‌سازی، ساخت فرم، اشیاء و رندرینگ بخش‌های یک برنامه را به لطف OpenGL، Direct3D و امثال آن تولید می‌کنند. اخیراً اتفاق خوبی که در مورد کیوت رُخ داده است، این است که نسبت به هر پلتفرم، از راه‌انداز و رابط‌های برنامه‌نویسی اختصاصی همان سیستم‌عامل استفاده می‌کند. برای مثال در ویندوز از Direct3D در مک از Metal و در لینوکس از Vulkan و OpenGL. به طور کلی این کتابخانه‌ها کارهای سطح پایین‌ را خودشان مدیریت می‌کنند و نیازی نیست شما با آن‌ها درگیر شوید، مگر اینکه بخواهید یک کتابخانه یا چهارچوبی مانند کیوت بسازید که قطعاً نیاز خواهد داشت بر روی هر یک از این رابط‌های اختصاصی تسلط و اشراف کامل داشته باشید. بزرگترین مزیت کتابخانه‌ای مانند کیوت در این است که وابستگی به پلتفرم در آن معنا ندارد و شما می‌توانید در هر پلتفرمی که هستید رابط‌های کاربری مورد نظر محصول خود را بسازید.
  2. کامبیز اسدزاده

    ببینید این قسمت از کد‌ها اصلاً درست نیست! چطور برای شما کامپایل میشه بعید می‌دونم آزمایشش کرده باشید! نام فرم و کلاس شما باید Login باشه نه login! حرف L بزرگ مهمه. از طرفی log.show() نباید باشه بایدlog->show() باشه به صورت اشاره‌گر! بعد شما ظاهراً دارید داخل خود فرم Login دوباره کلاس خود Login رو فراخوانی می‌کنید برای نمایش! خب این درست نیست. و اینکه برای یک فرم فرزند دیگه نیازی نیست از MainWindow استفاده کنید، از یک QWidget ارث‌بری کنید. کد‌های زیر نمونهٔ صحیح است : #ifndef LOGIN_HPP #define LOGIN_HPP #include <QWidget> namespace Ui { class Login; } class Login : public QWidget { Q_OBJECT public: explicit Login(QWidget *parent = nullptr); ~Login(); private: Ui::Login *ui; }; #endif // LOGIN_HPP #include "login.hpp" #include "ui_login.h" Login::Login(QWidget *parent) : QWidget(parent), ui(new Ui::Login) { ui->setupUi(this); } Login::~Login() { delete ui; } این هم نحوهٔ فراخوانی در پنجرهٔ اصلی (والد) : #include "mainwindow.hpp" #include "ui_mainwindow.h" #include "login.hpp" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); } MainWindow::~MainWindow() { delete ui; } void MainWindow::on_pushButton_clicked() { Login *log = new Login; log->show(); } به درستی کار می‌کنه.
  3. کامبیز اسدزاده

    نمی‌دونم این رو دقیقاً کجا دارید می‌نویسید، اما طبق نمونه‌ای که گرفتین روش به کار گیری show درست نیست و باید خطا بده این رو امتحان کنید : Login *login = new Login; login->show(); یک کلاس بسازید با نام Login مثلاً، بعد یک نمونه بگیرید و کد مربوطه رو داخل یک رویدادی مثل کلیک شدن یا بارگذاری فرم قرار بدین. نمونهٔ کامل‌تر : void MainWindow::on_pushButton_clicked() { Login *log = new Login; log->show(); } اگه مشکلی بود هم سعی کنید جزئیات بیشتری ارائه کنید.
  4. کامبیز اسدزاده

    درود، کدی که نوشتین رو ارسال کنید تا بررسی بشه.
  5. کامبیز اسدزاده

    درود، اگر تنها دلیل شما کم حجم شدن برنامه است، این دلیل کافی نیست و از نظر من منطقی هم نیست. مزایای کیوت رو در نظر بگیرید، چند‌سکویی بودن و پشتیبانی از ویژگی‌های متنوع که سال‌هاست خودش رو ثابت کرده. آیا چیزی که می‌خواهید بسازید علاوه بر این ویژگی‌ها موارد دیگری هم به همراه کم حجم‌تر بودن را دارد؟ هرچند حجم برنامه شاید در زمان گذشته بسیار مهم بود، اما اکنون دیگر نیازی برای نگرانی در این باره وجود نداره.
  6. کامبیز اسدزاده

    درود، پیشنهاد اول این است که از ویژوال استودیوی حداقل ۲۰۱۷ استفاده کنید. پیشنهاد دوم این هست بر اساس راهنمای موجود از هر کتابخانه تنظیمات و کامپایل را انجام دهید. در پست زیر نیز اشاره‌ای به نحوهٔ افزودن کتابخانه‌ها به محیط VS شده است.
  7. کامبیز اسدزاده

    من فکر می‌کنم خدمات بر پایهٔ بستر بلاک‌چین و رمز‌ارز گزینهٔ خوب و هماهنگ شده‌ای در حوزهٔ سیستم‌های دیجیتالی هستش. این سیستم می‌تونه فارغ از اینکه قومیت، موقعیت‌جغرافیایی و اثرات سیاسی در اختیار همگان قرار بگیره. ظاهراً ویزا و پی‌پال هم در این حوزه وارد برنامه‌ریزی تحتِ خدمات ارز‌های دیجیتالی شده‌اند.
  8. سپاسگزاریم، بهتر بود برای موضوع جدید، یک تاپیک جدید ایجاد می‌کردید. به هر حال، این لینک رو بررسی کنید : https://wiki.qt.io/Handling_Microsoft_Excel_file_format
  9. کامبیز اسدزاده

    رونمایی از اولین درگاه پرداختِ ارزی توسط بایننس

    ما ایرانی‌ها به خصوص توسعه‌دهنده‌ها در حوزهٔ فناوری همیشه با مشکلاتی دست و پنجه نرم می‌کنیم، قطعاً می‌توان در این باره توضیحات بسیار جامعی ارائه کرد، اما یکی از این مسائل بحث محدودیت‌های شدید در پرداخت به شیوهٔ ارزی و بین‌المللی است و به همین خاطر به سختی می‌شود به مشتریان خارج از کشور خدمات ارائه و هزینه‌ای در قبال آن دریافت کرد بنابراین، معمولاً دسترسی به ارائهٔ خدمات در خارج از کشور امکان‌پذیر نیست. با تفکرِ به این که، روزی خواهد رسید درگاه‌های پرداختیِ فعلی به شیوه‌های کاملاً مردمی بدون در نظر گرفتن موقعیت، قومیت و سیاست‌های خارجی در اختیار همگان قرار خواهند گرفت و این یعنی آزادی در دنیای تجارت، به گونه‌ای که با اهداف و شعار این بستر و ارز‌های دیجیتالی هم‌خوانی داشته و به نظر می‌رسد پیش‌بینی‌ها در رابطه با شکل و قالب پول‌های نسل جدید واقعاً به این سمت سوق پیدا کند. این تفکر اگر به واقعیت تبدیل بشه فشار‌های کاری در این حوزه به شدت کاهش پیدا خواهد کرد و ما می‌تونیم شاهد این باشیم که برای دریافت خدمات می‌تونیم بدون محدودیت‌های مربوط به بحث سیاسی و تحریم‌ها، آن‌ها را در اختیار داشته باشیم و این خبر خوبی هست برای من، شما و هر کسی که در زمینهٔ فناوری و علم مرتبط با آن در حال پیشرفت است. بایننس، یکی از بزرگترین صرافی‌های دنیا، ساعاتی پیش در حاشیه رویداد «هفته بلاک چین بایننس» اعلام کرد که روز جمعه نسخه بتای درگاه پرداخت مخصوص خود با نام بایننس پی (Binance Pay) را راه‌اندازی کرده است. این درگاه به کسب‌وکارهای مختلف امکان می‌دهد تا بدون نگرانی از نوسانات قیمت ارزهای دیجیتال، محصولات خود را با این ارزها بفروشند. به گزارش دیکریپت، این اقدام بایننس نشان می‌دهد که این صرافی قصد دارد تا کسب‌وکار خود را فراتر از خریدوفروش ارزهای دیجیتال پیش ببرد و در نظر دارد تا مردم را به استفاده بیش از پیش از ارزهای دیجیتال سوق دهد. گفته می‌شود که بایننس پی پاسخ این صرافی به پی پل است. بایننس در اطلاعیه خود می‌نویسد: چانگ‌پنگ ژائو (Changpeng Zhao)،‌ مدیرعامل این صرفی، در رویداد هفته بلاک چین بایننس گفت: به‌گفته ژائو، مهمترین چالش بر سر راه این سیستم، استفاده کسب‌وکارها از ارزهایی است که اکثریت مردم از آنها استفاده نمی‌کنند. او معتقد است که پذیرش ارزهای رایج به‌مراتب راحت‌تر است؛ چراکه مردم مدام از آنها استفاده می‌کنند. سیستم تازه بایننس به کاربران این امکان را می‌دهد که پرداخت خود را با ارزهای دیجیتال انجام دهند. از سوی دیگر، کسب‌وکارها استیبل کوین‌هایی با پشتوانه ارزهای رایج دریافت می‌کنند و می‌توانند هر لحظه که بخواهند آنها را به ارز رایج تبدیل کنند. صد البته در حال تنها ارز رایج پشتیبانی‌شده در سیستم پرداخت بایننس یورو است. ژائو در این باره گفت: طبق اعلام بایننس، بایننس پی سبدی از محصولات است. از جمله محصولات دیگری که در این سبد قرار دارد بایننس کارت است. بایننس کارت یک کارت اعتباری است که به کاربران امکان خرید لحظه‌ای را می‌دهد. سیستم بایننس پی هم مانند بایننس کارت از ۵ ارز دیجیتال بیت کوین، اتریوم، بایننس کوین، استیبل کوین BUSD‌ و سوایپ (SXP) پشتیبانی می‌کند. بایننس سال گذشته شرکت سوایپ را خرید. بر خلاف بایننس کارت، در خدمات بایننس پی خبری از کارت‌های فیزیکی نیست و تراکنش‌ها با استفاده از اسکنر کیوآرکد در داخل اپلیکیشن انجام می‌شود. چانگ‌پنگ ژائو در ارتباط با راه‌اندازی بی سر و صدای سرویس بایننس پی گفت: منابع آی‌او‌استریم ارز‌ دیجیتال
  10. کامبیز اسدزاده

    سلام، قبلاً در این باره سوأل و پاسخ داده شده است.
  11. کار زیاد سختی نیست! این لینک رو بررسی کنید و طبق دستورات پیش برید. به خاطر این هست که پلاکین مربوطه را کامپایل نکرده‌اید. بله پشتیبانی می‌کنه. این توضیحات رو دنبال کنید و مطابق مثال برای Sql Server انجامش بدین.
  12. کامبیز اسدزاده

    اگه منظورتون رو درست متوجه شده باشم، بله.
  13. کامبیز اسدزاده

    بله البته، به نظرم این لینک مرجع خودِ کیوت کافی باشه، تمامی دستورات و مسائل فنی داخلش هست. البته پیشنهاد من این هست صرفاً از روی کنجکاوی و برای آشنایی بیشتر با کیوت ۶ امتحانش کنید و نه برای ارتقاء محصولاتتون، برای این کار پیشنهادم اینه که منتظر حداقل کیوت ۶.۲ باشید.
  14. کامبیز اسدزاده

    سلام، خیر متأسفانه، نسخهٔ ۵.۱۵.۰ به بعد از کیوت تماماً بر پایهٔ نصابِ آنلاین قابل دریافت هستند. مگر اینکه منابع‌کدش رو دریافت و خودتون کامپایل کنید که قطعاً زمان‌بر و سخت‌ خواهد بود.
  15. خالق لینوکس از اینتل به خاطر پشتیبانی نکردن از حافظه‌های ECC انتقاد کرده است. او به پشتیبانی غیررسمی از ECC در پردازنده‌های AMD به‌عنوان اتفاقی مثبت نگاه می‌کند. این ماجرا برای توسعه‌دهدنگان قطعاً بسیار مهم و کاربردی است، بنابراین به عنوان نماینده‌ای از جامعهٔ برنامه‌نویسان و یک فرد با تجربه در بحث برنامه‌نویسی و مشکلات آن در مدیریت حافظه نظرات توروالدز برای جامعهٔ ما اهمیت دارد. لینوس توروالدز، خالق لینوکس، به‌تازگی پست جدیدی در انجمن آنلاین Real World Tech با محوریت حافظهٔ کد تصحیح خطا (ECC) منتشر کرده است تا از اینتل انتقاد و از ای‌ام‌دی (AMD) تمجید کند. بر اساس گزارش تامز هاردور، توروالدز می‌گوید اینتل باید حافظه‌های ECC را به قطعاتی مین‌استریم تبدیل کند و پشتیبانی از این حافظه در پردازنده‌های سری رایزن ای‌ام‌دی اتفاق بسیار خوبی است. توروالدز با بیان اینکه «ECC کاملا پراهمیت است» اعلام کرد اینتل تأثیر به‌سزایی روی رونق نداشتن بازار حافظه‌ی ECC گذاشته است. خالق لینوکس می‌گوید: «بروید و به‌دنبال DIMM-های ECC بگردید؛ پیدا کردن آن‌ها واقعا سخت است. بله، احتمالا به لطف ای‌ام‌دی، وضعیت DIMM-های ECC اخیرا کمی بهتر شده و این دقیقا همان نکته‌ای است که می‌خواهم به آن اشاره کنم.» توروالدز بارها به ضررهایی که اینتل به صنعت ECC و حتی کاربران وارد کرده است اشاره می‌کند و صحبت‌هایش را با کلماتی توهین‌آمیز خطاب ‌به اینتل ادامه می‌دهد. توروالدز می‌گوید تیم آبی با پشتیبانی نکردن از ECC در مادربردها و پردازنده‌هایی که برای کاربران عادی عرضه می‌کند، باعث شده است استفاده از حافظه‌های ECC زیاد نباشد. خالق لینوکس به مشکلاتی با محوریت آسیب‌پذیری روهمر (Rowhammer) اشاره می‌کند و می‌گوید این دسته از مشکلات امنیتی جدی، از طریق حافظه‌های ECC به‌راحتی رفع می‌شوند. سلول‌های حافظه‌ی DRAM می‌توانند انرژی خود را به دیگر سلول‌های حافظه منتقل کنند. به‌طور معمول این اتفاق صرفا به خاطر نقص در حافظهٔ اصلی سیستم رخ می‌دهد و نهایتاً به بروز خطا در حافظه منتهی می‌شود؛ اما حملات مبتنی بر آسیب‌پذیری روهمر از این نقص به‌عنوان مکانیسمی برای دسترسی به سیستم بهره می‌گیرند. توروالدز می‌گوید هنگام توسعه دادن کد برای کرنل سیستم‌ عامل، دست‌و‌پنجه نرم کردن با حافظهٔ استاندارد بسیار سخت است. او به‌طور دقیق‌تر به این موضوع اشاره می‌کند که در اکثر اوقات نمی‌توان به‌طور دقیق فهمید خطای غیر قابل توضیح کرنل در کجا رخ داده است. در واقع این خطاها در اغلب اوقات ممکن است سخت‌افزاری باشند، نه نرم‌افزاری؛ خطاهایی که به‌راحتی توسط ECC قابل رفع هستند. توروالدز از ای‌ام‌دی به خاطر پشتیبانی غیررسمی از ECC تمجید می‌کند. او خوشحال است که ای‌ام‌دی تصمیم گرفته این پشتیبانی را به پردازنده‌های سری رایزن که در دسترس مشتریان عادی قرار می‌گیرند گسترش دهد. بدین ترتیب ای‌ام‌دی کاربران را قادر می‌سازد بدون پرداخت هزینه‌ی گزاف تهیهٔ قطعات سخت‌افزاری در سطح سرور، به ECC دسترسی داشته باشند. اینکه پشتیبانی غیررسمی از ECC به گسترش استفاده از آن کمک می‌کند، موضوعی است که نیاز به بحث دارد؛ زیرا در اغلب اوقات ECC به‌درستی کار نمی‌کند. اما خالق لینوکس می‌گوید حتی پشتیبانی غیررسمی، قدمی روبه‌جلو در جهت درست محسوب می‌شود.
  16. کامبیز اسدزاده

    سلام و خوش آمدید، قبل از هر چیز چون تازه کار هستید پیشنهاد می‌کنم در ویندوز به سراغ Mingw نرید، مگر مجبور باشید. با همون MSVC برنامه‌های خودتون رو کامپایل کنید و یا Clang. در کل، خطایی که گرفتین به خاطر عدم شناسایی تابع اصلی یعنی main() هستش. پیشنهاد می‌کنم تابع خودتون رو اصلاح کنید مطمئن بشید که main در برنامهٔ شما به درستی پیاده شده، سپس کامپایل و نتیجه رو ببینید. مثال صحیحی از تابع main در سی++ #include <iostream> int main() { std::cout << "Hello World!"; return 0; } همچنین با توجه به اینکه اشاره شده تازه شروع به یادگیری کردین، پیشنهاد می‌کنم مقالات زیر رو با دقت مطالعه کنید، در برخی از آن‌ها به لینک‌ها و مراجع آموزنده‌ای اشاره کردم. موفق باشید.
  17. یک حرکت خوشحال کننده در آغاز سال ۲۰۲۱ با عنوان آزاد شدن خدمات گیت‌هاب برای کشور عزیزمان صورت گرفته است؛ ساعاتی پیش «نت فرایدمن»، مدیرعامل گیت‌هاب اعلام کرد که این شرکت مجوزی از دولت آمریکا دریافت کرده تا خدماتش را به توسعه‌دهندگان ایرانی ارائه دهد. این سرویس‌ها می‌تواند در اختیار افراد یا سازمان‌ها و به شکل رایگان یا اشتراکی قرار گیرد. به قول مدیر عامل گیت‌هاب، همهٔ توسعه‌دهنده‌ها باید در استفاده از گیت‌هاب آزاد باشند و مهم نیست که در کجا زندگی می‌کنند. البته، با توجه به سوابق تحریمی پیشنهاد می‌شود در زمان استفاده از این خدمات، از مخازن کد‌های خودتان نسخهٔ پشتیبان تهیه کنید تا در صورت اعمال محدودیت‌ با مشکل خاصی مانند از دست دادن مخازن و یا عدم دسترسی به مخازن مواجه نشوید. منبع خبر اصلی : https://github.blog/2021-01-05-advancing-developer-freedom-github-is-fully-available-in-iran/
  18. خب پوشهٔ نهایی بعد از make رو برای install کجا زدی؟ به چه روشی داری به پروژه اضافش می‌کنی؟ تحتِ چه ابزاری؟ QMake یا CMake؟ البته پیشنهاد من اینه که روی هر پلتفرمی که هستی، بوست رو تحت مخازن اصلی سیستم‌عامل نصب کن تا دیگه نیازی نباشه کامپایلش کنی.
  19. کامبیز اسدزاده

    سلام، سوأل شما بسیار کلی هستش، پاسخش می‌تونه بسیار متنوع باشه. کیوت در نسخهٔ کنونی و بعد از نسخه‌های ۵.۱۰ می‌تونه بر اساس سفارشی سازی و خودکار کاملاً بر پایهٔ GPU مواردِ گرافیکی را پردازش کنه مثل OpenGL و Direct3D و حتی در نسخه‌های جدید‌تر از Vulkan و Metal که بر اساس نوع پلتفرم پشتیبانی می‌کند. به طور کلی در حالت پیشفرض اگر سیستم مقصد دارای پردازندهٔ گرافیکی با پشتیبانی از Api‌هایی که نام بردیم باشد، تمامی بار پردازشیِ گرافیکی جهت رندر بر روی کارت گرافیکی (GPU) خواهد بود. در غیر این صورت اگر فاقد پردازندهٔ گرافیکی باشد، به صورت خودکار بر روی CPU اعمال می‌شود. اما نوع دیگری از سوأل شما مرتبط پردازش موازی هستش که پاسخش می‌تونه پیشنهادِ استفاد از مواردی چون سکو‌های Cuda و یا OpenCL است که به شما اجازه میده پردازش‌های لازم رو بر روی پردازندهٔ گرافیکی اعمال کنید.
  20. این یک نسخهٔ مفهومی هست، نسخه‌ای که در زمان ارسال پست بر روی وب‌سایت ساخته شده با استفاده از Qt و Cutelyst بود. نسخهٔ بعدی از اون باز به عنوان مفهومی بر اساس Drogon Framework ساخته شده، و نسخه‌ای هم بر اساس Boost در دست توسعه هست.
  21. کامبیز اسدزاده

    سلام، برای این کار ابتدا سمت سی++ توابعی که باید مقادیر لحظه‌ای از مصرف منابع رو برای شما برگردونن رو پیاده‌سازی کنید، سپس برای ارسال و هماهنگی در سمت QML از WorkerScript استفاده کنید.
  22. کامبیز اسدزاده

    سلام، شما می‌تونید با جاوا و یا کاتلین شروع کنید. در این باره جستجو کنید و آموزش‌های مرتبط با این حوزه را دنبال کنید.
  23. از کامپایلر MSVC2017 و به بالا مثل MSVC2019 استفاده کن، این نسخه‌ای که به کار گرفتی حتی بتونی کامپایل هم کنی قطعاً مشکلاتی با این نسخه از بوست خواهد داشت.
  24. کامبیز اسدزاده

    درود، کد شما کمی نا منظم بود، به هر حال پیشنهاد می‌کنم نیاز خود مشابه این روش پیاده‌سازی کنید. #ifndef MYCLASS_HPP #define MYCLASS_HPP #include <QObject> #include <QByteArray> class MyClass : public QObject { Q_OBJECT Q_PROPERTY(QByteArray arr READ arr WRITE setArr NOTIFY arrChanged) Q_PROPERTY(quint8 length READ length WRITE setLength NOTIFY lengthChanged) public: explicit MyClass(QObject *parent = nullptr); ~MyClass(); public: const QByteArray arr() const; quint8 length() const; signals: void arrChanged(); void lengthChanged(); public slots: void setArr(const QByteArray& v); void setLength(quint8 l); private: QByteArray m_arr; quint8 m_length; }; #endif // MYCLASS_HPP #include "myclass.hpp" #include <QDebug> MyClass::MyClass(QObject *parent) : QObject(parent) { QByteArray myArr; myArr.push_back("A"); myArr.push_back("B"); myArr.push_back("C"); myArr.push_back("D"); myArr.push_back("E"); setArr(myArr); } MyClass::~MyClass() { } const QByteArray MyClass::arr() const { return m_arr; } quint8 MyClass::length() const { return m_length; } void MyClass::setArr(const QByteArray& v) { if(m_arr.isNull()) { m_arr = v; setLength(m_arr.length()); } emit arrChanged(); } void MyClass::setLength(quint8 l) { m_length = l; } import QtQuick 2.15 import QtQuick.Window 2.15 import QtQuick.Controls 2.15 import com.org.myclass 1.0 Window { width: 640 height: 480 visible: true title: qsTr("Hello World") MyClass{ id: myClass } Component.onCompleted : { print("data : " , myClass.arr) print("length : " , myClass.length) } }
  25. سلام، اگه بیلد کردی یعنی کامپلیلش کردی و کافیه به پروژه اضافش کنی. بهتره اشاره‌ای به نسخهٔ بوست، کیوت و پلتفرمی که استفاده می‌کنی داشته باشی تا بهتر راهنمایی کنیم. معمولاً روش کامپایل در همهٔ کتابخانه‌ها یکسان هستند. البته از ابزار‌هایی مثل conan، brew، vcpkg هم می‌تونید برای نصب این نوع کتابخانه‌ها استفاده کنید.
×
×
  • جدید...