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

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

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

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

  • روز های برد

    266

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


  1. در 5 ساعت قبل، Mohammad Rahbari Doust گفته است :

    سلام، در مورد اینکه cv-qualification چی هست سوال داشتم ممنون می‌شم توضیح بدید.

    در استاندارد سی‌پلاس‌پلاس وقتی نیاز است تا نوعی را برای متغیر خود انتخاب و توصیف کنید به طور معمول آن را به صورت‌های نوعِ اساسی و پایه مانند عدد صحیح، رشته، آرایه و غیره و یا یک نوع ویژهٔ واجد شرایط جهتِ استثناء شدن توصیف می‌کنیم. این انواع به دو صورت no cv-qualifier و cv-qualifier از هم متفاوت توصیف می‌شوند.

    کلمات CV خلاصه‌ شدهٔ const و volatile است، زمانی که شما نوعی از متغیر را تحت کلمات کلیدی const و volatile توصیف می‌کنید در واقع نوع آن را تحت عنوان const-qualified و volatile-qualified توصیف کرده‌اید که از تعریف عادی متمایز می‌شوند و با این کار متغیر را واجد شرایط خاصی قرار می‌دهید.

    برای مثال، نوع زیر در قالب استاندارد cv-qualifier تعریف شده است که به صورت ضروری مقدار اولیهٔ آن نیز مشخص شده است:

    const int ci = 3; 

    در صورتی که کدی همانند نمونهٔ زیر داشته باشیم:

    const int ci = 3;
    ci = 4;

    از طرف کامپایلر با خطایی مشابه خطای زیر مواجه خواهیم شد:

    error: cannot assign to variable 'ci' with const-qualified type 'const int'

    منظور از این خطا این است که، مقدار جدیدی را شما نمی‌توانید به متغیری از نوع const که تحتِ شرایطِ const-qualified می‌باشد بدهید.

    از طرفی اگر نوع متغیر خود را با volatile توصیف کنید، مقدار متغیر در هر نَخ (Thread) دیگر احتمال تغییر یافتن را خواهد داشت.

    volatile int ci = 3;
    ci = 4;

    در واقع شما آن متغیر را واجد شرایط ویژه‌ای قرار داده‌اید که بتواند در هرجا که نیاز بود تغییر پیدا کند. (در این حالت بر خلاف نوع const کامپایلر خطایی را از خود ساطع نمی‌کند و علاوه بر آن در زمان بهینه‌سازی از آن مورد صرف نظر خواهد کرد).

    استفاده از کلمهٔ کلیدی volatile  بهینه‌سازی کامپایلر را از بهینه‌سازی آن دور می‌کند.توجه داشته باشید که یک کلمهٔ کلیدی ویژه نیز وجود دارد به نام mutable که از آن زمانی استفاده می‌شود که اعضای کلاس و نوع توابع شما به صورت const یعنی از نوع const-qualified توصیف شده باشد که تغییر آن امکان‌پذیر نیست. در صورتی که لازم باشد استثناء یا واجد شرایط قرار بگیرد نوع آن توسط mutable می‌تواند توصیف شود که اجازهٔ تغییر فقط به آن مورد داده خواهد شد.

    mutable int i;

    در نهایت متغیر‌ زیر به صورت no cv-qualitifier تعریف شده است که در حالت معمول بر اساس قوانین و شرایطی که کامپایلر در نظر می‌گیرد با آن برخورد و در صورت نیاز بهینه‌سازی خواهد شد.

    int i = 2;
    • پسندیدن 1

  2. ابزار Android NDK به عنوان مجموعه‌از ابزار‌هایی است که به شما امکان آن را می‌دهد تا بخشی از برنامه‌های خود را به صورت بومی تحت زبان C و ++C توسعه دهید. بنابراین NDK از چندین کتابخانهٔ در زمان اجرای ++C پشتیبانی می‌کند؛ در این پست در رابطه با آخرین تغییرات مرتبط با NDK اطلاع رسانی می‌شود.

    public class MyActivity extends Activity {
      /**
      * Native method implemented in C/C++
      */
      public native void computeFoo();
    }

    بر اساس آخرین تغییرات کتابخانه‌های استاندارد libstdc++ به libc++ به‌روز رسانی و تمامی ویژگی‌های استاندارد C++17 پشتیبانی می‌شود که از نسخهٔ R18 به بعد در دسترس قرار گرفته است.

    نقل قول

    کتابخانه‌های اشتراکی (پویا) به صورت libc++_shared.so و کتابخانه‌های ایستا (استاتیکی) در قالب libc++_static.a می‌باشند.

    برخی از تغییرات مهم که لازم است به آن‌ها توجه شود به صورت زیر می‌باشند:

    • تغییرات اساسی از نسخهٔ NDK R17 آغاز شده است که در آن یکی از مهمترین و تکان‌ دهنده‌‌ترین تغیرات حذف GCC است که قرار بر این بود در نسخه‌های جدید NDK R18 پشتیبانی از GCC به صورت کامل حذف و Clang جایگزین آن شود.
    • در نسخهٔ R18 پشتیبانی از gnustl, gabi++و stlport حذف شده است.
    • پشتیبانی از ICS از اندروید‌های ۱۴ و ۱۵ به بعد حذف شده است.
    • بر اساس قوانی جدید گوگل، بار‌گذاری اپلیکیشن از تاریخ آگوست ۲۰۱۹ به بعد در فروشگاه گوگل پلی (Play Store) نیازمند نسخهٔ معماری ۶۴ بیتی می‌باشد.
    • پشتیبانی از C++17 در نسخهٔ R18 به بعد تایید نهایی و قابل استفاده شده است و همچنین در نسخه‌های R19 استفاده از تمامی استاندارد‌های منسوخ شده پیشنهاد نمی‌شود.
    • کلمات کلیدی new و delete در استاندارد جدید ++C از نسخهٔ R18 منسوخ و در نسخهٔ R19 به طور کامل حذف خواهند شد.
    • پشتیبانی از مدیریت‌های استثناء (RTTI) در NDK به صورت پیش‌فرض غیر فعال می‌شود.
    • مانند استثنائات، RTTI در libc++ پشتیبانی می‌شود، اما به صورت پیشفرض در android-build غیرفعال شده است که برای فعال‌سازی آن‌ می‌توانید از cmake و دیگر ابزار‌ها استفاده کنید.
    • هیچ محدودیتی در رابطه با هِدر‌های سی‌پلاس‌پلاس در اندروید وجود ندارد.

    برای فعال سازی RTTI در برنامهٔ شما در ndk-build کد زیر را در application.mk اضافه کنید:

    APP_CPPFLAGS := -frtti
    

    همچنین برای فعال سازی آن برای یک ماژول خاص در ndk-build کد دستوری زیر را استفاده کنید:

    LOCAL_CPP_FEATURES := rtti
    

    روش دیگر به صورت زیر است:

    LOCAL_CPPFLAGS := -frtti
    

    نکته: تحت این سند ویژگی‌های سیستمی STL در آینده حذف خواهند شد.

    توجه: libc++ یک کتابخانهٔ سیستمی نیست. در صورتی که از libc++_shared.so استفاده می‌کنید باید آن را در داخل فایل apk خود قرار دهید. در صورتی که از Gradle استفاده می‌کنید این کار به صورت خودکار انجام می‌شود.

    • پسندیدن 1

  3. نسخهٔ Qt Creator 4.8.1 منتشر شد.

    تغییرات و بهود‌ها:

    Qt Creator version 4.8.1 contains bug fixes.
    
    The most important changes are listed in this document. For a complete
    list of changes, see the Git log for the Qt Creator sources that
    you can check out from the public Git repository. For example:
    
        git clone git://code.qt.io/qt-creator/qt-creator.git
        git log --cherry-pick --pretty=oneline origin/v4.8.0..v4.8.1
    
    General
    
    * Fixed too large minimum size of preferences dialog (QTCREATORBUG-21678)
    
    Editing
    
    * Fixed that text marks could vanish (QTCREATORBUG-21628)
    * Fixed wrong background color for some text highlighting items
      (QTCREATORBUG-21661)
    * Fixed handling of system text encoding on Windows (QTCREATORBUG-21622)
    * Language Client
        * Fixed crash after failed server restarts (QTCREATORBUG-21635)
    
    All Projects
    
    * Fixed crash when renaming file in file system view (QTCREATORBUG-21741)
    * Fixed that `Create suitable run configurations automatically` setting was not
      saved (QTCREATORBUG-21796)
    
    QMake Projects
    
    * Fixed handling of `unversioned_libname` (QTCREATORBUG-21687)
    
    C++ Support
    
    * Clang Code Model
        * Fixed Clang backend crashes when `bugprone-suspicious-missing-comma` check
          is enabled (QTCREATORBUG-21605)
        * Fixed that `Follow Symbol` could be triggered after already moving to a
          different location
        * Fixed tooltip for pointer variables (QTCREATORBUG-21523)
        * Fixed issue with multi-line completion items (QTCREATORBUG-21600)
        * Fixed include order issue that could lead to issues with C++ standard
          headers and intrinsics
        * Fixed highlighting of lambda captures (QTCREATORBUG-15271)
        * Fixed issues with parsing Boost headers
          (QTCREATORBUG-16439, QTCREATORBUG-21685)
    
    * Clang Format
        * Fixed handling of tab size (QTCREATORBUG-21280)
    
    Debugging
    
    * Fixed `Switch to previous mode on debugger exit` (QTCREATORBUG-21415)
    * Fixed infinite loop that could happen when adding breaking on non-source line
      (QTCREATORBUG-21611, QTCREATORBUG-21616)
    * Fixed that debugger tooltips were overridden by editor tooltips
      (QTCREATORBUG-21825)
    * Fixed pretty printing of multi-dimensional C-arrays (QTCREATORBUG-19356,
      QTCREATORBUG-20639, QTCREATORBUG-21677)
    * Fixed issues with pretty printing and typedefs (QTCREATORBUG-21602,
      QTCREATORBUG-18450)
    * Fixed updating of breakpoints when code changes
    * CDB
        * Fixed `Step Into` after toggling `Operate by Instruction`
          (QTCREATORBUG-21708)
    
    Test Integration
    
    * Fixed display of UTF-8 characters (QTCREATORBUG-21782)
    * Fixed issues with custom test macros (QTCREATORBUG-19910)
    * Fixed source code links for test failures on Windows (QTCREATORBUG-21744)
    
    Platform Specific
    
    Android
    
    * Fixed `ANDROID_NDK_PLATFORM` setting for ARMv8 (QTCREATORBUG-21536)
    * Fixed debugging on ARMv8
    * Fixed crash while detecting supported ABIs (QTCREATORBUG-21780)

    برای دریافت کلیک کنید.


  4. سلام،

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

    کد‌هایی که از لحاظ خوانایی و پاکی و فاقد باگ‌های احتمالی هستند امتیاز مثبت و کد‌هایی که فاقد آن باشند امتیاز منفی خواهند گرفت.


  5. در 12 ساعت قبل، er.khanaki گفته است :

    سلام به همه دوستان.

    یک کلاس سی داریم که ارتباط سریال رو انجام میده و من با این کد

    
    qmlRegisterType<serialPort>("io.qt.Serial.SerialPort", 1, 0, "SerialPort");
    


    کلاس سی رو نمونه سازی کردم در qml.

    مشکل اینجاست که چطور زمانی که در سی و توسط پورت سریال اطلاعاتی رو دریافت کردم textarea در qml مقادیر رو نمایش بده.

    کد دریافت از سریال در کلاس سی ++

    
    QString serialPort::getData()
    {
        QByteArray serialData;
        QString serialBuffer = "";
     
        serialData = _serialport->readAll();
        serialBuffer = QString::fromStdString(serialData.toStdString());
        qDebug() << serialBuffer;
        return  serialBuffer;
    }

    textarea in qml

    
        Rectangle
        {
            id:containerTextArea
            width: parent.width
            anchors.top: container.bottom
            anchors.bottom: btnClearTextCommunication.top
            color: "#e0e0eb"
     
            TextArea
            {
                id:txtCommunication
                anchors.fill: parent;
                readOnly: true
            }
        }

    نمونه سازیم  کلاس سی++

    
        SerialPort
        {
            id:serialport
        }

     

    سلام،

    تابع getData رو باید برای کیو‌ام‌ال فراخوانی کنید.

    قبل از تابع بهتره Q_INVOKBLE رو قرار بدی تا بتونی تحت QML بهش دسترسی داشته باشی.

    اگر که توابع شما همانطور که به نظر میاد پیچیده هستند از آموزش زیر الگو بگیرید.

     


  6. در 12 ساعت قبل، Farideh گفته است :

    سلام،
    در qml جدولی دارم که با ارث بری از listView ایجاد شده و علاوه بر اطلاعات اعداد حاوی اطلاعات تصویر هم هست. برای گزارشگیری از این جدول به صورت pdf  باید تصاویر و نوشته‌هایی به عنوان سربرگ اضافه کنم. برای الصاق تصاویر و گزارشگیری از این جدول به صورت pdf چه راهی در qml پیشنهاد می‌کنید؟

    شما می‌تونید در کیوت از توابعی مثل drawImage از کلاس QPainter در ++C استفاده کنید و نتیجهٔ اون رو با استفاده از تابع grabToImage در سمت QML بسازید.

    قبل از هر چیز ماژول پرینت رو فعال کنید، برای این کار داخل فایل .pro این کد رو اضافه کنید.

    QT += printsupport

    سپس کلاسی بسازید، مثلاً کلاس PrintAction به صورت زیر:

    #ifndef PRINTACTION_H
    #define PRINTACTION_H
    
    #include <QObject>
    #include <QVariant>
    
    class PrintAction : public QObject
    {
      Q_OBJECT
    
    public:
      PrintAction();
      Q_INVOKABLE void print(const QVariant &data);
    
    };
    
    #endif // PRINTACTION_H
    
    #include "printaction.h"
    #include <QPrinter>
    #include <QPainter>
    #include <QPrintDialog>
    
    PrintAction::PrintAction()
    {
    
    }
    
    void PrintAction::print(const QVariant &data)
    
    {
    
      QImage img = qvariant_cast<QImage>(data);
      QPrinter printer;
            QPrintDialog *dlg = new QPrintDialog(&printer,nullptr);
            if(dlg->exec() == QDialog::Accepted) {
                    QPainter painter(&printer);
                    painter.drawImage(QPoint(0,0),img);
                    painter.end();
            }
    
    
    }
    

    فایل main.cpp به این صورت خواهد بود:

    #include <QGuiApplication>
    #include <QQmlApplicationEngine>
    #include <QApplication>
    #include <QQmlContext>
    #include "printaction.h"
    #include <QtPlugin>
    
    
    int main(int argc, char *argv[])
    {
      QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);
      QApplication app(argc, argv);
      QQmlApplicationEngine engine;
    
      //Register C++ class for QML
      PrintAction  print;
      engine.rootContext()->setContextProperty("PRINT", &print);
      engine.load(QUrl(QStringLiteral("qrc:/main.qml")));
      if (engine.rootObjects().isEmpty())
        return -1;
    
      return app.exec();
    }
    

    در نهایت فایل QML شما هم باید چیزی مثل این باشه:

    import QtQuick 2.12
    import QtQuick.Window 2.12
    import QtQuick.Layouts 1.3
    import QtQuick.Controls 2.4
    
    Window {
        visible: true
        width: 640
        height: 480
        title: qsTr("Hello World")
    
        property date currentDate: new Date()
    
    RowLayout {
    
        id:pageHeader
    
        width: parent.width
        Layout.fillWidth: true
    
        Label {
            text: "First name: "
        }
    
        Text {
            text: qsTr("<b>Kambiz</b>")
        }
    
        Label {
            text: "Last name: "
        }
    
        Text {
            text: qsTr("<b>Asadzadeh</b>")
        }
    
        Item { Layout.fillWidth: true; }
    
        Label {
            text: "Date: "
        }
    
        Text {
            text: currentDate.toLocaleDateString();
            font.bold: true
        }
    
    }
    
    
    Button {
        x: 437
        y: 137
        width: 150
        height: 36
        text: qsTr("Print")
        onClicked: {
                var stat = pageHeader.grabToImage(function(result) {
                    result.saveToFile("/Users/compez/Desktop/someimage.png");
                    PRINT.print(result.image);
                });
                console.log("Success: ", stat);
            }
    }
    
    }
    

    موفق باشید.


  7. در 2 ساعت قبل، Saman گفته است :

    بعد از سه روز ۳ پیداش کردم  -ـ-

    
    Flow {
     
        id: flow
        width: parent.width-5
        height: childrenRect.height
        spacing: 10
        anchors.verticalCenter: parent.verticalCenter
        Repeater{
            model: ListModel {
                ListElement {
                    name: "Jim Williams"
                    url: " "
                }
                ListElement {
                    name: "John Brown"
                    url: " "
                }
                ListElement {
                    name: "Bill Smyth"
                    url: " "
                }
                ListElement {
                    name: "Sam Wise"
                    url: " "
                }
            }
            Rectangle{
                height: 25
                width: name.width
                radius: 2
                
                Text {
                    id: name
                    text: model.name
                    anchors.centerIn: parent
                }
                MouseArea{
                    anchors.fill: parent
                    onClicked: stackView.push(model.url)
                }
            }
        }
    }

     

    سلام،

    این چیزی نیست که انتظارش رو داشتی.

    برای Flow هم خاصیت anchors.verticalCenter: parent.verticalCenter رو تعریف نکن.

    از همون GridView استفاده کن و آیتم‌های درونش رو لنگر بزن (anchors).


  8. در در 8 دی 1397 در 12:38، nima_pw گفته است :

    سلام،

    ممنون از پاسخ شما.

    ویژوال استودیو ویرایش ۲۰۱۷

    ابزار CMake نسخه 3.13.2 (GUI)

    فایل برنامه: DTAEA.zip - آپلود عکس و فایل رایگان

    هم در ویندوز و هم در لینوکس و مک این پروژه رو تست کردم و هیچ مشکلی در حین کامپایلر نداره.

    از MinGW استفاده نکنید، با MSVC x64 بیلدش کنید.

    روالش هم این هست که cmake رو اجرا کنی، مسیر سورس پروژه رو بهش تعریف و در بخش کامپایلر MSVC 2017 x64 رو انتخاب و بسازیش.

    در نهایت فایل ALL_BUILD.vcxproj ساخته خواهد شد و می‌تونید با VS کامپایلش کنید.

    اینم خروجی موفقیت آمیز برای من :

    The C compiler identification is MSVC 19.16.27025.1
    The CXX compiler identification is MSVC 19.16.27025.1
    Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe
    Check for working C compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe -- works
    Detecting C compiler ABI info
    Detecting C compiler ABI info - done
    Detecting C compile features
    Detecting C compile features - done
    Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe
    Check for working CXX compiler: C:/Program Files (x86)/Microsoft Visual Studio/2017/Professional/VC/Tools/MSVC/14.16.27023/bin/Hostx86/x64/cl.exe -- works
    Detecting CXX compiler ABI info
    Detecting CXX compiler ABI info - done
    Detecting CXX compile features
    Detecting CXX compile features - done
    Configuring done
    Generating done

     


  9. در 17 ساعت قبل، nima_pw گفته است :

    سلام

    من یک پروژه open source دانلود کردم، شبیه سازی یک مقاله هست

    باید اجرا کنم و خروجی هاش رو ببینم به زبان C نوشته شده اما با Cmake ساخته شده که تقریبا فهمیدم Cmake چیه اما نتونستم برنامه رو توی Visual Studio اجرا کنم. Cmake رو نصب و خروجی رو برای Visual studio 2017 ساختم اما وقتی اجرا میکنم پیام out of date میده، در جواب build میزنم yes اما faild میشه، No میزنم اجرا نمیشه

    از داخل خود Visual Studio هم که توی سرچ هام فهمیدم میشه مستقیما پوشه ای که cmakeList.txt داره رو open کرد، این کارو کردم اما اون بالا کنار فلش سبز رنگ نوشته select startup item و روی current document هست و گزینه دیگه ای نداره و قابلیت اجرا نداره

     

    تصویر فایل های این پروژه رو ضمیمه کردم

    0t75_files.jpg

     

    نمیدونم باید چیکار کنم، ممنون میشم راهنمایی کنید.

    خطای out of date به تنهایی برای شناسایی مشکل کافی نیست، ظاهراً باید چیزی رو به‌روز‌رسانی کنید.

    مشخصات پروژه (لینک برای بررسی) همچنین نسخهٔ VS و CMake رو ارسال کنید تا بتونیم بیشتر بررسی کنیم.


  10. در 9 ساعت قبل، GornerLabo گفته است :

    بعد بیلد ، کتابخانه به این شکل دراومد. لینک دانلود کتابخانه بیلد شده با کامپایلر mingw

    مشکل حالا نحوه اد کردن این کتابخانه س. فایل dll داره در فولدر bin ولی فایل .h نداره که داینامیک ادد کنم

    کتابخانه را که بیلد کردین قرار نیست .h را هم کنار فایل‌های بیلد شده قرار بدین!

    شما باید پوشهٔ libarchive را از کتابخانهٔ اصلی و فایل‌های بیلد شده را به صورت دستی بهش اضافه کنید.

     

    • پسندیدن 1

  11. در 8 دقیقه قبل، GornerLabo گفته است :

    مشکل بیلد هم حل شد. سپاس استاد.

    برای اضافه کردن به پروژه از گزینه add library استفاده میکنم . برای این منظور بعد add library ، مسیر کتابخانه و فایل .a رو فقط میتونم اضافه کنم که با بیلد کردن پروژه با ارور مواجه میشم. گوگل کردم و چندجایی دیدم مشکل داشتن در ویندوز برای اضافه کردن. اینم حل شه ازتون ممنون میشم

    خب خطایی که می‌گیری چی هست؟

    سعی کن از حالت داینامیک استفاده کنی، حالت Release یا Debug کتابخونه رو هم با برنامهٔ خودت هماهنگ کن.


  12. در 11 ساعت قبل، mahan گفته است :

    عرض سلام و ادب

    من قصد دارم برای نمایش نقشه از امکانات marble استفاده کنم و یک نمونه ساده برای نمایش نقشه بسازم ولی تنطیماتش رو نمی‌دونم. لطفا راهنمایی بفرماید که چطور راه اندازیش کنم فایل پروژه را به پیوست ارسال می کنم.

    https://marble.kde.org/dev-intro.php

    تنظیمات به این صورت هستش که خودش هم توضیح داده. کتابخانه رو باید بیلد کنید و بعد به پروژه اضافش کنید.

    دستورات ساخت کتابخانه به صورت زیر می‌باشد:

    mkdir -p ~/marble/build
    cd ~/marble/build
    cmake -DCMAKE_BUILD_TYPE=Debug -DWITH_KF5=FALSE -DCMAKE_INSTALL_PREFIX=/usr/local ~/marble/sources
    make
    sudo make install

    در نهایت کد آزمایشی به صورت زیر خواهد بود:

    #include <QApplication>
    #include <marble/MarbleWidget.h>
    
    int main(int argc, char** argv)
    {
        QApplication app(argc, argv);
    
        // Load Marble using OpenStreetMap in Mercator projection
        Marble::MarbleWidget *mapWidget = new Marble::MarbleWidget;
        mapWidget->setProjection(Marble::Mercator);
        mapWidget->setMapThemeId("earth/openstreetmap/openstreetmap.dgml");
    
        mapWidget->setWindowTitle("Hello Marble!");
        mapWidget->show();
        return app.exec();
    }

    اگر هم برای پلتفرم ویندوز لازمش دارید طبق این راهنمایی کامپایلش کنید.

    از این آموزش هم می‌تونید کمک بگیرید:

     


  13. در 11 دقیقه قبل، GornerLabo گفته است :

    استاد ممنون بابت پاسخ گویی. من ازکاربرای ویندوزم. برای بیلد در ویندوز و کامپایلر mingw32 باید به چه نحو عمل کرد؟

    سورس کد کتابخانه‌ رو دریافت و توسط CMake GUI بسازیدش.

    برنامه‌ command prompt رو اجرا و سورس رو با دستور mingw32-make کامپایل کنید.

    راهنمای ساخت این کتابخانه در Mingw و MSVC


  14. در 21 ساعت قبل، GornerLabo گفته است :

    برای فرمت zip حل شد!

    طبق این لینک

    حالا برای فرمت های tar و lz4 باید به چه شکل عمل کرد؟

    اول باید کتابخانه بیلد بشه، با دستورات زیر:

    tar xzf libarchive-xxx.tar.gz
    cd libarchive-xxx
    ./configure
    make
    make check
    make install

    برای افزودن این کتابخانه به Qt از بخش Add Library پروژه اقدام کن، خروجیش چیزی شبیه به این باید بشه من آخرین نسخه رو امتحان کردم:

    LIBS += -L$$PWD/../../../Downloads/libarchive-3.3.3/build/ -larchive
    
    INCLUDEPATH += $$PWD/../../../Downloads/libarchive-3.3.3
    DEPENDPATH += $$PWD/../../../Downloads/libarchive-3.3.3
    
    PRE_TARGETDEPS += $$PWD/../../../Downloads/libarchive-3.3.3/build/libarchive.a
    

    در نهایت یک کد آزمایشی به صورت زیر برای زیپ کردن در قلب .tar امتحان کردم که مشکلی نداره و کار می‌کنه. فرصت زیادی ندارم تا همه مواردش رو چک کنم، شما طبق مستندات و مثال‌های پیش‌فرض امتحان و به کیوت اضافش بکنید.

    #include <QCoreApplication>
    #include <QString>
    #include <QByteArray>
    #include <QFileInfo>
    #include <QDebug>
    #include <QDirIterator>
    #include <libarchive/archive.h>
    #include <libarchive/archive_entry.h>
    #include <sys/types.h>
    #include <sys/stat.h>
    #include <fcntl.h>
    
    int main()
    {
        QString directory = "iostreamir";
        struct archive *a;
        struct archive_entry *entry;
        struct stat st;
        char buff[8192];
        size_t bytes_read;
        int fd;
    
        QByteArray outArray = directory.toLocal8Bit() + ".tar";
        char *outDirectory = outArray.data();
        qDebug() << outDirectory;
    
        QByteArray inputArray = directory.toLocal8Bit();
        char *inputDirectory = inputArray.data();
        qDebug() << inputDirectory;
    
        QFileInfo inputInfo;
        inputInfo.setFile(directory);
    
        // the name of the directory
        QByteArray pathArray = inputInfo.fileName().toLocal8Bit();
        char *pathDirectory = pathArray.data();
        qDebug() << pathDirectory;
    
        a = archive_write_new();
        archive_write_add_filter_gzip(a);
        archive_write_set_format_pax_restricted(a);
        archive_write_open_filename(a, outDirectory);
    
        QDirIterator it(directory, QDirIterator::Subdirectories);
        while (it.hasNext()) {
            entry = archive_entry_new();
            stat(inputDirectory, &st);
    
            archive_entry_set_pathname(entry, it.next().toLocal8Bit().constData());
            archive_entry_set_filetype(entry, AE_IFDIR);
            archive_entry_copy_stat(entry, &st);
            archive_write_header(a, entry);
    
            fd = open(inputDirectory, O_RDONLY);
            bytes_read = read(fd, buff, sizeof(buff));
            while (bytes_read > 0) {
                archive_write_data(a, buff, bytes_read);
                bytes_read = read(fd, buff, sizeof(buff));
            }
            close(fd);
            archive_entry_free(entry);
    
            archive_write_finish_entry(a);
            archive_write_close(a);
            archive_write_free(a);
        }
    
        return 0;
    }
    

     

    • پسندیدن 1

  15. در 49 دقیقه قبل، قاسم رمضانی منش گفته است :

    با سلام.

    با توجه به اینکه محیط Qt Creator برای استفاده از QWidget یا Qt Quick یک محیط‌بصری هم تعبیه کرده است که کار را برای استفاده راحت‌تر کرده است. امّا واقعاً استفاده از این ابزار در پروژه‌های بزرگ درست  می‌باشد ؟ یا اینکه باید از برای کنترل بیشتر با استفاده از کدنویسی‌محض طراحی‌محیط را به عهده گرفت ؟ در این‌صورت ... وظیفهٔ اصلی این محیط طراحی چیست ؟

    - مثال‌هایی که خود Qt هم دارد ، بدون استفاده از محیط ویژوال طراحی شده است.

    بستگی داره با چه دیدگاهی بهش نگاه کنید‍.

    مسلماً کسی که حرفه‌ای است در کار خود نیازی به محیط‌های ویزاردی ندارد. اما یک واقعیت وجود دارد، در واقع اصل استانداردی است که باید در محیط‌های توسعه وجود داشته باشد. بنابراین برای اینکه کنترل سریعتر و بهتری در طراحی و پیاده سازی اجزاء داشته باشید وجود چنین ویژگی بسیار کارآمد خواهد بود. برای مثال جهت بررسی States‌ها در یک جزء مشاهده‌‌ی بصری آن کمک بسیاری در تصمیم گیری بر تغییرات و توسعه خواهد کرد.

    فرض کنید مانیتور شما حرفه‌‌ای با پهنای بسیار بزرگ است، برای طراحی حرفه‌ای نیمی از محیط توسعهٔ خود را در اختیار نیمی از پهنای مانیتور خود و تمامی بخش‌ها مرتبط با منطق آن را همزمان با یکدیگر تحت نظر قرار خواهید داد.

    Screen Shot 2018-12-22 at 21.23.28.png

    تصویر فوق یک روش استاندارد برای تحت نظر داشتن جزء به جزء یک شیء است که تحت Satetes‌ها بررسی می‌شود و شما به صورت Real-time می‌تونید این جزئیات را تحت نظر داشته باشید.

    نتیجه : کاربرد چنین ویژگی صرفاً جهت تسلط بسیار بر اشیاء و وضعیت آن‌ها در زمان توسعه می‌باشد.

    • تشکر شده 1

  16. در 2 ساعت قبل، قاسم رمضانی منش گفته است :

    با سلام.

    معیار‌ها برای انتخاب یک دیتابیس برای یک برنامهٔ حسابداری چه چیزهایی میتواند باشد ؟ بنده درحال شروع نوشتن یک برنامهٔ حسابداری با استفاده از فریمورک Qt هستم. و وهله اوّل که درحال طراحی بخش‌های مختلف برنامه هستم نیاز به انتخاب یک دیتابیس دارم. که با وجود تنوع دیتابیس‌ها در این زمینه نیاز دانستم که نظر مابقی دوستان را در این زمینه بدانم.

    بنده برنامه‌‌ی حسابداری هلو را دیدم که از دیتابیس MS SQL Server استفاده میکند. ولی خب برنامهٔ من Cross-Platform می‌باشد و نمیتوانم از MS SQL Server استفاده کنم.

    سلام،

    معیار‌ها می‌تونن بسیار جزئی و کاملاً فنی باشن! مثلاً بحث هزینه‌ها، ساختار، پرفرمنس‌ها، ویژگی‌ها، بحث تجاری بودن، پشتیبانی و غیره...

    برای مثال MySQL به خاطر سرعت بالا، پشتیبانی از چند-سکویی، پایداری خوب و همچنین پشتیبانی از لایه‌های چند منظوره و موتور‌های چند منظوره برای اهداف خاص بسیار مطرح شده، البته نسخه‌های متفاوتی دارن که جدیدا MariaDB بسیار بهتر هست. از طرفی PostgreSQL در نسخه‌های جدید‌تر از لحاظ سرعت با MySQL برابری می‌کند و به خاطر تضمین پشتیبانی از داده‌های بسیار بزرگتر نسبت به مای‌اس‌کیو‌ال و پشتیبانی از قابلیت‌های بسیار زیاد نسبت به آن مطرح هست! مخصوصاً عملکرد بهتری که در سرور‌هایی با پشتیبانی از پردازنده‌های چند هسته‌ای دارد. این دو مورد کاربرد‌های بسیار عظیمی دارند و شما می‌تونید برای اهداف بزرگ ازشون استفاده کنید. هر دوی این دیتابیس‌ها چند-سکویی هستند اما برای کار حرفه‌ای MySQL و برای کار‌های حرفه‌ای تر PostgreSQL پیشنهاد میشه.

    در نظر داشته باشید بهینه سازی این موارد با ترکیب مختص برای سیستم‌های کشینگ مثل Memcached و Redis بسیار چشمگیر خواهد بود.

    برای پروژهٔ شما با توجه به توضیحی که دادین MySQL انتخاب خوبی هست.

    • پسندیدن 1
    • ترکوندی! 1

  17. در 7 دقیقه قبل، najib moradi گفته است :

    سلام 

    بنده دوره زبان برنامه نویسی سیپلاس‌پلاس را کامل کردم و فعلا قصد دارم گرافیکال کار کنم اما نمی‌دانم از کجا باید شروع کنم باید چه چیز را یاد بگیرم! 

    کلاً راهنمایی لازم دارم اگه زحمت نیست ممنون میشم. 

    سپاس از همکاری شما

    سلام،

    قبلاً در رابطه با این موضوع توضیحات به صورت کامل ارائه شده است.

    همچنین موارد زیر را مطالعه بفرمایید:

     

×
×
  • جدید...