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

بهنام صباغی

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

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

  • روز های برد

    27

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

  1. بهنام صباغی

    با سلام خب همونطور که فرمودید آموزش در سطح اینترنت هست و میشه باهاشون یاد گرفت. الان شما بفرمایید دقیقا چه کاری می‌خواید با QThread و GUI انجام بدید تا در مورد مشکلتون توی اون مورد خاص راهنمایی کنیم.
  2. بهنام صباغی

    در این پست قصد دارم به توضیح کد بخش VTK در مثال استفاده از VTK با Qt در گیتهاب بپردازم. از فایل VTKmain.h شروع میکنم : #include "qobject.h" #include "vtkCubeSource.h" #include "vtkOrientationMarkerWidget.h" #include <QVTKWidget.h> #include <vtkActor.h> #include <vtkAxesActor.h> #include <vtkDataSetSurfaceFilter.h> #include <vtkIdFilter.h> #include <vtkOBJReader.h> #include <vtkPLYReader.h> #include <vtkPolyDataMapper.h> #include <vtkProperty.h> #include <vtkRenderWindow.h> #include <vtkRenderer.h> #include <vtkSmartPointer.h> #include <vtkSphereSource.h> در بخش بالا کتابخانه های مورد نیاز در پروژه اینکلود شدند . یک سری از این کتابخانه‌ها مثل #include "qobject.h" کتابخانه‌های کیوت هستند. و یک سری کتابخانه‌ها که در اسم آن‌ها VTK به چشم می‌خورد کتابخانه‌های VTK هستند. برای اطلاعت بیشتر از هرکدام از این کتابخانه‌ها می‌توانید نام آن را جستجو کنید و به داکیومنت VTK برای آن کتابخانه و همچنین سورس آن کتابخانه دست یابید. بخش دوم کد : class VTKmain : public QVTKWidget { public: VTKmain(QWidget *parent = nullptr); ~VTKmain(); // vtk renderer vtkSmartPointer<vtkRenderer> renderer; vtkSmartPointer<vtkPolyDataMapper> mapper; vtkSmartPointer<vtkActor> actor; public slots: }; در این بخش یک کلاس به اسم VTKmain ساخته شده است و از QVTKWidget به ارث برده که یک کتابخانه توسعه داده شده توسط توسعه‌دهندگان VTK برای تعبیه کردن صفحه سه بعدی VTK در رابط کاربری گرافیکی Qt است. درون کلاس هم سه تعریف داریم که در فایل سورس بیشتر در مورد آنها توضیح خواهم داد. توضیحات فایل VTKmain.cpp : همانطور که مشاهده می کنید در این مثال ساده فقط در تابع سازنده کد نوشته شده است : VTKmain::VTKmain(QWidget *parent) : QVTKWidget(parent) در دو خط زیر پنجره را به اندازه مورد نظر ریسایز می‌کنیم و حداقل سایز پنجره را مشخص می‌کنیم : resize(1920, 1000); setMinimumSize(400, 200); در خط زیر با استفاده از vtkSmartPointer یک نمونه از vtkRenderer میسازیم و در اشاره‌گر هوشمند VTK که با اسم renderer در هدر تعریف کردیم میریزیم این روند کلی ایجاد یک شی با استفاده از اسمارت پوینتر VTK است و برای بقیه کلاس‌ها هم به همین منوال عمل می‌کنیم : renderer = vtkSmartPointer<vtkRenderer>::New(); در خط 19 رنگ پس‌زمینه را تنظیم می‌کنیم مقادیر ورودی این تابع بین 0 و 1 هستند و نشانگر استاندارد رنگی قرمز-سبز-آبی است : renderer->SetBackground(0, 0, 0); در خط 20 پنجره رندر از کلاس (به ارث برده شده از QVTKWidget ) را می‌گیریم و رندرر را به آن اضافه میکنیم : GetRenderWindow()->AddRenderer(renderer); در خط 22 و 23 یک مکعب ایجاد می‌کنیم : vtkSmartPointer<vtkCubeSource> cube = vtkSmartPointer<vtkCubeSource>::New(); در خط 26 یک نمونه برای mapper ایحاد می‌کنیم : mapper = vtkSmartPointer<vtkPolyDataMapper>::New(); در خط 27 پورت خروجی مکعب را به اتصال ورودی mapper می‌دهیم : mapper->SetInputConnection(cube->GetOutputPort()); در خطوط 29 تا 32 یک اکتور ایجاد کرده و mapper را که در بالا ساختیم برای ان تنظیم می‌کنیم و اندازه‌ی نقاط را برای ان تنظیم می‌کنیم و در خط 32 رنگ آن را تنظیم می‌کنیم : actor = vtkSmartPointer<vtkActor>::New(); actor->SetMapper(mapper); actor->GetProperty()->SetPointSize(1000); actor->GetProperty()->SetColor(1, 1, 0); //(R,G,B) در خط 33 این اکتور را به رندرر اضافه می‌کنیم : renderer->AddActor(actor); در خطوط 35 و 36 یک نمونه از axes برای نمایش جهت در کنار صفحه به صورت سه بعدی ایجاد می‌کنیم : vtkSmartPointer<vtkAxesActor> axes = vtkSmartPointer<vtkAxesActor>::New(); در خطوط 38 و 39 یک ویوپورت برای نمایش این جهت‌نما درست می‌کنیم چون نمیخواهیم با جابجایی سه بعدی صحنه این جهت‌نما از گوشه پنجره نکان بخورد و حرکت انتقالی در سه بعد داشته باشد: vtkSmartPointer<vtkOrientationMarkerWidget> axesViewPort = vtkOrientationMarkerWidget::New(); در خطوط 41 تا 46 به ترتیب رنگ دور ویوپورت ، اکتور جهت نمایش ، اینتراکتور رندر ویندو ، اندازه و مکان دو بعدی ویو پورت در صفحه ( بین پراپرتی‌ها بین 0 و 1 هستند ) ، فعال بودن و تعاملی بودن را تنظیم می‌کنیم که این گزینه آخر در صورت فعال بودن این امکان را به کاربر می‌دهد که با موس ویوپورت ساخته شده را جابجا کند : axesViewPort->SetOutlineColor(0.9300, 0.5700, 0.1300); axesViewPort->SetOrientationMarker(axes); axesViewPort->SetInteractor(GetRenderWindow()->GetInteractor()); axesViewPort->SetViewport(0.9, 0.0, 1.0, 0.1); axesViewPort->SetEnabled(1); axesViewPort->InteractiveOff(); در خط 48 مکان دوربین فعال را تنظیم می‌کنیم : renderer->GetActiveCamera()->SetPosition(1000, 2500, 1000); در خط 49 تابع رندر از رندرر را صدا زده : renderer->GetActiveCamera()->SetPosition(1000, 2500, 1000); و در خط 50 تابع ریست دوربین رندرر را صدا میزنیم تا تغییراتی که انجام دادیم قابل مشاهده شوند : renderer->ResetCamera();
  3. بهنام صباغی

    کتابخانه VTK یک کتابخانه مجسم سازی سه بعدی اطلاعات و پردازش تصویر است. این شامل یک کتابخانه کلاس C++ و چندین لایه رابط تفسیری از جمله Tcl / Tk، Java و Python است. VTK یک کتابخانه کراس پلتفرم است که از سیستم‌عامل‌های لینوکس ، یونیکس ، مک و ویندوز پشتیبانی می‌کند. این ابزار پشتیبانی از پردازش موازی و ادغام با پایگاه های داده های مختلف در ابزارهای GUI مانند Qt و Tk را داراست. در سایت رسمی این کتابخانه به آدرس VTK - The Visualization Toolkit می‌توانید منابع آموزشی متعددی برای یادگیری این کتابخانه پیدا کنید. برای استفاده از این کتابخانه نیاز به کامپایل سورس این کتابخانه داریم . برای دریافت سورس میتوانید از صفحه دانلود سایت رسمی VTK استفاده کنید. بعد از دریافت این کتابخانه میتوانید با توجه به سیستم‌عامل خود از صفحه wiki سایت رسمی VTK برای تنظیم و کامپایل این کتابخانه استفاده کنید. دقت نمایید اگر نیاز دارید که از فریمورک Qt در برنامه خود استفاده کنید و صفحات گرافیکی VTK را در پنجره‌های Qt نمایش دهید باید به این مرحله پیکربندی با Cmake که مرتبط به کیوت 5 می‌باشد دقت کنید. بعد از کامپال و نصب کتابخانه میتوانید پروژه مثال استفاده از VTK و Qt در گیتهاب را اجرا کرده و صحیح بودن پیکربندی و ساخت کتابخانه را آزمایش کنید. برای یادگیری این کتابخانه میتوانید از کتاب یا ویدئو های موجود استفاده کنید ولی روش شخصی بنده برای یادگیری و استفاده از این کتابخانه در پروژه مشاهده و تحلیل مثال‌های کتابخانه VTK بود. این مثال ها جزء به جزء برای هر قابلیت پیاده سازی شده‌اند. در قسمت بعد روند کلی کارکرد این کتابخانه از روی سورس مثال معرفی شده از گیتهاب را برای شما عزیزان شرح می‌دهم.
  4. این جزوه طراحی تحلیل سیستم ها که دم دستم بود البته دارم توی یک مجموعه پست هم دسته بندی میکنم و سعی میکنم یک مقداری با توضیحات خودم واضح ترش کنم و منتشر کنم اینم اولین قسمتشه این هم لینک دانلود جزوه : Systems-Design-and-Analysis.pdf
  5. خب پاسخ این این سوال خیلی راحت نیست یعنی توضیحات زیادی رو باید بدم و باید موارد زیادی رو در نظر بگیری . اول این رو بگم که این توی حوزه مهندسی نرم افزار هست و اگر دنبال جواب هستی سعی کن جزوه طراحی تحلیل سیستم ها و همینطور مهندسی نرم افزار رو گیر بیاری بخونی البته منم دوتا جزوه خوب دارم از این دوتا که سعی میکنم توی چندین پست مطالبشون رو یکم دسته بندی کنم و بذارم ولی بذار برای جواب بهت از سوالات ساده ترت شروع کنم . بله قطعا همینطور هست یعنی اگر شما پیاده سازی درست یا حتی طراحی درستی از سیستم نداشته باشید قطعا توی توسعش به مشکل میخورید و ممکنه باعث شکست پروژه بشه به احتمال زیاد . خب باید بگم این قطعی نیست و کاملا بستگی به نوع پروژه داره مثلا اگر پروژه یک برنامه ساده دسکتاپ باشه بعد از توسعش و رفع باگ اگر نخواید قابلیت جدید اضافه کنید نیازی نیست خیلی نگران هزینه نگه داری باشید . از طرفی اگر مثلا یک برنامه علمی سنگین رو دارید برای یه حوزه علمی توسعه میدید که خود اون حوزه داره پیشرفت میکنه قطعا هزینه نگهداری سنگین خواهد بود برای مثال فرض کنید شما دارید یک برنامه بر پایه هوش مصنوعی برای پوشش تصویری یک منطقه با توجه به پستی و باندی و نقاط کور برای یک ارگان نظامی توسعه میدید قطعا هزینه نگهداری این برنامه بسیار بالا خواهد بود چون هم حساسیت بالایی داره هم نیاز هست مدام ارتقاع داده بشه . این طبق همون اصول مهندسی نرم افزار هست توی طراحی توی کد زنی فقط یک سری موارد اضافه میشه که میشه از اونها به موارد زیر اشاره کرد داکیومنت کردن درست پروژه نام گذاری درست استفاده از کتابخانه‌های معتبر و فعال در کد به حد اقل رساندن چسبندگی در کد استفاده از روش‌های بهینه و قابل اثبات از نظر ریاضی برای حل مسائل (البته بجر مواردی که با هوش مصنوعی حل می‌شوند مانند مواردی که از الگوریتم ژنتیک استفاده شده و ...) توجه به الگو‌های طراحی در کد ... این مورد رو دقیقا متوجه نمیشم منظورتون چی هست اگر توی بحث الگوریتم منظورتون هست که هرکجا روش خودش رو می‌طلبه این سوال هم خیلی کلی هست نمیشه جواب درستی بهش داد ولی اون دوتا جزوه ای که گفتم رو بگرد پیدا کن هست توی نت قطعا به جواب‌هایی که می‌خوای می‌رسی من هم سعی میکنم توی وقت آزادم موارد این چنینی رو پوشش بدم به عنوان مقاله توی سایت .
  6. بهنام صباغی

    با سلامی دوباره خب توی پروژه ای که سرچ میشه کلاس FilterProxyModel تعریف کرده که از QSortFilterProxyModel به ارث میبره و بعد عمل جستجو رو با اون انجام داده توی فایل mymodel هست یه نگاه بنداز . باید همون رو برای این یکی پروژه هم تعریف کنی تا بتونی سرچ انجام بدی
  7. بهنام صباغی

    سلام درست متوجه نشدم یعنی چی این قسمت ؟ « تنها چیزی که من تونستم پیدا کنم تابع finditems بود ولی توی مستندات کیوت نتونستم پارامترهای ورودی رو برای کلاسم تعریف کنم» الان مشکل اینه که پارامتر های ورودی برای این تابع رو نداری ؟ یا توی مستندات بهش درست اشاره نشده ؟ یا میخوای به کانستراکتور کلاس ورودی بدی و مشکل داری ؟
  8. بهنام صباغی

    سلام خب برای دوره مقدماتی من یک دوره رو آماده کردم قبلا که می‌تونید از لینک زیر به سرفصل ها و لینک ویدئو های آموزشی به صورت رایگان دسترسی داشته باشید. اینک دوره آموزش مقدماتی Qt Qml ویدئویی و رایگان ولی اگر دنبال یک آموزش منسجم و کامل میگردید باید هزینه کنید و کتاب آموزش پیشرفته ++C همراه Qt (پیشرفته) نسخهٔ رو تهیه کنید که از صفر شروع کرده و تا حد پیشرفته پیش رفته و به نظر من کتاب پر محتوای هست برای دوستانی که میتونند با آموزش مستند محور یاد بگیرند.
  9. بهنام صباغی

    این کتاب برای شروع برنامه نویسی با کیوت بسیار مناسب هست حتی برای دوستانی که تا حد خیلی حرفه ای سی پلاس پلاس رو بلد نیستند و میخواند نیم نگاهی به کیوت داشته باشند عالیه چون مسائل رو از صفر و از ساختن پروژه شروع کرده . موضوعات رو هم نسبتا خوب شروع کرده میتونه سرنخی باشه برای شروع کار با کیوت .
  10. بهنام صباغی

    خب پس خدا رو شکر مشکل حل شد
  11. بهنام صباغی

    خب بذار کامل توضیح بدم . ببین اول اومده دوتا لینک داده لینک اول : https://doc.qt.io/qt-5/qabstractlistmodel.html لینک دوم : https://doc.qt.io/qt-5/qsortfilterproxymodel.html که توی یکیشون ابسترکت مدل هست توی یکیشون فیلتر بعد اومده توی کد پایتونش یه مدل ساخته در واقع یک کلاس مدل ساخته و ایتم ها رو ریخته توش بعد اومده از مدلش شی ساخته بعد پروکسی مدل رو فرستاده به کیو ام ال و از اون استفاده کرده کدش واضح هست نیازم نیست پایتون بلد باشی تا متوجه بشی
  12. بهنام صباغی

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

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

    من نه اون مثال رو ران کردم که خودم فرستادم نه مثال شما رو فقط چیزی که توی یک نگاه سطحی توی مثالی که خودم فرستادم به چشمم خورد داره از تابع setFilterFixedString از مدل استفاده میکنه و ورودی تکستی رو میده که میخواد سرچ بشه . شما این رو تست کردید جواب نداد ؟ اگر نداد چه اروری داد ؟ اصلا همیچن تابعی داشت ؟ دقت کنید به کدی که فرستادم داره توی تکست چنج این رو اعمال میکنه ها شما اعمال کردید ؟
  15. بهنام صباغی

    این مثال با پای کیوت هست ولی سخت نیست تبدیلش به نمونه سی پلاس پلاسش میتونی از روی همین یه مثال سی پلاس پلاس برای خودت بنویسی و کارت رو راه بندازی مثال سرچ در لیست ویو کیو ام ال
  16. بهنام صباغی

    منظورت مشخصه و رسیده منم جواب رو دادم نمیدونم چرا متوجه نشدی هنوز . ببین خیلی ساده گفتم رکت‌انگل رو بذار توی ایتم تازه برای ایتم و تکست و رکت‌انگل هم طول مشخص کن هم عرض
  17. بهنام صباغی

    گفتم که یه ایتم به اندازه ای که میخوای بساز رکت انگل رو بذار توی ایتم و فیلش کن که کل ایتم رو بگیره راه های دیگه هم هست . ولی شما از همین راه برو منم اینو از همین راه ساختم
  18. بهنام صباغی

    من هر چیزی رو که نیاز داشتی گفتم حالا خودت باید دست به کار بشی . من با همینی که بهت گفتم خودم دست به طراحی شدم چطور شده ؟ لینک عکس مثال من در کنار عکسی که فرستادی با QML البته خیلی حسش نبود وقت بذارم وگرنه آیکون قلب و تلفن هم خیلی زمان نمیبره
  19. بهنام صباغی

    خب مشکلت رو مشخص کن اولش اندازه هات مشخصه ؟ یعنی اندازه های رکت انگل رو درست کردی ؟ سعی کن پرنتش رو بذاری ایتم چون رکت انگل ایتم بیس نیست اصلا اندازش در نظر گرفته نمیشه توی انتینتر ها فکر میکنم یعنی ایتم بذار اندازش رو تنظیم کن بعد رکت‌انگلت رو فیل کن توش
  20. بهنام صباغی

    خب مشکلش چیه ؟ مگه اون یکی که تعریف کردید توی یک فایل جدا نیست ؟ خب اینجا ازش نمونه بسازید دیگه
  21. بهنام صباغی

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

    با سلام توی این لینک توضیحات کاملی در این باره داده شده و با مثال قدم به قدم پیش رفته و یک پروژه مثال هم معرفی کرده . فکر میکنم همین چیزی هست که شما لازم دارید . http://doc.qt.io/qt-5/qtqml-javascript-dynamicobjectcreation.html
  23. بهنام صباغی

    با سلام دوستان میخواستم بدونم کسی اطلاعاتی در مورد نحوه ارتباطات ماهواره ای داره ؟ یعنی میخوام بدونم چطور با ماهواره و یا مثلا موشک در حال حرکت ارتباط برقرار میکنند میخوام یکم بیشتر درمورد این ارتباطات فضایی بدونم ولی وقتی سرچ میکنم چیزای نا مرتبط میاد میشه اگر کسی اطلاعاتی داره در اختیارم قرار بده یا یک سری کلید واژه بده که بتونم برم دنبالش ؟
  24. علیک سلام توی کیو ام ال شما میتونید به اندازه صفحه دیوایسی که برنامه در حال اجرا روی اون هست رو بگیرید و از اون برای تنظیم نسبت ابعاد تصویری که مد نظرتون هست استفاده کنید اگر هم دنبال یک نسبت پذیرفته شده برای اون عکس نسبت به صفحه میگردید میتونید از سایت UPLABS Daily Showcase - Uplabs برای این منظور کمک بگیرید . موفق باشید .
×
×
  • جدید...