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

بهنام صباغی

کاربـــر رسمی
  • تعداد ارسال ها

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

  • روز های برد

    27

پست ها ارسال شده توسط بهنام صباغی


  1. متاسفانه مشکلاتی داره سه بعدی کیوت و دست رو خیلی میبنده من قبلا با یک سریشون برخورد کردم و تصمیم گرفتم برم سراغ VTK خوبم جواب داد دست ادمم باز میذاره توی کار من خیلی وقته سه بعدی کار نکردم و با خود سه بعدی کیوت هم اصلا نساختم همون اوایل محدودیت هایی داشت که فراریمون داد سمت VTK بهتره بقیه دوستان کمک کنند.

    • پسندیدن 1

  2. در 19 ساعت قبل، نیما غراب گفته است :

    @قاسم رمضانی منش خیلی ممنونم ازتون.

    همون اول توضیحات هر کلاس که مینویسه مثلا Rectangle از Item ارث میبره منظورم بود. قبلش من در این مورد جست و جو کردم ولی چیزی پیدا نکردم.

    آقا قاسم این کلاس AnotherRec از بیرونی‌ترین شی تعریف شده در فایل AnotherRec.qml فقط ارث میبره؟ یعنی اگر فرضا همین Rectangle رو در داخل یک Item بزاریم دیگه از Rectangle چیزی ارث نمیبره؟

    سپاس فراوان.

    در واقع شامل همه موارد هست یعنی اگر بیرونی تریم شی یه Item باشه خب شما یه کامپوننت از آیتم داری که توش یه rectangle هست و میتونی هر پراپرتیش رو که بخوای تعریف کنی توی بالاترین کامپوننت و بدی بیرون که استفاده بشه

    • تشکر شده 1

  3. در 22 ساعت قبل، فرهاد شیری گفته است :

    قطعا دقت کردم?

    ظاهرا شما دقت نکردید??

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

    انشاالله اگر بی دقت نباشیم!! منظورمون از مثال برای این پست بود...

    ? سریع بهتون بر میخوره‌ها

    نه دیگه در مورد خود chaiscript مثال فرستادم ولی کاربردش رو که گفتم خدمتتون برای هرکس کاربردش جدا تعریف میشه کاری که ما کردیم برای کار خودمون بود و توی کد‌های شرکت هست با همین منطقی که گفتم و همین مثالی که فرستادم میشه کارهایی که میخواید رو پیاده کنید دیگه تعریف تابع و استفادش رو که مثالش رو فرستادم این که یک تابع save و load داشته باشی هم که سادست توی کار روی دیتا بقیشم که عملیاتی که میخوای رو تعریف میکنی حالا جمع یا ضرب یا تقسیم و ...

    در این مورد توضیحات روشنه نیاز به مثال نیست یا میتونم بگم حال مثال نوشتن ندارم ?

    بازم معذرت میخوام اگر شما یا دوستان رو ناراحت کردم.


  4. در در 24 تیر 1398 در 08:54، فرهاد شیری گفته است :

    یعنی الان این تابع...

    
    std::string helloWorld(const std::string &t_name) {
    
    return "Hello " + t_name + "!";
    
    }

    کامپایل شده ویا در زمان اجر کامپایل میشود.یعنی میشه این تابع را داخل یک فایل تکست نوشت ودر زمان اجرا بدون کامپایل این برنامه تابع فوق را evaluate میکنه!

    ویا فقط با استفاده از دستورات خود همین مفسر اسکریپتی مثل همین تابع puts , print را می توان به عنوان ورودی رفتار تابع helloWorld را evaluate کرد.

    به نظر من قطعا باید از قبل رفتار تابع کامپایل شده باشه ولی ورودی های این تابع که با استفاده از تابع puts ارسال میشن چون به صورت رشته هستند قطعا می تونن در زمان اجرا متفاوت باشن! بنابراین حوزه عملکرد این مفسر محدود به توابع سرویس دهنده ای هست که تدارک دیده.!

    خیر توبع توی سی پلاس پلاس نوشته میشند و توی کد ریجستر میشند یعنی کد همون کد کامپایل شده سی پلاس پلاس هست ولی میتونید توی ران تایم صداشون کنید مثلا ما برای کار روی تصویر ازش استفاده کردیم میتونستیم تصاویر رو الگوریتم های مختلف روشون اعمال کنیم فرض کنید خروجی یه تابع تصویر بود و بعد میشد فیلتر های مختلف و عملیات مختلف رو که توابعشون رو ریجستر کرده بودیم رو روش اعمال کنیم و تابع Save هم داشتیم که تصویر رو بعد عملیات ذخیره می‌کردیم خوبیش این بود که برای کارهای دم دستی و ساده روی تصویر میتونست کاربر خودش کارهایی که میخواست رو روی تصویر انجام بده و بعد از رسیدن به یک کد نسبتا خوب این کد میومد توی سی پلاس پلاس میشد یک ابزار برای نرم‌افزار یعنی تیم علمی یه ابزار راحت داشت که سرعت سی پلاس پلاس رو داشت و میتونست کارهایی که میخواست رو انجام بده بدون این که توی کد سی پلاس پلاس دست ببره و سرعت سی پلاس پلاس رو هم داشت.

    باید کاربرد دقیق تعریف بشه تا بشه توی این پیادش کرد مثلا کار ما با تصویر بود میشد گرفت و ذخیرش کرد یا حتی تابع خوندن تصویر داشتیم توش.

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

    • تشکر شده 1

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

    بنظرم مشکل شما با یک زبان اسکریپتی حل میشه. کافیه تا توابع و قابلیت هایی که میخواین رو از ++C به یکی از زبان های اسکریپتی مثل Lua بایند کنید و بعد از اون میتونید قابلیت هایی که بایند شده رو در قالب یک فایل تکست یا حتی یک string اجرا کنید.

    میتونند از http://chaiscript.com هم استفاده کنند که به شما اجاره میده توابع از پیش تعریف شده سی پلاس پلاس رو در ران تایم صدا بزنید

    اگر توابع پایه ای که لازم دارند رو اضافه کنند میتونند توی ران تایم کد بنویسند و اجرا کنند. به مثال خودش دقت کنید :


     

    #include <chaiscript/chaiscript.hpp>
    
    std::string helloWorld(const std::string &t_name) {
    
    return "Hello " + t_name + "!";
    
    }
    
    int main() {
    
    chaiscript::ChaiScript chai;
    
    chai.add(chaiscript::fun(&helloWorld), "helloWorld");
    
    chai.eval(R"(
    
    puts(helloWorld("Bob"));
    
    )");
    
    }

    این چیزی رو که مد نظرتون هست پیاده میکنه ؟

    @kambiz behnia 

    • پسندیدن 1

  6. در در 26 فروردین 1398 در 11:56، فانوس گفته است :

    سلام

    ممنونم. درست شد. مشکل اینجا بود که زمان خوندن کارت از دستگاه نمیدونم چرا ۵ بار دیتای کارت را برای این صفحه امیت میکرد. بار اول ذخیره می شد اما تا میخواست نشون بده دوباره متدش ران میشد و تو دفعات بعد نمیتونست متد درست کار کنه.

    اومدم گفتم اگر بار اول کارت را گرفتی و برای این ایدی ذخیره کردی حالا دوباره همین متد برای همین کارت و همین یوزر داره فراخوانی میشه return کن. حالا داره کار میکنه

    باقی کدها درست بود.

    ممنونم از وقتی که برام گذاشتید.

    خواهش میکنم.

    خدا رو شکر که حل شد ولی دنبال دلیل باشید و نگذارید بیش از این مشکل توی برنامه باقی بمونه یعنی دلیل چند بار امیت شدن رو متوجه بشید وگرنه جلوتر ممکنه مشکلات مشابهی پیش بیاد و ترکیب این مشکلات با هم غیر قابل حل باشه.

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

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

    سوالی هم بود بپرسید در خدمتیم.

    • تشکر شده 1

  7. توی تابع ست کردن متغیر سیگنال تغییرش رو فراخوانی کردید ؟

    نحوه ارسالتون به کیو ام ال به چه شکل هست ؟

    از طرفی اگر کدتون همینی هست که ارسال کردید خب چرا توی تعریف errpan مستقیم برابر با ui.acptCard قرار ندادید ؟

    توی تابع

    setacptCard(true);

    چرا به این صورت نیست ؟

    setAcptCard(true);در کل اگر درست تعریف کرده باشید و سیگنال تغییر رو هم توی تابع ست کردن فراخوانی کرده باشید نباید مشکلی باشه.

    شاید لازم باشه توی یک پروژه ساده این کار رو انجام بدید و ببینید کار میکنه یا نه اگر کار نکرد که مشخصه روند رو دارید اشتباه میرید و میتونید کمی بیشتر مطالعه کنید تا مشکل حل بشه اما اگر کار کرد و روند با روند توی کد خودتون یکی بود شاید لازم باشه کد اصلی رو دید.

     


  8. در در 16 فروردین 1398 در 18:56، mohsenzard67 گفته است :

    به نام خدا

    سلام و وقت بخیر به شما

    من تازه کار با qt رو شروع کردم یه کدی نوشتم با کتابخانه استاندارد fstream ، مشکل پیدا کرد اون رو در رویداد کلیک دکمه ای نوشتم پاکش کردم ولی باز وقتی برنامه رو اجرا میکنم همون کار قبلی رو انجام میده انگار من اصلا پاکش نکردم!

    علتش چیه و من چطور میتونم همچنین مشکلاتی رو بفهمم و حلشون کنم؟

    متشکرم از شما

    با سلام

    از این دست مشکلات زیاد پیش میاد در حدی که بعد مدتی بدون فکر کردن وقتی مشکل براتون پیش میاد خودکار یک سری کار انجام میدید تا حلش کنید.

    ولی این دست مشکلات در برخی مواقع لایه به لایه هستند مثلا یک کار کوچیک در حد qmake میتونه مشکل اضافه کردن فایل جدید رو حل بکنه اما بعضی وقتها که تغییرات توی پروژه زیاده نیاز هست اول clean کنید پروژه رو اما بعضی وقتا این روش هم جواب نمیده مخصوصا وقتی یک فایل ui که مال مدتها پیش هست رو تغییر میدی مثلا یک ویجت پرموت شده به یک کلاس دیگه بعد این پرموت رو تغییر میدید در برخی مواقع نه با clean کردن حل میشه نه به با کیو میک نه حتی با rebuild باید فایل ui که توسط کیوت برای فرم ساخته شده رو پاک کنید مثلا برای MainWindow یک فایل با اسم ui_MainWindow درست میکنه که باید اون رو پاک کنید.

    هرکدوم از این موارد مدتها وقت قبلا ازم گرفته تا رفع شدند ولی شما حواستون باشه به همچین مشکلاتی خوردید راه حل‌های اینطوری داره و نیاز هم نیست همه رو انجام بدید مرحله به مرحله انجام بدید تا جایی که مشکلتون حل بشه چون مثلا qmake توی پروژه بزرگ زمان خیلی کمتری نسبت به clean کردن و دوباره بیلد کردن میگیره.

    موفق باشید.


  9. با سلام

    کتابخانه‌های زیادی برای کار با فایل‌های فشرده وجود داره و داکیومنت هم دارند میتونید بینشون جستجو کنید ببینید کدوم راه حل مشکل شما رو داره من یه نگاهی کلی کردم یه چیزایی دارند.

    این مثال هم اوپن سورس هست میتونید ببینید با کیوت هم نوشته شده :

    GitHub - tsujan/Arqiver: Simple Qt archive manager based on libarchive,...

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

    موفق باشید.

    • پسندیدن 1

  10. در 18 دقیقه قبل، mahan گفته است :

    من توی برنامه از plugin استفاده کردم باید اونم کمپایل بشه؟

    ننیدونم منظورتون از پلاگین دقیقا چی هست ولی برای این که برنامه کار بکنه باید پیشنیازهاش کنارش باشه مثل dll های کتابخانه های استفاده شده در برنامه یا مثلا فایل‌های مورد نیاز برای پلاگین‌ها و درایورهای مورد نیاز شما اگر چیزی اضافه کردید طبق مستنداتش عمل کنید تا مشکل برطرف بشه اگر هم مستنداتی ازش در دسترس نیست از مستندات کتابخانه‌های مشابه استفاده کنید.


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

    مهندس دیپلوی چیه من دقیقا طبق همون توضیحات انجام دادم و کمپایل شده ولی باز نمیشه؟

    اگر طبق اون پست عمل کرده باشی پیش نیاز ها و dllهای کیوت کنار برنامه ریخته شده و نیاز هست که اگر از کتابخانه حانبی دیگه‌ای هم استفاده کردید dll و موارد مورد نیاز دیگش رو ‌برای برنامه فراهم کنید.


  12. با سلام

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


     

    QByteArray data = {"test values are good"};
    qDebug() << data;
    
    int bufSize = 3;
    int dataSize = data.size();
    dataSize = dataSize % bufSize ? dataSize / 3 + 1 : dataSize / 3;
    
    for (int i = 0; i < dataSize; ++i)
    {
    	qDebug() << data.mid(i * bufSize, bufSize);
    }

     

    • پسندیدن 1

  13. در 4 ساعت قبل، mousa1994 گفته است :

    خیلی ممنون از پاسخ هاتون، کاری که من میخوام بکنم این که یه دیالوگ قبل از ورود به برنامه بذارم تا کاربرهای مجاز بتونند از برنامه استفاده کنند حالا من یه لیست 10 عضوی تعریف کردم که عضو صفرم که برای Admin هستش مقدار اولیه دادم و بقیه اعضا توی برنامه توسط ادمین به لیست اضافه میشن یا از لیست کم میشن. نمیخوام از فایل استفاده که حداقل بصورت متنی که قابل مشاهده باشه. بنظر شما باید چیکار کنم کاری که انجام دادم درسته یا راه بهتری سراغ دارین برای انجام اینکار. 

    با سلام

    چیزی که شما نیاز دارید ذخیره اطلاعات هست حالا روش های متفاوتی هست که پیشنهاد من دیتابیس هست و میتونید از پلاگین کیوت برای اس کیو ال استفاده کنید و برای این که به صورت عادی باز نشه هم میتونید از Qt SQL driver plugin for SQLCipher استفاده کنید برای رمز نگاری دیتابیستون.

    موفق باشید.


  14. در 2 ساعت قبل، نیما غراب گفته است :

    سلام به همه دوستان گرامی.

    من در آموزش های Qt دیدم که وقتی مدرس، فایل .pro پروژه رو تغییر میده، QMake به شکل خودکار اجرا میشه تا متناسب با تغییرات انجام شده Makefile جدید رو به روزرسانی کنه.

    اما من در Qt هر بار که فایل .pro رو تغییر میدم نیازه تا دوباره به شکل دستی روی نام پروژه راست کلیک و سپس run qmake رو انتخاب کنم.

    این آموزش ها البته قدیمین ولی من در نسخه های جدید Qt Creator چیزی مبنی بر اجرای خودکار QMake پیدا نکردم.

    حالا چه طوری میشه QMake به شکل خودکار پس از هر بار تغییر فایل .pro به اجرا شه؟

    سپاس گزارم.

    با سلام

    پیشفرض وقتی شما تغییر میدید موقع ذخیره کردن خودش ران میکنه کیو میک رو تنظیم خاصی یادم نمیاد براش انجام داده باشم.

    مطمئنید بعد از ذخیره کردن کیومیک ران نمیشه ؟

    • تشکر شده 1

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

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

    یک کتابخانه نیست اینی که من دادم لینک بهترین کتابخانه‌های سی پلاس پلاس هست توی زمینه های مختلف شما کدوم رو میخواید ؟ جستجو کنید آموزشش رو بعید میدونم مثلا توی لیندا یا یودمی پیدا کنید ولی توی یو تیوب برای هر کتابخانه احتمالش خیلی زیاده که ویدئو پیدا بشه از دوستان هندی یا چینی .


  16. در 54 دقیقه قبل، فانوس گفته است :

    دیتا من چجوری باید تبدیل شه. کلا من اینو از پایه متوجه نشدم

    خب پس مشکل چیز دیگست کلا مشکلی با کتابخانه نداری دیتا رو متوجه نشدی باید چکارش کنی.

    شاید یکم طولانی باشه بحثش ولی سعی میکنم یجوری توضیح بدم متوجه بشید.

    این حقیقت وجود داره که شما میخواید از دیتا استفاده کنید و صرفا نمیخواید ردش کنید بره پس مثلا به ازای هر مقدار عددی یه کامپوننت نمایشی برای نمایشش نیاز دارید. و این رو باید در زمان نوشتن برنامه مشخص کنید. پس در حالت عادی قضیه اونقدار هم داینامیک نیست و شما می‌دونید مثلا توی لیست قراره چه داده هایی نمایش داده بشه فرض کنید یه کاربر دارید که نام و نام خانوادگی و آدرس ایمیل و شماره موبایل داره از بین ان موارد ممکنه تعدادیشون بیش از یک مقدار داشته باشند یا اصلا ممکنه اپشنال باشند ولی کلیت مشخصه پس با روند عادی که توی پست http://doc.qt.io/qt-5/qtquick-modelviewsdata-cppmodels.html گفته شده قابل انجام هست. اما وقتی شما میخواید فول داینامیک باشه یعنی ساختارهای داده پیچیده و تودرتو و کاملا داینامیک داشته باشید طوری که حتی ممکنه خود کاربر مواردی رو اضافه کنه مثلا فرض کنیم بخواد یه بخش برای حیوانات خانگیش اضافه کنه و توی اون دسته بندی بذاره و ... قضیه یکم فرق می‌کنه اما اونم راه حل داره که راهش اینه مثلا هر بخشی که میشه دیتا توش وارد کرد رو نوعش رو از کاربر بگیرید و بر اساس اون مثلا لیبل یا اسپین باکس یا ... نمایش بدید اما مشکل شما چند قدم عقب تر هست یعنی توی آماده سازی و ارسال دیتا به کیو ام ال مشکل دارید که گفتم اگر دیتا ساختار داره یا میتونید ساختار براش در نظر بگیرید که چه بهتر اگر هم ساختار نداره که روش جیسان کردن جواب میده اما این که چطور دیتا رو به جیسان تبدیل کنید می‌تونید دستی این کار رو انجام بدید که البته چندان هم داینامیک نیست یا می‌تونید یه کتابخانه برای تبدیل این کار پیدا کنید که بیاد تبدیل رو براتون انجام بده ولی اینو در نظر داشته باشید که اگر دارید همچین کاری می‌کنید شاید بهتر باشه از دیتابیس‌های NoSQL یا کلا جیسان بیس استفاده کنید. اما اجازه بدید یکم جزئی تر توی مسئله وارد بشم.

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

     

    در ۱ ساعت قبل، فانوس گفته است :

    چرا QML این مبحث دیتا رو پیچیده کرده.

    حقیقتش فکر می‌کنم توی خود کیو ام ال یه ساده ترین حالت ممکن این قضیه هندل شده یعنی وقتی دیتا از یکی از کانال های تعریف شده به کیو ام ال برسه خیلی کار باهاش سادست مثلا وقتی JSON یا XML از طریق شبکه به برنامه ارسال می‌شود ولی الان مشکل شما ایجاد اون کانال ارتباطی هست شاید تا حدودی که خود کیوت توضیح داده برای هر استفاده چطور این کار رو بکنیم ولی به گفته شما شاید یک راه ساده یا یک ساختار مدل داده قابل ارسال به کیو ام ال اگر تعریف می‌کرد که خودش این قضیه رو هندل می‌کرد خیلی می‌تونست ساده تر باشه این قضیه هم ولی تا جایی که من می‌دونم توضیحات داده برای هربار ولی خودش یک کلاس جامع و داینامیک درست نکرده شاید دلایل خودش رو داره یا شایدم خودش درست کرده من خبر ندارم ?

    موفق باشید.

    • تشکر شده 1
×
×
  • جدید...