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

قاسم رمضانی منش

مدیران مرجع
  • تعداد ارسال ها

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

  • روز های برد

    21

آخرین بار برد قاسم رمضانی منش در 11 دی

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

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

56 عالی

2 دنبال کننده

درباره قاسم رمضانی منش

کاربـــر رسمی
میانجی گر‌ها
  • تاریخ تولد 9 آذر 1378

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

موقعیت

  • شهر
    Esfahan

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

847 بازدید کننده نمایه
  1. قاسم رمضانی منش

    با StyleSheet زیاد امتحان کرده‌ام آن خروجی‌ای که مدنظرم هست (و توی عکس‌بالا هم ارسال کرده‌ام) به دست نیومد.
  2. قاسم رمضانی منش

    در حالت عادی، ویجت QSlider به این‌صورت نمایش داده می‌شود : برای رنگ بندی نوار QSlider، چه پیشنهادی دارید ؟ مثلاً به این‌صورت :
  3. قاسم رمضانی منش

    خواهش می‌کنم؛ خب آره همینی هست که گفته‌‌ام، نمی‌دونم بیرونی‌ترین شئ منظورت چیه ؟ ساختار QML درختی هست یعنی اینکه یک Root داره و میاد همینطوری پایین و شما کلاً یک Root هم بیشتر ندارید. شما اگه بیاید اون Rectangle رو داخل یک Item دیگه بزارید درواقع یک کامپوننتی دارید که قابلیّت‌های Rectangle رو هم داره اینطوری : AnotherRectangle.qml import QtQuick 2.0 import QtQuick.Controls 2.0 Item { property alias rectangleId : recId; Rectangle { id: recId } } main.qml import QtQuick 2.13 import QtQuick.Window 2.13 Window { visible: true width: 640 height: 480 AnotherRectangle { anchors.centerIn: parent width: parent.width / 2 height: parent.height / 2 rectangleId.color: "Red" rectangleId.width: 100 rectangleId.height: 200 } }
  4. قاسم رمضانی منش

    سلام؛ فکر کنم منظورتون این باشه : AnotherRec.qml import QtQuick 2.0 Rectangle { } main.qml import QtQuick 2.13 import QtQuick.Window 2.13 Window { visible: true width: 640 height: 480 AnotherRec { anchors.centerIn: parent; width: parent.width / 2; height: parent.height / 2; color: "gray"; } } که اینجا ما یک کامپوننت جدیدی درست کردیم که از Rectangle به ارث برده، بد نیست اون مستنداتی هم که خوندید رو ارسال کنید شاید بحث کلاً یه چیز دیگه‌ای بوده باشه.
  5. قاسم رمضانی منش

    باید متغیر را به‌صورت unsubstituted به List ارسال کنیم تا مقدار درست را برایمان برگرداند.
  6. قاسم رمضانی منش

    نیاز دارم که برقرار بودن ارتباط به اینترنت در Build System پروژه بررسی کنم، از این رو با استفاده از تابع file یک آزمایشی می‌کنم: file( DOWNLOAD www.google.com ${CMAKE_SOURCE_DIR}/Test STATUS ERROR_CODE ) و خروجی در متغیر ERROR_CODE به حاوی شمارهٔ کد و متن خطا به‌صورت یک لیست ذخیره می‌شود : امّا نمی‌توانم با استفاده از تابع list و ورودی GET اقدام به دریافت یک مقدار بر اساس اندیس آن می‌کنم: list(GET ${ERROR_CODE} 0 MESSAGE_OUT) message(${MESSAGE_OUT}) امّا خروجی NOTFOUND می‌دهد، به این‌صورت نیز بررسی کرده‌ام: set(WITHOUT_ERROR "No error") foreach(VAR ${ERROR_CODE}) if(${VAR} EQUAL ${WITHOUT_ERROR}) message("Ghasem is here without error.") endif() endforeach() امّا باز خروجی‌ای حاصل نشد. به چه صورت می‌توان این مشکل را حل کرد ؟
  7. قاسم رمضانی منش

    سلام و درود بر شما؛ در این قسمت، قبل از اینکه متغیر FILE را ارسال کنید، با استفاده از تابع fopen فایل را باز کنید: myCurl::myCurl(string u){ url = u; filename = "/tmp/curltemp.txt"; curl_global_init(CURL_GLOBAL_ALL); curl_handle = curl_easy_init(); curl_easy_setopt(curl_handle, CURLOPT_URL, u.c_str()); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, file); } به این‌صورت: myCurl::myCurl(string u){ url = u; filename = "/tmp/curltemp.txt"; curl_global_init(CURL_GLOBAL_ALL); curl_handle = curl_easy_init(); if(curl_handle) { file = fopen(filename.c_str(), "wb"); curl_easy_setopt(curl_handle, CURLOPT_URL, u.c_str()); curl_easy_setopt(curl_handle, CURLOPT_WRITEFUNCTION, write_data); curl_easy_setopt(curl_handle, CURLOPT_WRITEDATA, file); } } برای اینکه بخوای دقیقاً متوجه بشی که چرا خطا می‌داد، به خاطر این هست که کلاً در کتابخانه‌ی Curl هر تنظیماتی و هر رفتاری نسبت به هر شیء یا عمل بر روی اون رو باید همراه با پارامتر‌هاش که می‌تونه از نوع اشاره‌گری به شیء، تابع و یا نوعی از curl_off_t باشه، به کنترل کننده‌ی curl_easy_setopt تحویل داده بشه تا دقیقاً هر بلایی که سرش میاد رو کنترل کنه. در واقع یک سری سری جلسات حاوی رفتار‌ها رو برای کنترل می‌سازه و به هسته‌ی کتابخانه‌ی Curl ارائه می‌کنه تا بدونه چه رفتاری باید داشته باشه. زمانی هم که نیاز باشه تنظیمات رفتاریِ اعمال شده توسط کاربر رو برای کتابخانه به صورت پیش‌فرض بازگردانی کنیم از curl_easy_reset استفاده خواهیم کرد. مقدار دهی‌های اولیه هم کلاً بر عهده‌ی curl_easy_init هست. در این مثال هم چون دقیقاً عملِ باز شدن و خوانده شدن فایل بر روی حافظه نامشخص بود و به طوری null دریافت می‌کرد، طبیعتاً خطای Segfaults باید رخ می‌داد. برای اینکه بخوای جزئیات بیشتری رو هم به دست بیاریم می‌تونیم از مشخصه‌ی CURLOPT_VERBOSE استفاده کنیم تا جزئیات بیشتری از عملکرد کتابخانه رو در زمان اجراء رو ببینیم. برای مثال : curl_easy_setopt(curl, CURLOPT_VERBOSE, 1L);
  8. قاسم رمضانی منش

    درود بر شما؛ یکی از دوستانی که این حرف رو هم تأیید می‌کنه آقای Anthony Williams (نویسندهٔ کتاب C++ Concurrency in Action و Maintainer کتابخانهٔ Boost.Thread) هست که در صفحهٔ ۱۲اُم به بعد از کتابشون در این مورد توضیحات لازم رو دادند که هزینهٔ استفاده از std::thread چقدر هست و فکر نمی‌کنم که دیگه ایشون در نوشتن الگوریتم چندان مشکلی داشته باشند.
  9. قاسم رمضانی منش

    @zari درود بر شما؛ برای اینکه قسمت صحیح عدد را دریافت کنید می‌تونید اون عدد double را به نوع int تبدیل کنید : int main (void) { double some_double = 10.23; float some_float = 32.12; printf("double %f => %d.\nfloat %f => %d.\n", some_double, (int) some_double, some_float, (int) some_float); } خروجی: double 10.230000 => 10. float 32.119999 => 32.
  10. قاسم رمضانی منش

    علیکم‌السلام و درود بر شما؛ راستش با توضیحاتی که دادید خیلی گیج شدم و منتظرم که وقتی باشد تا کتابی که پیشنهاد دادید را بخوانم، چون کدهایی که دوستمان ارسال کرده‌اند درواقع برای من اصلاً جواب نداد و Segmentation Fault داده. و تا به چیزی که امروز من یادگرفته‌ام می‌دانم که آدرس یک متغیر local را نباید از تابع برگرداند و این دقیقاً کاری هست که در کد انجام شده و کاری که من کرده‌ام و دلیلی که بهتر دیده‌ام این بوده که حافظه‌ای در Heap گرفته‌ام و آدرس آن را برگرداندم و این عمل بدون Segmentation Fault کار خود را انجام میدهد. امّا همینطوری که گفتم : اصلاً رفتار کد به درستی مشخص نبود و با توضیحات شما هم چیزی متوجه نشدم.
  11. قاسم رمضانی منش

    پس برای چه در خروجی اسمبلی تولید شده وجود ندارند ؟ در فیلمی که پیوند آن را ارسال کرده‌ام توضیحاتی که داده است : «توابع inline درواقع دستوراتشان در همان قسمت فراخوانی قرار گرفته و کامپایل می‌شد.» در خروجی اسمبلی دوّم درست است ما تابعی با برچسب max_int (اسم تابع ما در مثال) نداریم امّا فراخوانی آن صورت گرفته است : call max_int@PLT و این قسمتی هست که متوجه نمی‌شم که دقیقاً چی را فراخوانی کرده ؟
  12. قاسم رمضانی منش

    درود و خسته نباشید بر دوستان عزیز؛ در New Features In C درحال بررسی قابلیّت‌های اضافه شده به استانداردهای سی بوده‌اند، درمورد توابع inline به چه صورت کامپایل می‌شود ؟ یک نمونه به این‌صورت نوشته‌ام : int max_int(const int i, const int j) { return (i > j) ? i : j; } int main (void) { return max_int(10, 15); } و خروجی اسمبلی به این‌صورت می‌باشد : .file "main.c" .text .globl max_int .type max_int, @function max_int: .LFB0: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl %edi, -4(%rbp) movl %esi, -8(%rbp) movl -4(%rbp), %eax cmpl %eax, -8(%rbp) cmovge -8(%rbp), %eax popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE0: .size max_int, .-max_int .globl main .type main, @function main: .LFB1: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $15, %esi movl $10, %edi call max_int popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1: .size main, .-main .ident "GCC: (GNU) 9.1.0" .section .note.GNU-stack,"",@progbits و هنگامی که تابع را به صورت inline‌ تعریف می‌کنم: .file "main.c" .text .globl main .type main, @function main: .LFB1: .cfi_startproc pushq %rbp .cfi_def_cfa_offset 16 .cfi_offset 6, -16 movq %rsp, %rbp .cfi_def_cfa_register 6 movl $15, %esi movl $10, %edi call max_int@PLT popq %rbp .cfi_def_cfa 7, 8 ret .cfi_endproc .LFE1: .size main, .-main .ident "GCC: (GNU) 9.1.0" .section .note.GNU-stack,"",@progbits هر دو در اینجا max_int را فراخوانی کرده‌اند امّا در خروجی دوّم هیچ label برای max_int تعریف نشده است ! به چه صورت عمل می‌کند ؟
  13. قاسم رمضانی منش

    درود بر شما؛ بله مشکل دارد، همانطوری که خودتان هم گفتید دارید آدرس یک متغیر محلی را از تابع بر می‌گردانید که این اخطار را هم از سمت کامپایلر هنگام کامپایل آن تابع دریافت می‌کنید ‌: $ warning: function returns address of local variable و برنامهٔ شما هم به احتمال زیاد Segmentation Falut داده و از بین می‌رود. برنامهٔ شما ممکن است که خروجی درستی نداشته باشد، چراکه دارید از یک حافظه‌ای داده را می‌خوانید که اصلاً وجود ندارد (حافظه آزاد شده است). در کامپایلر MSVC2017 و سیستم‌عامل Windows 7 64bit کد را برای شما کامپایل و بدون مشکل اجرا می‌کند امّا خروجی درستی ندارید. در کامپایلر MinGW و سیستم‌عامل Windows 7 64bit کد را کامپایل و اخطاری که در بالا اشاره کرده‌ام را داده و در هنگام اجرا برنامه با Segmentation Fault رو به رو می‌شود. کامپایلرهای GCC و‌ Clang در سیستم‌عامل ArchLinux اخطار بالا را داده و همانند MinGW عمل می‌کند. کامپایلر TCC در سیستم‌عامل ArchLinux نیز همانند MSVC2017 عمل می‌کند. بهتر است که تابع را به این شکل بازنویسی کنید : char* doXOR(char* cData1, char* cData2) { char* cData = malloc(256); assert(cData); for (int i = 0; i < 255; ++i) { cData[i] =cData1[i] ^ cData2[i]; } cData[255] = '\0'; return cData; } و همچنین موقع استفاده : int main (void) { /* ... */ char* tmp = doXOR(cData1, cData2); strcpy(cData3, tmp); printf("%s\n", cData3); free(tmp); tmp = NULL; return EXIT_SUCCESS; }
  14. قاسم رمضانی منش

    درود بر شما، سلامت باشید؛ برای اینکار بهتر هست که یک کلاس به عنوان Adapter درست کنید که درواقع ارتباطات شما را با این کلاس پوشش بدهد و آن کلاس را در سمت QML استفاده کنید. برای استفاده از داده‌های خودمان در سمت QML راه‌های مختلفی هست که باید مطالعه کنید و بسته به نیازتون انتخاب کنید؛ سند روش‌های برقراری ارتباط بین ++C و QML. یک مثال در این قسمت آقای اسدزاده زده‌اند و برای نمونهٔ اضافه بنده هم یک مثال از این روش، به‌ اینصورت‌که یک کلاس برای ارتباط برقرار کردن با کلاس QVector درست کرده‌ام : [پیوند فایل somewrapper.h] class SomeWrapper : public QObject { Q_OBJECT Q_PROPERTY(QString StringWrap READ readCurrentString WRITE addAnotherString) public: void addAnotherString(const QString& string) { REPORT(string, "ourStringList"); REPORT(string, "currentString"); this->currentString = string; this->ourStringList.push_back(string); } QString readCurrentString(void) const { return this->currentString; } Q_INVOKABLE QString getSomeString(const int& index) const { return this->ourStringList.at(index); } private: QVector<QString> ourStringList; QString currentString; }; و به این‌صورت آن را برای موتور QML معرفی کرده‌ام : [پیوند فایل main.cpp] int main (int argc, char** argv) { QGuiApplication application(argc, argv); QQmlApplicationEngine qmlApplication; SomeWrapper stringBook; qmlApplication.rootContext()->setContextProperty ("StringBook", &stringBook); qmlApplication.load(QUrl::fromLocalFile("../../main.qml")); return application.exec(); } و حال به راحتی می‌توانم داده‌های مورد نیاز را به سادگی از سمت QML دریافت کرده و با پردازش آن در کلاس SomeWrapper به کلاس QVector ارسال کنم : [پیوند فایل main.qml] TextField{ id: user_search_input placeholderText: "خانهٔ مورد نظر را وارد کنید" horizontalAlignment: TextInput.Center } Button{ text: "گَشتن" onClicked: { user_search_input.text = StringBook.getSomeString(user_search_input.text) } }
  15. درود؛ درمورد نحوهٔ کار استاندارد‌ها نمی‌دانم ولی توی استاندارد توضیحی درمورد اینکه چطوری پیاده‌سازی بشه نداده، این مورد ظاهراً به‌عهدهٔ کامپایلره. مثلاً در پیاده‌سازی‌ای که GCC از N4806 کرده (فعلاً Clang هیچ پیاده‌سازی‌ای نداره) از توابع داخلی خود کامپایلر استفاده کرده : [آدرس فایل در مخزن گیت] // 14.1.2, source_location creation static constexpr source_location current(const char* __file = __builtin_FILE(), const char* __func = __builtin_FUNCTION(), int __line = __builtin_LINE(), int __col = 0) noexcept { source_location __loc; __loc._M_file = __file; __loc._M_func = __func; __loc._M_line = __line; __loc._M_col = __col; return __loc; } پیاده‌سازیه توابع داخلی (پیوند).
×
×
  • جدید...