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

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

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

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

  • روز های برد

    236

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

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

    درود، خب خطای ساطع شده چی هست؟ از سمت سرور چه پیامی دریافت می‌کنید؟
  2. کامبیز اسدزاده

    سلام، برای این کار بهترین روش این هست که سمت ++C چنین نیاز رو پوشش دهید، به کمک کلاس‌های موجود در ماژول QtNetwork مانند QNetworkAccessManager و QNetworkReply. اما اگر تأکید بر این دارید که در سمت Qt Quick و JS این کار صورت بگیره، می‌تونم پیشنهاد کنم از شیء XMLHttpRequest استفاده کنید. برای دریافت فایل هم کافی است مسیر گرفته شده از طریق FileDialog را به درستی در ورودی تابع send از XMLHttpRequest تعریف کنید. در صورت نیاز کدتون رو قرار بدین تا بیشتر بررسی بشه.
  3. کامبیز اسدزاده

    درود، این نمونه رو امتحان کنید. regExp: /^[a-zA-Z0-9]+([a-zA-Z0-9](_|-| |.)[a-zA-Z0-9])*[a-zA-Z0-9]+$/
  4. کامبیز اسدزاده

    پیشنهاد من در مرحلهٔ اول استفاده از Qt Quick هست که دست شما در سفارشی‌سازی بازتره. اما به طور کل منظورم از سفارشی‌سازی اینه که منو‌های سنتی رو حذف کنید و در محیط خودِ نرم‌افزارتون بخشی رو به عنوان Header و Menu قرار بدین.
  5. کامبیز اسدزاده

    خواهش می‌کنم، موفق باشید.
  6. کامبیز اسدزاده

    درود، برای این کار شما باید به شیوهٔ Button تغییرات رو اعمال کنید، چرا که نوع کنترل TabButton مشتق‌ شدهٔ کنترل اصلی است. برای این کار کافیه به روش سفارشی سازی Button عمل کنید. مثال: import QtQuick 2.12 import QtQuick.Controls 2.12 TabButton { id: control text: qsTr("Button") contentItem: Text { text: control.text font: control.font opacity: enabled ? 1.0 : 0.3 color: control.down ? "#17a81a" : "#21be2b" horizontalAlignment: Text.AlignHCenter verticalAlignment: Text.AlignVCenter elide: Text.ElideRight } background: Rectangle { implicitWidth: 100 implicitHeight: 40 opacity: enabled ? 1 : 0.3 border.color: control.down ? "#17a81a" : "#21be2b" border.width: 1 radius: 2 } }
  7. کامبیز اسدزاده

    ممنون از توضیحات کافی. من قبلاً با این مشکل روبرو شدم، و همین مسئله رو باهاش داشتم. اما هیچ راه حلی برای این مشکل پیدا نکردم، به نظرم باگ مربوط به خودِ Qt Widget باید باشه که از طرفی بحث راست‌چین یا چپ‌چین بودن روی پلتفرم‌های خاصی مثل macOS و Linux مهم نیست و این مسئله به نظرم ارتباطی با این موضوع می‌تونه داشته باشه و زمانی درست عمل می‌کنه که منو‌های سیستم‌عامل هم راست‌چین بشن. چون کیوت چند-سکویی هست، پیشنهاد من اینه برای حل این موضوع منو‌های سفارشی بسازید و بیخیال منو‌‌های کلاسیک بشید. البته من به دنبال راه حلی برای این موضوع هستم و در صورت نتیجه‌گیری به اشتراک خواهم گذاشت.
  8. کامبیز اسدزاده

    سلام، کدهایی که برای این کار استفاده کردین رو به اشتراک بذارید تا مسئله رو حل کنیم.
  9. کامبیز اسدزاده

    سلام، در مورد مسئلهٔ واکنش‌گرا بودن در کیون ۵.۱۴ به بعد این مشکل حل شده است و نیازی برای نگرانی وجود ندارد. در صورت مشاهدهٔ مسئله خاصی این کد می‌تواند مشکل را حل کند: QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
  10. با سلام و درود، این بخش جهت معرفی خلاصه گزارشی از جلسات باز برنامه‌نویسی گروه سی‌پلاس‌پلاس ایران ایجاد شده است. طبق برنامه‌ریزی موضوعات جلسه بعد از تشکیل و پایان آن به صورت چکیده گردآوری شده و برای مستند شدن آن در این بخش ارائه می‌شود. جلسات مربوط به این قسمت در ساعات ۲:۰۰ الی ۲۲:۰۰ چند روز از هفته تشکیل می‌شود. لینک دسترسی به این جلسات در تلگرام : https://t.me/AdvancedCppCommunity
  11. کامبیز اسدزاده

    سلام، قبلاً برای این کار نیاز بود که با کلاس 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());
  12. کامبیز اسدزاده

    خب در این صورت کافیه یکی از روش‌های زیر و یا دیگر روش‌ها را برای نمونه سازی از کلاس 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!");
  13. کامبیز اسدزاده

    درود، به روش‌های متفاوتی می‌تونید این کار رو انجام بدین. در دسترس‌ترین روش که در مستندات کیوت هم موجود است فراخوانی از طریق 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
  14. کامبیز اسدزاده

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

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

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

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

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

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

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

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

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

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