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

تمامی فعالیت ها

این جریان به طور خودکار بروزرسانی می شود     

  1. امروز
  2. دیروز
  3. Heydar Mahmoodi

    وقت همگی بخیر بنده میخواستم بدونم آیا راهی هست که زیر یک surface3d که فقط seri داره رو پر کنم درواقع میخوام زیرش رو طرف با زوم کردن نره زیر surface رو ببینه و مشکی باشه. اگر این نمودار بنده باشه(که البته نیست فقط برای نشون دادن مشکلم عرض میکنم. لینک تصویر میخوام که زیرش مشکی شه و فقط سطح دیده شه تنها راهی که در ذهنم دارم که اصلا جالب نیست اینه که خودم یه سری دیتا دیگه درست کنم و مقادیرش با دیتای اصلی یکی باشه جز کناره هاش که کمترین مقدار surface باشه تا کناره ها رو مشکی کنه که فک میکنم مشکلات زیر رو داره: ۱- هردفعه پردازش اضافی با اپدیت مقادیر میشه و دوباره یه سری دیگه ساخته میشه که سرعت رو میاره پایین ۲- یکم هم مشکل هست ساخت دیتای اضافی اینطوری راه حلی دارید دوستان؟
  4. هفته گذشته
  5. جدیدا
  6. کامبیز اسدزاده

    سریع‌ترین فریم‌ورک‌های وب!

    در این مقاله من قصد دارم به معرفی ده فریم‌ورک برتر جهان در بازهٔ سال‌های ۲۰۱۹ و ۲۰۲۰ اشاره کنم که در حوزهٔ صنعت وب کاربرد دارند. معمولاً در سایت‌ها، وبلاگ‌ها و گروه‌های تلگرامی حرف از فریم‌ورک‌های شناخته شده‌ای مانند Asp.net core و یا Laravel به گوش می‌رسد. اما واقعیت این است که فریم‌ورک‌هایی که در مورد آن‌ها بحث می‌شود جایگاه خاصی در بین فریم‌ورک‌های قدرتمند و به عنوانی ناشناخته مانند Drogon، h2o، ulib و غیره ندارند! جالب است بدانید فریم‌ورک‌هایی که در ادامه نام‌هایشان را می‌شنوید به قدری سریع و قدرتمند هستند که مو بر تنِ شما سیخ خواهد کرد! برای مثال در این مقایسه جایگاه فریم‌ورک‌های دات‌نت به بالاتر از ۵۰ و لاراول به بیشتر از ۲۰۰ رتبه می‌رسد! این در حالی است که بر خلاف انتظارِ عام، فریم‌ورک‌های تحت سی/سی++ و راست به عنوان سریع‌ترین فریم‌ورک‌ها شناخته می‌شوند. در واقع مقایسه بر اساس نتایج گرفته شده از مرجع Techempower می‌باشد که هر ساله یک مقایسه در رابطه با کارآیی و کیفیت فریم‌ورک‌های وب می‌پردازد. سنجشِ فوق بر اساس وظایفی مانند سریال‌سازی جی‌سان، دسترسی به پایگاه داده و عملیات سمت سرور، پردازش و غیره می‌باشد. در این آزمایش‌ها عملکرد فریم‌ورک بر روی سیستم‌عامل، به صورت فول‌اِستک و میکرو اندازه‌گیری شده است که هر کدام را در رتبهٔ خاصی از وضعیت آن سوق می‌دهد. بهترین فریم‌ورک‌ها از نظر بنچ‌مارک (کارآیی) در سال ۲۰۱۹ در دورِ ۱۸ بین ۲۲۰ فریم‌ورک متعلق به h2o و ulib بوده است. کتابخانهٔ h2o یکی از قوی‌ترین مواردی است که می‌توان به آن اشاره کرد. در سال ۲۰۲۰ این رتبه‌بندی به نفعِ فریم‌ورک جدید‌تری به نام دراگون (Drogon) و مجدداً ulib جمع بندی شده است که نشان می‌دهد فریم‌ورک ulib به عنوان یکی از برترین فریم‌ورک‌های نوشته شده تحت سی و سی++ و همچنین دراگون تحت استاندارد‌های ۱۴ و ۱۷ زبان برنامه‌نویسی سی‌پلاس‌پلاس معرفی شده است. بنابرین بهتر است در مورد دراگون بیشتر بدانیم: این فریم‌ورک تحت زبان برنامه‌نویسی ++C در استاندارد ۱۴ و ۱۷ توسعه یافته و بر روی سکو‌های لینوکس، مک و ویندوز قابل اجراست. دراگون تحت ویژگی non-blocking I/O کار می‌کند و سرعت را همراه با دقت بسیار بالایی به خصوص بر روی پلتفرم‌های FreeBSD تضمین می‌کند. لینک مخزن توسعه و کد‌های دراگون. مثال از کد اولیه: #include <drogon/drogon.h> using namespace drogon; int main() { app().setLogPath("./") .setLogLevel(trantor::Logger::kWarn) .addListener("0.0.0.0", 80) .setThreadNum(16) .enableRunAsDaemon() .run(); } با توجه به مقایسه‌های صورت گرفته در آزمایش‌های مختلف زیر رتبه‌بندی فریم‌ورک‌ها مشخص می‌شود. آزمایش‌های فوق بر روی پردازندهٔ Dell R440 Xeon Gold صورت گرفته است که در این لینک آمده است. JSON serialization Single query Multiple queries Fortunes Data updates Plaintext آزمایش‌های مربوطه تنها به ۱۰ مورد اول اشاره کرده است، بنابراین برای مشاهدهٔ لیست بیشتر و جزئیات آن‌ها به مرجع آن مراجعه کنید.
  7. mehdi314

    مطلب خوب و با ارزشی بود مباحث معماری را بصورت پراکنده هم که شده ادامه بدید خیلی با ارزشه. خصوصا اگر بشه مثل ddd مسیری رو برای حل چالش ها ارایه بدید. در هر صورت از اینکه می نویسید کار بسیار با ارزشیه. موفق باشید
  8. محبوبیت روزافزون تجربه‌ کاربری به عنوان یک حرفه لزوماً به معنای این نیست که همه چیز برای تیم‌های تجربه‌‌ کاربری در گروه‌های توسعه‌ٔ شرکتی امیدوارکننده است. هنوز هم تمایلی به فرض وجود دارد که «طراحی» تنها بخشی از نقش تجربه کاربری است که دارای اهمیت است. این فرض اغلب منجر به تشکیل تیم‌هایی می‌شود که نمی‌توانند وظایف خود را به طور مؤثر در قبال سازمان انجام دهند. برای ارائهٔ مزایای سازمانی (و در نتیجه بازگشت سرمایه، Return of Investment) تیم به مجموعه‌ای از مهارت‌های فراتر از طراحی ساده با تسلط بالا نیاز دارد. به طور خاص، ۸ مهارت کلیدی وجود دارد که تیم‌های تجربه‌ کاربری را در دنیای شرکتی و تجاری قادر به شکوفایی می کند: تحقیقات کاربر و نمایه‌ی کاربر تحقیقات کاربر به وضوح مورد مهمی است، بدون آن نمی‌توانید بفهمید که کاربران شما چه می‌خواهند. محیط کسب‌ و کار باید با درک قوی از روان‌شناسی کسب و کار و یا روان‌شناسی صنعتی پشتیبانی شود. شما می‌خواهید که بتوانید به طور قطع به ذهن کاربر خود راه یابید و انگیزه‌های آن‌ها را در عمیق‌ترین سطوح درک کنید. هرچه بیشتر بتوانید این کار را انجام دهید، پیشبرد پروژه‌هایی که نیازهای کاربر را برآورده می‌کنند برایتان راحت‌تر خواهد بود. توسعه‌ی این قابلیت، توانایی ارائه‌ٔ مشخصات دقیق کاربر به کسب وکار را فراهم می‌کند. هرچه یک شرکت بزرگ‌تر باشد، طرفداری متعصبانه تکیه‌گاه محکمی برای رساندن پیام شما به هدف نخواهد بود. پروفایل‌های کاربر را می‌توان در تمام مکان‌های مربوطه نمایش داد و اطمینان حاصل کرد که کل تیم با هم به خوبی کار می‌کنند. طراحی تعاملی طراحی تعاملی همان «طراحی» است، اما نه به گونه‌ای که بسیاری از متخصصان غیر حرفه‌ای تجربه کاربری تصور می‌کنند. نحوه‌ی تعامل کاربرانتان با محصول شما اغلب یک نقطه‌ٔ فروش مهم برای محصولات شما است. طراح تعاملی همچنین باید بتواند در ایجاد موارد کاربرد به تیم کمک کند و بتواند با بقیه‌ٔ اعضای تیم همکاری کند تا این موارد کاربرد را به ابزارهای ارزشمندی تبدیل کند که نکات مهمی از ساختار معماری اطلاعات و عناصر رابط کاربری را در اختیار ما قرار میدهد. خلاصه تجربه کاربری برای توسعه‌ٔ محصول ضرورت است، البته تنها زمانی که به طور کامل انجام شود. اگر می‌خواهید از یک سرمایه‌گذاری در یک تیم تجربه کابری بهترین بازده را کسب کنید، شما بیش از طراحی تجربه کاربری به عنوان تمرکز خود نیاز دارید. ۸ رشته‌ی فوق با طراحی تجربه کاربری ترکیب می‌شوند تا تجربیات بهتری را برای کاربر رقم بزنند. در آینده هر یک از این ۸ مورد را در پست‌های جداگانه‌ای بررسی خواهیم کرد.
  9. axarbani

    کدام میزبانی وب مناسب است؟

    همان طور که میدانیدسرعت لود سایت در سئو خیلی خیلی کمک میکند و باعث میشه سایت شما از نظر گوگل امتیاز بالاتری بگیرد شرکت هایی که درزمینه وب و وی پی اس و.. در ایران فعالیت میکنن با تبلیغات وسیع مثل( این خدمات ما ssdدارد و لود بالایی دارد )مارا گمراه کنند چون90درصد میزبان های وب اطلاعات درستی در مورد پینگ و سرعت لود سایت نمیدهند و شما مجبور هستید که یک تعرفه بخرید بعد از خرید تازه متوجه میشید که این هاست اصلا سرعت پینگ مناسبی ندارد من در این آموزش میخوام روشی رو بهتون یاد بدم که قبل از خرید تعرفه از ارائه دهندگان میزبانی وب اطمینان حاصل کنید که شرکت خدمات دهنده اطلاعاتی که درباره سرعت لود سایت ها در وب سایتشون با استفاده از تبلیغات ارائه میدهندآیا درست است یا خیر؟ نکته :دلیل این که ما از خودسایت خدمات دهندگان میزبانی وب, پینگ میگیریم این است که صددرصدخدمات دهنده, سایت خودش را در بهترین جای سرورش بارگزاری میکند پس باید بهترین پینگ وپایین ترین Time Outرا باید داشته باشد. اسم سایت+دامین سایت ارائه دهنده خدمات میزبان وب رو پیدا میکنید با استفاده از روش زیر ازآن پینگ میگیرید پینگ وTime outرا زیر نظر میگیرید. محیط CMDرا باز کنید . ping mizbanfa.net -t در آخر دکمه Enter را فشار میدهیدو بعد از یک الا دو دیقه کلید های ترکیبی Ctrl+Cفشار میدهید تا از حلقه خارج شود. Pinging mizbanfa.net [93.115.150.136] with 32 bytes of data: Reply from 93.115.150.136: bytes=32 time=34ms TTL=56 Reply from 93.115.150.136: bytes=32 time=33ms TTL=56 Reply from 93.115.150.136: bytes=32 time=33ms TTL=56 Reply from 93.115.150.136: bytes=32 time=33ms TTL=56 Reply from 93.115.150.136: bytes=32 time=33ms TTL=56 Request timed out. Reply from 93.115.150.136: bytes=32 time=32ms TTL=56 Request timed out. Reply from 93.115.150.136: bytes=32 time=32ms TTL=56 Request timed out. Reply from 93.115.150.136: bytes=32 time=32ms TTL=56 Request timed out. Reply from 93.115.150.136: bytes=32 time=32ms TTL=56 Request timed out. Reply from 93.115.150.136: bytes=32 time=32ms TTL=56 Reply from 93.115.150.136: bytes=32 time=33ms TTL=56 Reply from 93.115.150.136: bytes=32 time=33ms TTL=56 Reply from 93.115.150.136: bytes=32 time=32ms TTL=56 Reply from 93.115.150.136: bytes=32 time=32ms TTL=56 Request timed out. Reply from 93.115.150.136: bytes=32 time=32ms TTL=56 Request timed out. Reply from 93.115.150.136: bytes=32 time=34ms TTL=56 Reply from 93.115.150.136: bytes=32 time=33ms TTL=56 Ping statistics for 93.115.150.136: Packets: Sent = 30, Received = 30, Lost = 0 (0% loss), Approximate round trip times in milli-seconds: Minimum = 32ms, Maximum = 34ms, Average = 32ms Control-C ^C همان طور که متوجه شدید این دستور شروع میکنه از وب سایت ارائه دهنده خدمات میزبانی وب پینگ میگیرد قدم اول :میانگین پینگ را حساب میکنید قدم دوم:تعداد دفعات Request timed out نشان دهنده این است که هاست یا سرور mizbanfa.net برای چند ثانیه از دست رسی خارج است. درمثال بالا اطلاعات مهمی راCMDدر اختیار ما قرار میدهد به شرح زیر است Minimum = 32ms, Maximum = 34ms, Average = 32ms نکته:معیار یک هاست و یا سرور خوب پایین ترین ping و پایین ترین دفعات Time outاست شما میتوانید تک به تگ وب سایت های ارائه دهنده خدمات هاست را با این روش زیر نظر بگیرید و آن خدمات دهنده ای را انتخاب کنید که کمترین Pingوپایین ترین دفعات Time outرا داشته باشد, گزینه ی مناسبی برای وب سایت شما است. موفق و پیروز باشید
  10. با سلام و درود، نسخهٔ ۵.۱۵.۰ به عنوان یک نسخهٔ نهایی از سری کیوت ۵ همراه با ویژگی‌های بسیاری ارائه شد. این نسخه با هدف پشتیبانی کامل از ویژگیِ backward-compatible (پشتیبانی از عقب‌گرد) در نسخه‌های سری ۵ منتشر شده است. اما طبق شرایطی که اخیراً شرکت کیوت اعلام کرده است، این نسخه به دو روش پشتیبانی بلند‌مدت و عادی ارائه می‌شود. نکته‌ای که باید به آن توجه داشته باشید این است که نسخهٔ LTS صرفاً برای کاربران تجاری مورد استفاده قرار خواهد گرفت. بنابراین توسعه‌دهندگان جامعهٔ متن‌باز یا در واقع نسخهٔ رایگان از کیوت می‌بایست آن را به صورت نصب آنلاین دریافت کنند. و یا می‌توانید کُد‌منبع آن را دریافت کرده و خود آن را کامپایل نمایید. این نسخه شامل ویژگی‌ها و اصلاحیه‌های زیر می‌باشد: پشتیبانی از ویژگی‌های نسخه‌های قبلی تا قبل از نسخهٔ سری ۶. پشتیبانی از رابط‌های بک‌اندی ۳ بعدی و رندرینگ که می‌توان یکی از تغییرات بسیار مهم سری کیوت ۵ باشد که در ادامه به آن اشاره شده است. ماژول کیوت کوئیک ۳ بعدی (Qt Quick 3D) محیط Qt Design Studio ۱.۵ بهبود‌ها و تغییرات در ماژول Qt QML بهبود‌ها و تغییرات در ماژول Qt Quick و دیگر تغییرات و بهبود‌ها... پشتیبانی از ویژگی‌های نسخه‌های قبلی تا قبل از نسخهٔ سری ۶ کیوت ۵.۱۵ به عنوان یک پله به سمت کیوت ۶ می‌باشد. این در صورتی است که کیوت ۶ در حال تغییر و تحولات بسیاری خواهد بود که در این نسخه از کیوت ۵.۱۵ سعی بر آن شده است که آن را به آسانی ممکن سازد. بسیاری از عملکرد‌هایی مستهلک که نشانه‌گذاری شده‌اند در کیوت ۶ حذف خواهند شد. با توجه به این موارد، کیوت ۵.۱۵ هم به عنوان یک نسخهٔ کامل از سری ۵ و هم یک پیش شروعی از نسخهٔ سری ۶ محسوب خواهد شد. پشتیبانی از رابط‌های بک‌اندی ۳ بعدی و رندرینگ احتمالاً مهمترین تغییر در سمت گرافیک و موتور رندرینگ کیوت اتفاق افتاده است. تغییرات بسیاری در لایه‌های زیرین اتفاق می‌افتد که بلافاصله برای کاربران قابل مشاهده نیست. در سال گذشته کار بر روی پشتهٔ گرافیکی صورت گرفت که این به‌روز رسانی در کیوت سری ۶ متمرکز خواهد شد که در حال حاضر نیز در کیوت ۵.۱۵ به عنوان گزینه‌ای در دسترس است. تیم توسعهٔ کیوت پشته‌های گرافیکی را در کیوت ۵ به خوبی توسعه داده بود تا به صورت چند-سکویی از این رابط‌های گرافیکی سه بعدی استفاده شود. اما طی دو سال اخیر، تغییرات قابل توجهی در صنعت باعث شده است که توسعه و استقرار برنامه‌هایی که از گرافیک‌های سه بعدی استفاده می‌کنند پیچیده‌تر شود. از طرفی اول شروع به کار روی Metal کرد و مدتی پیش پشتیبانی از OpenGL را در macOS و iOS کاهش و منسوخ کرد. گروه Khronos تلاش کرده است تا OpenGL را با Vulkan جایگزین کند که راهی برای اندروید و لینوکس می‌سازد. از طرف دیگر رابط‌های Direct3D 12 مایکروسافت کاملاً بازنویسی شده‌ است و به هیچ وجه با نسخه‌های قدیمی آن سازگار نیست. البته این به این معنی نیست که OpenGL در آینده از بین می‌رود. با توجه به شعار و قول کیوت با عنوان «چند-سکویی» توسعه‌دهندگان کیوت به دنبال راه حلی هستند که این راه حل در همه جا کار کند. بنابراین برای رسیدن به این هدف، کمی بیشتر از یک سال پیش شروع به کار بر روی یک لایهٔ انتزاعی برای همهٔ آن‌ها تحت Api‌های مختلف کرده‌اند. این رابط سخت‌افزاری Qt Rendering Hardware Interface یا RHI نام دارد و می‌تواند برای اجرای برنامه‌های تحت فناوری کیوت کوئیک (Qt Quick) در بالای Metal، Direct3D و Vulkan و همچنین OpenGL استفاده شود. به عنوان یک پیش‌نمایش فناوری در کیوت ۵.۱۵ پشتیبانی می‌شود، در واقع می‌توانید با فعال‌سازی آن از طریق یک متغیر محیطی، از Qt RHI استفاده کنید. در نهایت در کیوت ۶ این لایه بخش بسیار مهمی از معماری کیوت را تشکیل خواهد داد. ماژول کیوت کوئیک ۳ بعدی (Qt Quick 3D) یکی دیگر از ویژگی‌های قابل توجه و جدید در کیوت ۵.۱۵ نیز مربوط به گرافیک است. در زمان آغاز کیوت سری ۵ فناوری Qt Quick را سنگ بنای معماری کیوت در نظر گرفته و معرفی شده است. تمرکز آن بر ساده‌سازی ایجاد رابط‌های کاربری ۲ بعدیِ مبتنی بر لمس بود. امروزه کیوت ۵.۱۵ با یک فناوری جدید‌تر به عنوان Qt Quick 3D نیز معرفی می‌شود، فلسفهٔ آن کاربری آسان و ادغام محتوای ۳ بعدی در برنامه‌های مبتنی بر فناوری Qt Quick می‌باشد. در واقع با استفاده از Qt Quick 3D می‌توانید به راحتی صحنه‌های سه بعدی را در QML تعریف کنید. می‌توانید نور، چراغ، مِش و مواد مورد نظر خود را در آن تعریف کرده و همه چیز را به راحتی با رابط‌های ۲ بعدی خود ترکیب کنید. در جاهایی که نیاز است رابط‌های ۲ بعدی و ۳ بعدی را به صورت جداگانه تعریف کنید، با توجه به این راه حل دیگر مشکلی در این رابطه وجود نخواهد داشت. محیط Qt Design Studio ۱.۵ فناوری کیوت کوئیک ۳ بعدی تعداد زیادی از گزینه‌ها را برای ایجاد یک برنامهٔ جدید و جالب شامل عناصر ۲ بعدی و ۳ بعدی را فراهم می‌کند. بنابراین تلاش‌های بسیاری در توسعهٔ محیط Qt Design Studio شده است، تمام این قابلیت‌ها در اختیار و دسترس طراحان قرار می‌گیرد. به همین دلیل این یک نکتهٔ قوت است که بگوییم پشتیبانی از فناوری کیوت کوئیک ۳ در این نسخه از محیط استودیو طراحی کیوت ارائه می‌شود. بهبود‌ها و تغییرات در ماژول Qt QML در این بخش کیوت توانسته است گزینهٔ required را برای کامپوننت نویسی ارائه کند. این‌ها گزینه‌هایی هستند که به صورت پیش‌فرض می‌تواند توسط کاربر برای اجزاء اعمال شوند. بنابراین کامپوننت‌ها از این پس می‌توانند به صورت درون خطی در یک سند QML معین شوند. در کنار این یک روش جدید برای اعلان و ثبت انواع در QML ارائه شده است. بهبودی در ابزار qmllint رخ داده است و به مراتب راجع به مشکلات احتمالی در پایهٔ کد‌های QML نتیجهٔ بهتری را خواهد داشت. بهبود‌ها و تغییرات در ماژول Qt Quick چند ویژگی جدید نیز در Qt Quick ظاهر شده است. پشتیبانی از فضاهای رنگی در عنصر Image اضافه شده‌است. عنصر جدیدی به نام PathText به Qt Quick Shapes اضافه شده است. کنترل اشاره‌گر‌ها در گزینهٔ cursorShape برای مدیریت شکل مکان‌نما در سیستم‌های دسکتاپی و یک آیتم HeaderView برای افزودن آسان هدر‌های افقی یا عمدی در TableView اضافه شده است. دیگر بهبود‌ها کاربران کیوت خوشحال خواهند شد که بدانند، اکنون می‌توانند پشتیبانی بسیار بهتری را در رابطه با ظاهر (دکوراسیون) پنجره‌های سفارشی داشته باشند که به شما این امکان را می‌دهد تا تزئینات پنجرهٔ خود را تعریف کرده و محتوای سفارشی را در فضای نوار عنوان پنجره‌ها اعمال کنید. ماژول Qt Lottie، ماژولی که به عنوان یک پیش‌نمایش در نسخهٔ ۵.۱۴ معرفی شده بود، اکنون به صورت کامل پشتیبانی می‌شود. این ماژول به شما امکان می‌دهد تا از انیمیشن‌های After Effect در برنامه‌نویسی مبتنی بر کیوت استفاده کنید. ماژول Qt WebEgine از کرومیوم نسخهٔ ۷۷ در ۵.۱۴ به کرومیوم ۸۰ به‌روز شده است و با تمامی ویژگی‌های جدید از به‌روز‌رسانی‌های کرومیوم همراه است. ماژول Qt 3D پشتیبانی از اشکال‌زدائی و چند ویژگی جدید و کوچکتر را به همراه دارد. ماژول Qt Multimedia، اکنون از چند سطح رندرینگ پشتیبانی می‌کند. در Qt GUI مقیاس‌بندی تصویر و روال تبدیل اکنون برای بسیاری از موارد چند رشته‌ای قابل استفاده است. ماژول Qt Network اکنون از نسخهٔ TLS 1.3 پشتیبانی می‌کند. در ماژول Qt Core، QRunnable و QThreadPool اکنون می‌توانند با std::function کار کنند و همچنین یک روش QFile::moveToTrash() برای انتقال فایل‌ها به داحل سطل زباله به صورت چند-سکویی فراهم شده است. در نهایت نیز پشتیبانی از دیالوگ (پنجره‌های گفتگو) بومی در اندروید اضافه شده است و نیازی نیست کد‌های اضافی در این بخش اعمال کنید.
  11. axarbani

    @کامبیز اسدزاده سلام به دوستان عزیز به خصوص استاد آقای کامبیز اسدزاده من روشی رو پیدا کردم که میشه در تولید فایل نهایی (qt creator) خیلی کمک کنه من حدودا یک ماهه درگیر فایل نهایی Qtبودم این روش خیلی سادس فقط نیاز دارید آموزش (نصب و راه اندازی برنامه‌های تحت Qt) را حتما مطالعه کنید اگر مشکلتون حل نشد حتما آموزش من رو مطالعه کنید شروع ایجاد یک پروژه ساده برای تست فایل نهایی Qt من یک پروژه Qtرو ایجاد میکنم (new project+qt widgets application+mingw 64bit) در آخرfinishرا میزنم. همان طور که متوجه شدید من یک پروژه به عنوان مثال ساختم که روشم را تست کنم. حالا با حالت Release کمپایل میکنید . حالا با روشی که آقای کامبیز اسدزاده در آموزش (نصب و راه اندازی برنامه‌های تحت Qt) عنوان کردن فایل های DLLرو جمع آوری میکنیم. نکته: بعضی مواقع همه فایل های DLLجمع آوری نمیشوند شما مجبور هستیم با استفاده از روش دستی تک به تک DLLهایی که در پوشه فایل EXEپروژه قرار نگرفته را پیدا کنید. روش اول: خوب حالا تمام فایل های DLLجمع آوری شده را در پوشه در مسیر زیر کپی کنید C:\Windows\System32 کپی کنید اگر پیغام جایگزین امد جایگزین کنید. حالا شما نرم افزار خود را هر کجا از سیستم ببرید اجرا میشود. نکته: شما میتوانید برای فایل های DLLمورد نیاز نرم افزارتان یک installerبسازید و مسیرC:\Windows\System32vرا برای آن مشخص کنید تا نر افزارتان تمام و کمال خطایی نداشته باشن روش دوم : یک زمانی هست شما نمیخواین خودتون رو در گیر فایل DLLکنید و میخواهید هر نرم افزاری که مینویسید به سرعت بدون داشتن فایل DLLدر هر جایی از سیستم شما اجرا بشه از روش دوم استفاده میکنید. بنابه کمپایلرتونmingw یا msvc2017 پوشه شما تغییر میکند چون من از کمپایلر mingw73_64 استفاده میکنم وارد پوشه mingwمیشوم c:\QT_C\5.13.0\mingw73_64\bin با استفاده ازروش زیر کل DLLهارو انتخاب و کپی میکنیم در search bin عبارت زیر را تایپ میکنیم (*.dll) همه DLLها را انتخاب و سپس کپی میکنیم درC:\Windows\System32 کپی کنید اگر پیغام جایگزین امد جایگزین کنید. حالا شما هر بار که میخواهید با mingw کمپایل کنید نیازی به استخراج فایل DLL نداریدو هرموقع بخواهید نرم افزاری که نوشتید بدون DLLباز میشه. آقای اسدزاده عزیز خیلی خیلی ممنونم از این کهاین سایت فوق العاده رو تاسیس کردین لطفا اگر من اشتباهی دارم راهنمایی کنید
  12. axarbani

    سلام من آموزشتون رو مطالعه کردم ولی مشکلم رفع نشدمن تمام فایل های DLLرو با این روش در فایل نهاییم فراخوانی کردم ولی بازم ارور0xc00007b میداد روش جدیدی پیدا کردم که برای هر پروژه و روی هرنسخه ویندوز این DLLها جواب میده سر زمان مناسب حتما با شما استاد گرامی و برنامه نویسان سایت به اشتراک میزارم موفق و پیروز باشید
  13. کامبیز اسدزاده

    قبلاً در این تاپیک توضیح داده شده.
  14. axarbani

    سلام من مشکل گرفتم فایل نهایی Qtرو دارم ورژن که استفاده میکنم qt-opensource-windows-x86-5.14.1 کمپایلر من mingwهستش و windows application هستش مشکل من از این قراره که وقتی کدم رو دیباگ میکنم و میخوام فایل نهایی کدم رو بگیرم Qtفایل EXEای رو بهم میده که من وقتی این فایل نهایی رو اجرا میکنم خطای DLLمیده DLLرو با استفاده ازسرچ درمحل نصب Qt پیدا میکنم و در پروژم کپی میکنم بعد از این که تمامDLLهارو انتقال میدم بازم خطا میده the application was unable to start correctly 0xc00007b لطفا کمکم کنید
  15. axarbani

    سلام دوست عزیز حرف شما کاملا درسته ممنون از راهنماییتون
  16. قاسم رمضانی منش

    @axarbani با سلام؛ در مورد این کدی که ارسال کردید یه چند نکته‌ای نیاز شد که بگم: اوّل اینکه Header fileی که پیشنهاد کردید (conio.h) یک Header file منسوخ شدهٔ زمان MS-DOS برای هست که نمی‌دونم برای چی هنوز روی سیستم‌عامل Microsoft Windows هست و استفاده از این Header file‌ نه تنها از خوانایی برنامهٔ شما کم می‌کنه بلکه قابلیّت Code portability رو هم از دست میدید و برنامه‌اتون صرفاً برای یک پلتفرم قابل کامپایل خواهد بود. پیشنهاد می‌کنم که از یک روش مطابق با Standard پی‌روی کنید مثلاً به جای استفاده از تابع getch() می‌تونید از std::cin.get() استفاده کنید. و مورد دوّم، متغیرهایی که استفاده‌ای ازشون ندارید رو تعریف نکنید اینطوری باعث میشه که Compiler الکی Warning به شما بده. اکثراً استفاده‌ای از متغیرهای Command lineی که برای تابع main() ارسال میشه نداریم.
  17. axarbani

    من یک زمانی خدای روی زمینم ++C بود حدودا یک سال و نیم فقط ++C کار بودم تمام تلاشم این بود که همه چیز رو با سیپلاس‌پلاس بنویسم اما بعد فهمیدم ابزار امده تا کار رو برای مکانیک آسان تر کنه ن این که کار رو سخت کنه مثل این میمونه که شما از آچار فرانسه برای باز کردن پیچ استفاده کنی، زبان هم دقیقا همین طوره. ممنون خیلی مفید بود.
  18. axarbani

    سلام دوست عزیز اگر امکانش هست کد رو به اشتراک بزارید مشکل شما فکر میکنم از کتابخانه‌ی conio.h باشه به احتمالی روی اکلیپس نصب نیست من به شما نرم افزارDEV Cppرو پیشنهاد میکنم نمونه کد #include <iostream> #include <conio.h> using namespace std; int main(int argc, char** argv) { cout<<"hello worde"; getch(); return 0; }
  19. در این آموزش به شما آموزش میدم که چه طور بتونیدازپلاگینEmmetدرhtmlوCssاستفاده کنید پلاگین Emmetچیست؟ پلاگین Emmet روش نوشتاری است که به شما کمک می کنه تا سرعت تگ نویسی (کد نویسی)htmlوخصوصیت نویسیCss بیشتر بشه و کار برای دیزاین سایت راحت تر بشه وحرفه ای به نظر برسید. نکته:شما باید ادیتوری نصب کنید که پلاگین Emmetرا در خود داشته باشه یا اگر هم نداشته باشه بشه بهش اضافه کرد. من در این آموزش از ادیتورBrackets استفاده میکنم. نکته:شما باید ادیتوری نصب کنید که پلاگین Emmetرا در خود داشته باشه یا اگر هم نداشته باشه بشه بهش اضافه کرد. من در این آموزش از ادیتورBrackets استفاده میکنم. روش نصب پلاگینEmmetدر Brackets نرم افزارBracketsدانلود و نصب کنیدسپس نرم افزار رابازمیکنید باروش زیر پلاگینEmmet رادرخودBracketsنصب میکنید Extension Manager>Search>Emmetدر آخرinstall قسمت اول Html ساختار نویسی Html با استفاده از پلاگینEmmet !+Tab خروجی کد بعد ازفشاردادن دکمهTab <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Document</title> <link rel="stylesheet" href="css/style.css"> </head> <body> </body> </html> ما تونستیم توسط پلاگین Emmetچهارچوب htmlرو بنویسم با کمترین زمان ممکن شروع یادگیری short cut نویسی من میخوام یک divداشته باشم که یک ulزیر مجموعه داشته باشه و ul هم 4 تا زیر مجموعه Liداشته باشه ودرLiهامtextبه نام menuداشته باشه div>ul>li{menu}*4 + Tab خروجی کد بعد ازفشاردادن دکمهTab <div> <ul> <li>menu</li> <li>menu</li> <li>menu</li> <li>menu</li> </ul> </div> خوب همون طور که متوجه شدین علامت بزرگتر(<)برای نشان دادن زیرمجموعه درکرلی براکتس({}) Textمی نویسم (*)به عنوان تعداد تگ هایی که میخواهیم استفاده کنیم خوب یه زمانی هست ما نیاز به کلاس و ایدی داریم خیلی ساده من به تگ بالا با استفاده ازپلاگین Emmet کلاس و ایدی میدم من میخوام یک divداشته باشم کلاسmainکه یکulزیرمجموعه داشته باشه با ایدیul_textوulهم 4تا زیرمجموعهLiداشته باشه و هرکدام ازLiهای یک تگAداشته باشن و درAها هم textبه نامmenuداشته باشه div.main>ul#ul_text>li*4>a{menu} +Tab خروجی کد بعد ازفشاردادن دکمهTab <div class="main"> <ul id="ul_text"> <li><a href="">menu</a></li> <li><a href="">menu</a></li> <li><a href="">menu</a></li> <li><a href="">menu</a></li> </ul> </div> زمانی هست که شما نیاز دارین type inputرو از قبل در پلاگین مشخص کنید خیلی ساده از کد زیر استفاده کنید. input[type=text][name=username][value=txxxt][titel=btn] +Tab خروجی کد بعد ازفشاردادن دکمهTab <input type="text" name="username" value="txxxt" titel="btn"> ما در این جا یاد گرفتیم چه طوری از پلاگین EmmetدرHtmlاستفاده کنیم قسمت دوم CSS خصوصیت نویسی CSSدر پلاگینEmmet شروع یادگیری short cut پلاگین Emmetدر CSSساده تر است شما فقط باید حروف اول کلمات خصوصیت CSSرو بلد باشیدمخفف آن را بنویسید مثال:من میخوام بگراند پروژم را رنگ آن را تغییر بدم bgc+Tab خروجی کد بعد ازفشاردادن دکمهTab background-color: #fff; مثال دیگر btlr+Tab خروجی کد بعد ازفشاردادن دکمهTab border-top-left-radius:35px; به همین سادگی شما خصوصیات رامخفف کردین وسرعت کد نویسی خیلی خیلی بالاتر میره حتما بهتون پیشنهاد میکنم حتی یک بار هم که شده از این پلاگین استفاده کنیدفوق العادس
  20. کامبیز اسدزاده

    سلام، در رابطه با آموزش‌های ویدیوئی، ان‌شاءال... در فرصت مناسبی همراه با پلتفرم فانوکس ارائه خواهند شد.
  21. axarbani

    عالی بود قدرتی که سی پلاس پلاس به همراه کتاب خونه های Qtداره هیچ زبان دیگه نداره حالا تصور کن ازسی پلاس پلاس برای برنامه نویسی وب استفاده کنی فوق العاده میشه تماما باشما موافقم من یکسالی هست که سی پلاس پلاس کارمیکنم کم کم داشتم خسته میشدم که با آموزش کیوت شما آشنا شدم واین آموزش رو تهیه کردم آقای اسدزاده اگر امکانش هست یک سری آموزش فیلم از Qt در سایتتون قرار بدین من اولین کسی هستم که اون رو ازتون خریداری میکنم آقای اسدزاده خواستم از شما تشکر کنم شما استاده من هستی شما باعث شدین به قدرت سی پلاس پلاس ایمان بیارم
  22. نیما غراب

    سلام. به منظور بررسی ورودی‌های غیر مجاز می‌بایست از تابع cin.fail() استفاده کنین در غیر این صورت اتفاقات پیش بینی نشده از جمله مثالی که زدین رخ خواهد داد: #include <iostream> #include <stdlib.h> using namespace std; int main() { int a; cout << "Enter your Number : "; cin >> a; a = cin.fail() ? -1 : a; switch(a) { case 0: cout << "the baynariy is : " << a; cout << '\n'; break; case 1: cout << "the baynariy is : " << a; cout << '\n'; break; default : cout << "END"; system("cls"); } return 0; } در مورد سوال دومتون میتونین صفحه زیر رو مطالعه کنین که مزایا و معایب هر کدوم رو گفته: راه‌های مختلف جهت پاک کردن اطلاعات در کنسول
  23. سلام خدمت همه دوستان عزیز. من یه برنامه نوشته شده با qt دارم که خروجی اندروید ازش گرفتم و روی گوشی اندرویدی نصب کردم و اوکی هست. لازمه بخشهایی از برنامه در زمان‌هایی که در برنامه نیستیم (مثل سوییچ کردیم به یه اپلیکیشن دیگه) فعال بمونه و اجرا بشه. بنابراین باید اون بخش‌ها در قالب سرویس اجرا بشن. تو سایتها و مراجع زیر آموزش نحوه استفاده از qt android service توضیح داده شده. یک سری مثال هم توی گیتهاب هست: https://www.kdab.com/qt-android-create-android-service-using-qt/ https://github.com/KDAB/android https://github.com/frankipl/service-test https://github.com/bbernhard/qtandroidservices_example فایل‌های so مربوط به سرویس و اپلیکیشن تو فایل apk ساخته شده هست ولی موقع اجرای اپلیکیشن روی گوشی، سرویس اجرا نمیشه. repNode=new QRemoteObjectNode(this); res = repNode->connectToNode(QUrl(QStringLiteral("local:replica"))); service=repNode->acquire<PingPongReplica>(); res = service->waitForSource(1000); در حقیقت خط آخری (waitForSource) مقدار false برمیگردونه. من فکر میکنم یه جایی توی مراحل ساخت سرویس و تنظیماتش اشتباه کردم ولی نمیفهمم کجا. دوستانی که تجربه استفاده از qt android service دارند ممنون میشم کمک کنند.
  24. قاسم رمضانی منش

    سلام؛ بهتر بود که نمونهٔ کدی که نوشتید را ارسال کنید، اگر ازsystem("puase") استفاده کنید در انتهای کد دیگه نباید پنجره تا زمان فشردن کلید Enter بسته بشه.
  25. farshid_56

    سلام.من یه برنامه ی ساده Hello Word در eclipse و به زبان c++ نوشتم ولی وقتی به پوشه برنامه میرم و فقط فایل EXE رو اجرا میکنم پنجره cmd خیلی سریع باز و بسته میشه و چیزی قابل رویت نیس. دستورات getch() و system("pause") رو هم امتحان کردم ولی نشد.نمیدونم چیکار باید بکنم.کتابخانه ی خاصی و یا دستور خاصی رو باید بنویسم؟ ممنون میشم کمکم کنید
  26. امروز نسخهٔ جدید ۴.۱۲.۰ از کیوت‌کریتور منتشر شد که دارای ویژگی‌های مهم‌تری نسبت به نسخه‌های قبلی دارد. یکی از مهمترین مواردی که واقعاً مشکلات اساسی را در این نسخه پوشش می‌دهد حل مسائل مربوطِ به توسعه‌دهندگان کیت اندروید است. در این ویرایش محیط توسعهٔ اندروید به صورت خودکار برای توسعه‌دهنده پیکربندی می‌شود. فقط کافی است مسیر دقیق فایل‌ها را ارائه کنید. Qt Creator 4.12 =============== Qt Creator version 4.12 contains bug fixes and new features. 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/4.11..v4.12.0 General ------- * Added `Restart Now` option when changing settings that require restart * Added option for linking Qt Creator to a Qt installation, sharing auto-detected Qt versions and kits * Added guard against crashing plugins at startup, providing the option to temporarily disable the offending plugin * Added locator filter for searching in Qt Project bug tracker * Added option to create custom URL template locator filters * Added browser for Marketplace items to Welcome mode (QTCREATORBUG-23452) * Fixed various theming issues Help ---- * Added tool button for changing target for context help (QTCREATORBUG-17667) * Added option to register documentation only for highest Qt version, and made that default (QTCREATORBUG-21482, QTCREATORBUG-22799, QTCREATORBUG-10004) Editing ------- * Added `Go to Last Edit` * Added option for default line terminator style (QTCREATORBUG-3590) * Improved behavior when splitting would hide text cursor * Fixed that wizards ignored default file encoding * Fixed that only restricted number of sizes were allowed for font size (QTCREATORBUG-22536) * Fixed completion after undo (QTCREATORBUG-15038) ### C++ * Fixed issue with Clang and precompiled headers (QTCREATORBUG-22897) ### Language Client * Added support for Markdown in tooltips * Added support for auto-formatting * Added outline dropdown (QTCREATORBUG-21916) * Improved protocol error reporting * Fixed `Ctrl-click` for `Follow Symbol Under Cursor` (QTCREATORBUG-21848) ### QML * Updated to Qt 5.15 parser (QTCREATORBUG-23591) * Improved support for multiple imports into same namespace (QTCREATORBUG-15684) * Added scanning of `app.qmltypes` and `lib.qmltypes` for type information * Fixed highlighting for new keywords in Qt 5.15 * Fixed reading of `qmltypes` from Qt 5.15 (QTCREATORBUG-23855) ### Python * Added wizards for Qt Quick Application and Qt Widgets Application with `.ui` file (QTCREATORBUG-21824) ### Diff Viewer * Added support for staging only selected lines (QTCREATORBUG-19071) Projects -------- * Added option to hide "disabled" files in Projects tree (QTCREATORBUG-22821) * Added option to filter output panes for lines that do not match expression (QTCREATORBUG-19596) * Added option for default build configuration settings (debug information, QML debugging, Qt Quick Compiler) (QTCREATORBUG-16458) * Added option to only build target for active run configuration (qmake & Qbs) * Added option to only stop the target of active run configuration on build (QTCREATORBUG-16470) * Added option for project specific environment (QTCREATORBUG-21862) * Added option to remove items from `Recent Projects` list in Welcome mode * Added option to start run configurations directly from target selector (QTCREATORBUG-21799) * Added option to build project for all configured kits (QTCREATORBUG-16815) * Added `-ensure-kit-for-binary` command line option that creates a kit for a binary's architecture if needed (QTCREATORBUG-8216) * Added GitHub build workflow to `Qt Creator Plugin` wizard template * Improved UI responsiveness while parsing projects (QTCREATORBUG-18533) * Fixed build directory after cloning target (QTCREATORBUG-23462) * Fixed copying of filtered text from output pane (QTCREATORBUG-23425) ### QMake * Improved renaming of files (QTCREATORBUG-19257) * Fixed handling of `object_parallel_to_source` (QTCREATORBUG-18136) * Fixed crash with circular includes (QTCREATORBUG-23567) * Fixed issue with renaming files (QTCREATORBUG-23720) ### CMake * Improved handling of `source_group` (QTCREATORBUG-23372) * Added support for `Add build library search path to LD_LIBRARY_PATH` (QTCREATORBUG-23464) * Added automatic registration of CMake documentation, if available (QTCREATORBUG-21338) * Fixed that `.cmake` directory was created in project source directory (QTCREATORBUG-23816) * Fixed issues with `snap` on Ubuntu Linux (QTCREATORBUG-23376) * Fixed handling of `Enable QML` in debugger settings (QTCREATORBUG-23541) * Fixed unneeded reparsing of files * Fixed code model issues with precompiled headers (QTCREATORBUG-22888) ### Qbs * Updated included Qbs version to 1.16.0 * Changed to use separate Qbs executable instead of direcly linking to Qbs (QTCREATORBUG-20622) * Added option for default install root (QTCREATORBUG-12983) ### Python * Added option to disable buffered output (QTCREATORBUG-23539) * Added support for PySide 5.15 to wizards (QTCREATORBUG-23824) ### Generic * Improved performance for large file trees (QTCREATORBUG-20652) * Fixed that only first line of `.cflags` and `.cxxflags` was considered ### Compilation Database * Fixed that project was reparsed if compilation database contents did not change (QTCREATORBUG-22574) ### Nim * Added support for Nimble build system * Added support for `Follow Symbol Under Cursor` Debugging --------- * Added option to hide columns from views (QTCREATORBUG-23342) * Added option for `init` and `reset` GDB commands when attaching to remote server * Fixed pretty printer for `std::optional` (QTCREATORBUG-22436) Analyzer -------- ### Clang * Improved filtering * Added `Analyze Current File` to `Tools` menu and editor context menu * Added context menu item that opens help on diagnostics ### CppCheck * Added option to trigger Cppcheck manually ### Chrome Traces * Added more details for counter items * Added option to restrict view to selected threads * Added information about percentage of total time for events ### Heob * Added support for settings profiles (QTCREATORBUG-23209) Qt Quick Designer ----------------- * Added locking and pinning of animation curves (QDS-550, QDS-551) * Added support for annotations (QDS-39) * Fixed dragging of keyframes in curve editor (QDS-1405) * Fixed crash when selecting icon (QTCREATORBUG-23773) * Fixed missing import options (QDS-1592) Version Control Systems ----------------------- ### Git * Added option to create branch when trying to push to a non-existing branch (QTCREATORBUG-21154) * Added option to start interactive rebase from log view (QTCREATORBUG-11200) * Added information about upstream status to `Git Branches` view * Added option to `grep` and `pickaxe` git log (QTCREATORBUG-22512) * Made references in VCS output view clickable and added context menu (QTCREATORBUG-16477) Test Integration ---------------- * Added support for colored test output (QTCREATORBUG-22297) ### Google Test * Added support for internal logging (QTCREATORBUG-23354) * Added support for `GTEST_SKIP` (QTCREATORBUG-23736) Platforms --------- ### Windows * Improved behavior with regard to MSVC tool chain matching and compatibility of MSVC 2017 and MSVC 2019 (QTCREATORBUG-23653) ### macOS * Fixed parsing of Apple Clang specific linker message (QTCREATORBUG-19766) * Fixed `Run in Terminal` and `Open Terminal` when user has different shell configured (QTCREATORBUG-21712) ### Android * Discontinued support for Ministro * Added auto-detection of Java JDK (QTCREATORBUG-23407) * Added option to automatically download and install required Android tools (QTCREATORBUG-23285) * Added option to register multiple NDKs (QTCREATORBUG-23286) * Added automatic selection of correct NDK for Qt version (QTCREATORBUG-23583) * Added option to download and use [OpenSSL for Android](https://github.com/KDAB/android_openssl) (QTBUG-80625) * Added support for Android 11 with API level 30 * Improved examples browser to only show items tagged with `android` (QTBUG-80716) * Improved manifest editor (QTCREATORBUG-23283) * Fixed issues with latest SDK r29 (QTCREATORBUG-23726) * Fixed several issues with AVD manager (QTCREATORBUG-23284, QTCREATORBUG-23448) * Fixed that some essential packages were not installed (QTCREATORBUG-23829) * Fixed that ABI selection in build configuration did not persist (QTCREATORBUG-23756) ### iOS * Improved examples browser to only show items tagged with `ios` ### Remote Linux * Added option to use custom command for install step (QTCREATORBUG-23320) * Added option to override deployment data (QTCREATORBUG-21854) ### Bare Metal * Added support for RL78 architecture * Added support for J-Link and EBlink GDB servers * Added support for KEIL uVision v5.x debugger ### MCU * Added auto-registration of documentation and examples (UL-1685, UL-1218) * Switched to MCUXpresso IDE instead of SEGGER JLink for NXP kits (QTCREATORBUG-23821) * Fixed issues with desktop kit (QTCREATORBUG-23820) * Fixed issues with RH850 (QTCREATORBUG-23822)
  27. با سلام خدمت دوستان و با عذر شرمندگي كه وقت دوستان رو ميگيرم چونكه من تازه شروع به برنامه نويسي كردم مشكلاتي رو در اين زمينه دارم و متاسفانه از استاد دانشگاهم هم پرسيدم ولي جوابي بهم نداد. ميخواستم بدونم در مورد پاك كردن صفحه نمايش بعد از اجراي برنامه بايد از چه دستور و كتابخانه ايي استفاده كنم. من از system cls و كتابخانه ي stdlib استفاده كردم.نميدونم كه درسته يا نه؟ در ضمن سوال بعديم اين كه من يه برنامه ي ساده با سوئيچ كيس نوشتم برنامه هنگام وارد كردن اعداد درست كار ميكنه ولي هنگامي كه به جاي عدد يك حرف انگليسي هم وارد ميكنم كيس صفر انجام ميشه در صورتي كه نبايد اين طور باشه. ممنون ميشم دوستان كمكم كنن. #include <iostream> #include <stdlib.h> using namespace std; int main() { int a; cout << "Enter your Number : "; cin >> a; switch(a) { case 0: cout << "the baynariy is : " << a; cout << endl; break; case 1: cout << "the baynariy is : " << a; cout << endl; break; default : cout << "END'; system("cls"); } rtturn 0; }
  28. سلام و درود با تشكر از راهنمايي شما

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

    سلام و درود بر شما؛ خب شما باید از اون APIهایی که دو پروژهٔ مختلف به‌شما می‌دهند استفاده کنید، و فقط یک تابع Main را نگه‌داری کنید. برای مثال، ما دو Source code داریم که به این‌صورت تعریف شده‌اند: main_1.cpp: #include <algorithm> #include <iostream> #include <vector> using vec_int = std::vector<int>; void print_vector(const vec_int& in) { std::for_each(in.begin(), in.end(), [](const auto& i) { std::cout << i << std::endl; }); } int main(void) { vec_int my_vec(10); print_vector(my_vec); } و یک Source code دیگر: main_2.cpp: #include <algorithm> #include <iostream> #include <vector> #include <ctime> using vec_int = std::vector<int>; void initilization_vector(vec_int& in) { std::srand(std::time(nullptr)); std::generate(in.begin(), in.end(), []() { return std::rand() % 100; }); } int main(void) { vec_int my_vec(10); initilization_vector(my_vec); } حالا برای اینکه‌ما بتوانیم از APIهای این Source codeها استفاده کنیم ابتدا یک Header file درست می‌کنیم و اعلان‌های APIهای مورد نظرمان را داخل آن می‌نویسیم: my_api.h: #ifndef MY_API_H #define MY_API_H #include <algorithm> #include <iostream> #include <vector> #include <ctime> using vec_int = std::vector<int>; namespace api { void print_vector(const vec_int& in); void initilization_vector(vec_int& in); } // namespace api #endif // MY_API_H همچنین برای تعاریف از یک Source file دیگر استفاده می‌کنیم: my_api.cpp: #include "my_api.h" void api::print_vector(const vec_int &in) { std::for_each(in.begin(), in.end(), [](const auto &i) { std::cout << i << std::endl; }); } void api::initilization_vector(vec_int &in) { std::srand(std::time(nullptr)); std::generate(in.begin(), in.end(), []() { return std::rand() % 100; }); } حال به راحتی می‌توانیم در پروژهٔ تازه ایجاد کردهٔ خودمان از این APIهایی که از دو Source code مختلف با دو Main جدا جمع‌آوری شده را استفاده کنیم: main.cpp: #include "my_api.h" int main(void) { vec_int my_vec(10); api::initilization_vector(my_vec); api::print_vector(my_vec); } نمایی از محیط Code::blocks برای پروژهٔ بالا:
  1. نمایش فعالیت های بیشتر
×
×
  • جدید...