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

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

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

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

  • روز های برد

    230

آخرین بار برد کامبیز اسدزاده در 30 فروردین

کامبیز اسدزاده یکی از رکورد داران بیشترین تعداد پسند مطالب است !

اعتبار در سایت

568 عالی

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

اساتید
توسعه‌ دهنده بَک اِند
توسعه‌ دهنده فرانت اِند
توسعه دهنده فول اِستَک
منتور‌ها و مشاورین
  • تاریخ تولد 12 فروردین 1368

اطلاعات شبکه‌ای

موقعیت

  • شهر
    اورمیه

آخرین بازدید کنندگان نمایه

6,115 بازدید کننده نمایه
  1. کامبیز اسدزاده

    سلام، قبلاً برای این کار نیاز بود که با کلاس QAndroidJniObject کار کنید و مسیر صریحش رو به دست بیارید. اما از نسخهٔ ۵.۱۵ مسیر صریحش رو بر می‌گردونه، کافیه به شیوهٔ زیر از مسیر‌های استاندارد استفاده کنید: نسخهٔ QML FileDialog { id: fileDialog title: "Choose File Attachment" folder: StandardPaths.writableLocation(StandardPaths.PicturesLocation) ... } نسخهٔ ++C const QStringList picturesLocations = QStandardPaths::standardLocations(QStandardPaths::PicturesLocation); QFileDialog dialog; dialog.setDirectory(picturesLocations.last());
  2. کامبیز اسدزاده

    خب در این صورت کافیه یکی از روش‌های زیر و یا دیگر روش‌ها را برای نمونه سازی از کلاس NotificationClient به کار بگیرید: NotificationClient notificationClient; notificationClient.setNotification("Hello, World!"); QScopedPointer<NotificationClient> notificationClient(new NotificationClient()); notificationClient->setNotification("Hello, World!"); std::unique_ptr<NotificationClient> notificationClient; notificationClient->setNotification("Hello, World!");
  3. کامبیز اسدزاده

    درود، به روش‌های متفاوتی می‌تونید این کار رو انجام بدین. در دسترس‌ترین روش که در مستندات کیوت هم موجود است فراخوانی از طریق QAndroidJni هستش که در زیر مثال واضحی دارد. https://doc.qt.io/qt-5/qtandroidextras-notification-example.html همچنین روش دیگری هم وجود دارد که برای iOS و Android به طریق FireBase می‌تونید از این ویژگی استفاده کنید. https://firebase.google.com/docs/cpp/setup نسخهٔ اندروید : https://firebase.google.com/docs/cpp/setup?platform=android نسخهٔ آی‌او‌اس : https://firebase.google.com/docs/cpp/setup?platform=ios
  4. کامبیز اسدزاده

    چه خبره دوست عزیز، این چیزی که شما فرستادین ظاهراً مربوط به یک پروژهٔ OpenSim هست و خارج از حوصلهٔ من خواهد بود که ۱۰۰۰ خط کد رو بررسی کنم. لطف کنید این لینک رو بررسی کنید آموزش نحوهٔ ساختش رو داده : https://github.com/opensim-org/opensim-core#building-from-the-source-code
  5. کامبیز اسدزاده

    محتوای درون فایل CMakeLists.txt اینجا قرار دهید تا بررسی شود.
  6. کامبیز اسدزاده

    به قوائد تعریف متغیر در سی‌پلاس‌پلاس توجه کنید. به نظر میاد شما دارید از یک پروژه‌ای استفاده می‌کنید که فایل‌های سرآیند اون در اختیار شما نیست و با چنین مشکلات متنوعی مواجه شدین. خطاهای فوق داره می‌گه موارد مربوطه تعریف نشده. پیشنهاد می‌کنم مقالات زیر را در مورد سی‌پلاس‌پلاس مطالعه کنید.
  7. کامبیز اسدزاده

    این که خطا نیست، ماکروست! یکجور شرط هست، برای این نوشته شده که وقتی کامپایلر شما استاندارد ۱۱ رو پشتیبانی نکنه پیام خطا بده! و الآن هم ظاهراً از کامپایلر و محیطی استفاده می‌کنید که برای عصر یخبندانه. توضیه می‌کنم از کامپایلر‌های جدید استفاده کنید.
  8. کامبیز اسدزاده

    سلام، گزینه‌های زیر را هم بررسی کنید : https://ncreportsoftware.com https://cute-report.com https://www.kdab.com/development-resources/qt-tools/kd-reports
  9. کامبیز اسدزاده

    سادست، ویژوال استودیو حداقل نسخهٔ ۲۰۱۷ را نصب کنید. بعد از نصب آن، کیوت را نصب کنید به صورت خودکار کیت‌ها را شناسایی خواهد کرد.
  10. کامبیز اسدزاده

    سوألتون رو با جزئیات بیشتر بپرسید تا بتونیم مسئله را بررس پلتفرم (سیستم‌عامل) شما چی هست؟ اگر ویندوز است که باید کیت توسعهٔ ویندوز را نصب کنید. اگر لینوکس یا مک هست که باید به ترتیب gcc و xcode در آن‌ها نصب شود. پیشنهاد آخر این که نسخهٔ آخر را به صورت آنلاین نصب نمایید.
  11. درود، منظور از این مقاله آموزش ساخت یک وب‌سایت نیست، صرفاً برای اطلاع‌رسانی جهت آشنایی با امکان این کار در سی++ بود. برای نحوهٔ کار و ساخت و ساز یک وب‌سایت تحتِ سی‌پلاس‌پلاس در فرصتی مناسب آموزش‌هایی ارائه خواهد شد.
  12. کامبیز اسدزاده

    اکثر برنامه‌های زیبایی که در حال حاضر می‌بینید نسبت به نوع سیستم‌عامل و تصمیمات توسعه‌دهنده و منظور استفادهٔ آن توسعه یافته‌اند. بعضی از آن‌ها به صورت کاملاً بومی تحت رابط‌های برنامه‌نویسی خودِ سیستم‌عامل و چهارچوب‌های اختصاصی طراحی شده‌اند، و برخی تحت یک سری کیت‌ها و کتابخانه‌های چندمنظوره. برای مثال، برنامه‌های خالص (نه چند‌سکویی) بومی در سیستم‌عامل ویندوز معمولاً تحتِ رابط‌های برنامه‌نویسی بومی خود ویندوز 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. به طور کلی این کتابخانه‌ها کارهای سطح پایین‌ را خودشان مدیریت می‌کنند و نیازی نیست شما با آن‌ها درگیر شوید، مگر اینکه بخواهید یک کتابخانه یا چهارچوبی مانند کیوت بسازید که قطعاً نیاز خواهد داشت بر روی هر یک از این رابط‌های اختصاصی تسلط و اشراف کامل داشته باشید. بزرگترین مزیت کتابخانه‌ای مانند کیوت در این است که وابستگی به پلتفرم در آن معنا ندارد و شما می‌توانید در هر پلتفرمی که هستید رابط‌های کاربری مورد نظر محصول خود را بسازید.
  13. کامبیز اسدزاده

    ببینید این قسمت از کد‌ها اصلاً درست نیست! چطور برای شما کامپایل میشه بعید می‌دونم آزمایشش کرده باشید! نام فرم و کلاس شما باید 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(); } به درستی کار می‌کنه.
  14. کامبیز اسدزاده

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