مراحل جزیی تری که در شکل می بینید شامل مراحل: ایجاد(جدید) ، آماده، درحال اجرا، آماده-معلق، مسدود-معلق، مسدود و خاتمه می باشد.
وقتی یک فرآیند شروع می شود در حالت شروع قرار می گیرد تا زمانی که داده ها را دریافت کرده و آماده اجرا شود در صورتی که در فضای مربوط به حالت آماده جا باشد به حالت آماده انتقال میابد در غیر این صورت تا زمانیکه فضا باز شود در حالت شروع می ماند.
فرآیندهای در قسمت آماده داده های خود را دریافت کرده و منتظر هستند تا پردازنده به آنها تخصیص یابد و در صورت تخصیص پردازنده به حالت اجرا می روند. همانگونه که میدانیم پردازنده برنامه ها را به صورت زمانبندی انجام میدهد و وقتی که زمانبندی پردازنده برای یک فرایند به پایان می رسد فرایند مجددا از حالت اجرا به حالت آماده بر می گردد اگر در حالت آماده فضای کافی نباشد به حالت تازه ایجاد شده بر میگردد.
فرآیندهایی در حالت مسدود قرار می گیرند که منتظر یک رویداد می باشند و اگر پردازنده بیکار بماند بازهم نمی توانند اجرا شوند.
وقتی یک فرآیند شروع می شود در حالت شروع قرار می گیرد تا زمانی که داده ها را دریافت کرده و آماده اجرا شود در صورتی که در فضای مربوط به حالت آماده جا باشد به حالت آماده انتقال میابد در غیر این صورت تا زمانیکه فضا باز شود در حالت شروع می ماند.
فرآیندهای در قسمت آماده داده های خود را دریافت کرده و منتظر هستند تا پردازنده به آنها تخصیص یابد و در صورت تخصیص پردازنده به حالت اجرا می روند. همانگونه که میدانیم پردازنده برنامه ها را به صورت زمانبندی انجام میدهد و وقتی که زمانبندی پردازنده برای یک فرایند به پایان می رسد فرایند مجددا از حالت اجرا به حالت آماده بر می گردد اگر در حالت آماده فضای کافی نباشد به حالت تازه ایجاد شده بر میگردد.
فرآیندهایی در حالت مسدود قرار می گیرند که منتظر یک رویداد می باشند و اگر پردازنده بیکار بماند بازهم نمی توانند اجرا شوند.
ایجاد فرآیندها :
1.توسط سیستم عامل و در هنگام راه اندازی
2.ایجاد فراخوان سیستمی توسط فرایندهای دیگر مانند فراخوان سیستمی fork در unix
3.درخوات کاربر برای ایجاد فرایند جدید
4.آغاز کار دسته ای ( که این حالت فقط در سیستم های دسته ای کاربرد دارد)
اتمام فرایندها:
1.خروجی عادی: زمانیکه کار فرایند تمام می شود (اختیاری)
2.خروجی با خطا: زمانیکه فرایند یک خطا را کشف کرده و اتمام می یابد (اختیاری)
3.خطای مهلک: مانند درخواست دسترسی به حافظه سایر فرایند ها (اجباری و توسط پردازنده)
4. کشته شدن توسط سایر
فرآیندها: مانند اتمام فرایند پدر
شاید برای همه این سوال پیش بیاید که پردازنده چگونه فرایندهای آماده را تشخیص میدهد: برای جواب این سوال باید گفت که ما برای هرکدام از حالت ها یک صف در نظر می گیریم و پردازنده فرآیندها را از صف حالت آماده بنا به زمانبندی که پردازنده توسط آن برنامه ریزی شده انتخاب می کند.
در گذشته فرایندها از یک بنده ساخته شده و با یک دستور بلوکه کننده کل فرایند به حالت مسدود می رفت اما با استفاده از تکنیک نخ این مسئله پایان یافت به این صورت که برنامه نویسان بدنه برنامه را به گونه ای طراحی می کردند شامل چندین زیر برنامه باشد که بتوانند به صورت همروند اجرا شوند و مسدود شدن یکی از زیر برنامه ها که در حین اجرا به نخ معروف شده اند فقط همان نخ را مسدود کرده و مابقی نخ ها به اجرا شده و به کار خود ادامه می دهند.
پردازنده خود نقش انتخاب و تعویض فرایند ها را بر عهده دارد که باعث سربار برای پردازنده می باشد.
1.توسط سیستم عامل و در هنگام راه اندازی
2.ایجاد فراخوان سیستمی توسط فرایندهای دیگر مانند فراخوان سیستمی fork در unix
3.درخوات کاربر برای ایجاد فرایند جدید
4.آغاز کار دسته ای ( که این حالت فقط در سیستم های دسته ای کاربرد دارد)
اتمام فرایندها:
1.خروجی عادی: زمانیکه کار فرایند تمام می شود (اختیاری)
2.خروجی با خطا: زمانیکه فرایند یک خطا را کشف کرده و اتمام می یابد (اختیاری)
3.خطای مهلک: مانند درخواست دسترسی به حافظه سایر فرایند ها (اجباری و توسط پردازنده)
4. کشته شدن توسط سایر
فرآیندها: مانند اتمام فرایند پدر
شاید برای همه این سوال پیش بیاید که پردازنده چگونه فرایندهای آماده را تشخیص میدهد: برای جواب این سوال باید گفت که ما برای هرکدام از حالت ها یک صف در نظر می گیریم و پردازنده فرآیندها را از صف حالت آماده بنا به زمانبندی که پردازنده توسط آن برنامه ریزی شده انتخاب می کند.
در گذشته فرایندها از یک بنده ساخته شده و با یک دستور بلوکه کننده کل فرایند به حالت مسدود می رفت اما با استفاده از تکنیک نخ این مسئله پایان یافت به این صورت که برنامه نویسان بدنه برنامه را به گونه ای طراحی می کردند شامل چندین زیر برنامه باشد که بتوانند به صورت همروند اجرا شوند و مسدود شدن یکی از زیر برنامه ها که در حین اجرا به نخ معروف شده اند فقط همان نخ را مسدود کرده و مابقی نخ ها به اجرا شده و به کار خود ادامه می دهند.
پردازنده خود نقش انتخاب و تعویض فرایند ها را بر عهده دارد که باعث سربار برای پردازنده می باشد.
برای نخ ها 3 حالت داریم : سطح کاربر ، سطخ هسته و ترکیبی.
نخ های سطح کاربر توسط فرآیند برای اجرا انتخاب و تعویض می شوند و پردازنده از وجود آنها بی خبر است . مزیت آنها سبک بودن و نداشتن سربار است و عیب آن این است که فراخوانی بلوکه توسط یکی از نخ ها منجر به مسدود شدن کل فرایند می شود.
نخ های سطح هسته دقیقا مقابل نخ های سطح کاربر قرار دارند و مزیت آنها این است که چون توسط پردازنده تعویض می شوند بلوکه شدن یکی از نخ ها باعث مسدود شدن سایر نخ ها نمی شود و ایراد وارده این است که برای پردازنده سربار همراه دارد.
اما نخ های ترکیبی به این صورت است که در یک فرایند نخ هایی که شامل دستورات ورودی خروجی یا فراخوانی فرایند های دیگر می باشد به صورت سطح هسته تعریف شده و سایر نخ ها به صورت سطح کاربر تعریف می شوند. به این صورت مزیت های هردو نوع سطح کاربر و سطح هسته را به ارث می برد.
نخ های سطح کاربر توسط فرآیند برای اجرا انتخاب و تعویض می شوند و پردازنده از وجود آنها بی خبر است . مزیت آنها سبک بودن و نداشتن سربار است و عیب آن این است که فراخوانی بلوکه توسط یکی از نخ ها منجر به مسدود شدن کل فرایند می شود.
نخ های سطح هسته دقیقا مقابل نخ های سطح کاربر قرار دارند و مزیت آنها این است که چون توسط پردازنده تعویض می شوند بلوکه شدن یکی از نخ ها باعث مسدود شدن سایر نخ ها نمی شود و ایراد وارده این است که برای پردازنده سربار همراه دارد.
اما نخ های ترکیبی به این صورت است که در یک فرایند نخ هایی که شامل دستورات ورودی خروجی یا فراخوانی فرایند های دیگر می باشد به صورت سطح هسته تعریف شده و سایر نخ ها به صورت سطح کاربر تعریف می شوند. به این صورت مزیت های هردو نوع سطح کاربر و سطح هسته را به ارث می برد.
امیدوارم آموزش این جلسه مطلوب شما بوده باشه در جلسه آینده به زمانبندی فرایندها برای اجرا می پردازیم.
تشکر و خسته نباشید.
@AMCSUI
تشکر و خسته نباشید.
@AMCSUI
@AMCSUI
سلام دوستان خوبم
خوب هستید؟ یا نیستید؟ عصبانی هستید به خاطر تأخیر آموزش؟
بله حق دارید! باید ببخشید امیدوارم کمکم نظم و روال ثابتی بتوانیم به آموزشها بدهیم.
نکته: از بالا به ما دستور دادن که در آموزشّهامون از تگها و کلمات کلیدی استفاده کنیم، پس اگر زیاد با این علامت # مواجه شدید تعجب نکنید مال لکنت انگشت و واردکردن مکرر شارژ نیست ;)
اگر درست به خاطر بیارم طبق سرفصلها، از مقدمات #کیوت شروع کردیم و بعد از بررسی محیط #Qt_Creator رسیدیم به کار با #widgets و #المانها یعنی سرفصل سوم.
در ضمن برای راحتی کار شما و خودم و هم برای اینکه دلخوری اخیرتان از دلتان دربیارم! فهرست مطالب این دورهی مقدماتی رو براتان خوشگل طراحی کردم و گذاشتم توی کانال، انتهای آموزش(تصویر 10).
مِن بعد هر فصلی رو تمام کردیم رنگش رو سبز خواهیم کرد. امید که مقبول افتد.
فصل سوم: کار با ویجتها و المنتها در کیوت
-کلمات کلیدی این فصل: #widgets #Buttons #Qt_Creator #LineEdit #ComboBox #Qt #کیوت# دکمه #طرح
مقدمات تئوری:
تعریف ویجت: بهطورکلی هر چیزی رو که بشه با چشم سر دید در کیوت ما بهش میگیم ویجت! و هر آنچه را که بشه با چشم دل دید... نه دیگِ همچین چیزی ندارم، کلاس ادبیات نیست که.
پس کلیهی اجزای فیزیکی(در دنیای نرمافزار البته) و قابلمشاهده در برنامه ازجمله #دکمهها، برچسبها، طرحبندیها، تکستادیتورها، تصاویر و ... و ... را ویجت مینامیم. اینها اجزای فرمها و پنجرهها و پیغامها و ...ی ما خواهند بود و ما در بخش طراحی ظاهری(#UI) به آن خواهیم پرداخت. ویجتها کلاسهایی هستند که در ظاهر برنامه هم نمایش داده میشوند.
#سیگنال (#Signals): هر ویجت یا بهصورت کلی هر کلاسی، میتواند مثل یک فرستندهی رادیویی یا مثل یک بلندگو از خود امواجی منتشر کنند. سیگنالها در کیوت همان رویدادها در زبانهایی مثل C# است.
#اسلات (#Slots): هر ویجت یا کلاسی میتواند مثل یک گیرندهی رادیویی یا مثل یک گوش عمل کند و امواجی را از یک فرستندهی خاص بگیرد و متناسب با آن عکسالعملی(مثل پخش کردن یا هر چیزی) انجام دهد.
اصلاً این دو تا چه ربطی به هم داشتند؟ هیچی! من و دوستانم هم نمیدانیم اما همینقدر کافی است که بدانیم اینیک انقلاب در صنعت توسعهی نرمافزار است.
با این امکان شما میتوانید بهراحتی دست کلاسهای مختلف را تو دست هم بذارید و بینشان تشریکمساعی برقرار کنید(یعنی همان ارتباط خودمان)!
مثال بدنی: وقتی فردی گرسنه است و با یک غذای لذیذ مواجه میشود، شکمش سیگنال قاروقور ساطع میکنه! و اسلات سیستم اعصاب این سیگنال را میگیرد و واکنش متناسب با آن را که ترشح بزاق است نشان میدهد.
مثال فنی: فرض کنید که کیوت دست دکمهی ۱ را در دست پنجرهی ۲ گذاشته است. یعنی اومده سیگنال کلیک شدن دکمهی ۱ (بلندگو) را در دست اسلات(گوش) باز شدنِ پنجره ۲ گذاشته. حالا وقتی دکمهی 1 کلیک میشود، سیگنال کلیک شدن را در برنامه صادر میکند(داد میزند که کلیک شدم)، سپس اسلات باز شدن پنجرهی 2 فعال میشود و پنجرهی ۲ را باز میکند.
یا مثلاً سیگنال «کلیک شدن» دکمهی ۱ را به اسلات «بسته شدن» در پنجرهی ۲ وصل میکند. چه اتفاقی میافتد؟ وقتی دکمهی دکمهی ۱ کلیک شد، پنجرهی ۲ متوجه میشود و بسته میشود. همین.
به این میگن سیستم سیگنال و اسلات در کیوت. یکجور جانبخشی به اشیاء!
به تصویر ۱ دقت کنید. هر کلاس در کیوت جدا از بخشهای اصلیاش(private و public و ...) دارای دو بخش دیگر هم هست: سیگنالها و اسلاتها.
همانطور که در شکل میبینید Signal 1 در Class X به Slot A در Class Y وصل است و متقابلاً Signal 1 در Class Y به Slot A در Class 1 وصل شده است.
این معنی خودمانیاش چی میشه؟ توضیح با شما.
اما این سیگنال و اسلاتها چی هستند؟ متغییرن؟ کلاسن؟
هیچکدام. دقیقا از جنس تابع اند! اما دسته بندیشون اسمش سیگنال و اسلاتِ همین.
اینا رو گفتیم که بریم یه مثال عملی بزنیم.
مثال:
میخواهیم برنامهای طراحی کنیم که یه فرم سادهی ورود (login) رو شبیهسازی کنه و با واردکردن
نام کاربری: admin
و
رمز: admin
پیغام خوشآمد گویی به کاربر نشان بده.
مرحلهی ۱: مطابق آموزش جلسه سوم یک پروژه از نوع Qt Widget Application بسازید.
مرحلهی ۲: در پنل سمت چپ، روی پوشهی Forms و سپس روی mainwindow.ui کلیک کنید.
صفحهای مطابق تصویر ۲ که شامل یک فرم خالی در وسط و یکسری ویجتها(یا کنترلها) در سمت چپ است جلوی رویتان ظاهر میشود.
مرحله ۳: چهارتا Label رو برای نمایش متن روی فرم بکشید. برای تغییر متن روی Label ها روی آنها دابل کلیک کنید ( مطابق تصویر 4)
مرحله 4: دو LineEdit روی فرم بکشید.(تصویر 5)
مرحله 5: یک PushButton روی فرم بکشید. برای تغییر متن روی PushButton روی آن دابل کلیک کنید(تصویر 6)
سلام دوستان خوبم
خوب هستید؟ یا نیستید؟ عصبانی هستید به خاطر تأخیر آموزش؟
بله حق دارید! باید ببخشید امیدوارم کمکم نظم و روال ثابتی بتوانیم به آموزشها بدهیم.
نکته: از بالا به ما دستور دادن که در آموزشّهامون از تگها و کلمات کلیدی استفاده کنیم، پس اگر زیاد با این علامت # مواجه شدید تعجب نکنید مال لکنت انگشت و واردکردن مکرر شارژ نیست ;)
اگر درست به خاطر بیارم طبق سرفصلها، از مقدمات #کیوت شروع کردیم و بعد از بررسی محیط #Qt_Creator رسیدیم به کار با #widgets و #المانها یعنی سرفصل سوم.
در ضمن برای راحتی کار شما و خودم و هم برای اینکه دلخوری اخیرتان از دلتان دربیارم! فهرست مطالب این دورهی مقدماتی رو براتان خوشگل طراحی کردم و گذاشتم توی کانال، انتهای آموزش(تصویر 10).
مِن بعد هر فصلی رو تمام کردیم رنگش رو سبز خواهیم کرد. امید که مقبول افتد.
فصل سوم: کار با ویجتها و المنتها در کیوت
-کلمات کلیدی این فصل: #widgets #Buttons #Qt_Creator #LineEdit #ComboBox #Qt #کیوت# دکمه #طرح
مقدمات تئوری:
تعریف ویجت: بهطورکلی هر چیزی رو که بشه با چشم سر دید در کیوت ما بهش میگیم ویجت! و هر آنچه را که بشه با چشم دل دید... نه دیگِ همچین چیزی ندارم، کلاس ادبیات نیست که.
پس کلیهی اجزای فیزیکی(در دنیای نرمافزار البته) و قابلمشاهده در برنامه ازجمله #دکمهها، برچسبها، طرحبندیها، تکستادیتورها، تصاویر و ... و ... را ویجت مینامیم. اینها اجزای فرمها و پنجرهها و پیغامها و ...ی ما خواهند بود و ما در بخش طراحی ظاهری(#UI) به آن خواهیم پرداخت. ویجتها کلاسهایی هستند که در ظاهر برنامه هم نمایش داده میشوند.
#سیگنال (#Signals): هر ویجت یا بهصورت کلی هر کلاسی، میتواند مثل یک فرستندهی رادیویی یا مثل یک بلندگو از خود امواجی منتشر کنند. سیگنالها در کیوت همان رویدادها در زبانهایی مثل C# است.
#اسلات (#Slots): هر ویجت یا کلاسی میتواند مثل یک گیرندهی رادیویی یا مثل یک گوش عمل کند و امواجی را از یک فرستندهی خاص بگیرد و متناسب با آن عکسالعملی(مثل پخش کردن یا هر چیزی) انجام دهد.
اصلاً این دو تا چه ربطی به هم داشتند؟ هیچی! من و دوستانم هم نمیدانیم اما همینقدر کافی است که بدانیم اینیک انقلاب در صنعت توسعهی نرمافزار است.
با این امکان شما میتوانید بهراحتی دست کلاسهای مختلف را تو دست هم بذارید و بینشان تشریکمساعی برقرار کنید(یعنی همان ارتباط خودمان)!
مثال بدنی: وقتی فردی گرسنه است و با یک غذای لذیذ مواجه میشود، شکمش سیگنال قاروقور ساطع میکنه! و اسلات سیستم اعصاب این سیگنال را میگیرد و واکنش متناسب با آن را که ترشح بزاق است نشان میدهد.
مثال فنی: فرض کنید که کیوت دست دکمهی ۱ را در دست پنجرهی ۲ گذاشته است. یعنی اومده سیگنال کلیک شدن دکمهی ۱ (بلندگو) را در دست اسلات(گوش) باز شدنِ پنجره ۲ گذاشته. حالا وقتی دکمهی 1 کلیک میشود، سیگنال کلیک شدن را در برنامه صادر میکند(داد میزند که کلیک شدم)، سپس اسلات باز شدن پنجرهی 2 فعال میشود و پنجرهی ۲ را باز میکند.
یا مثلاً سیگنال «کلیک شدن» دکمهی ۱ را به اسلات «بسته شدن» در پنجرهی ۲ وصل میکند. چه اتفاقی میافتد؟ وقتی دکمهی دکمهی ۱ کلیک شد، پنجرهی ۲ متوجه میشود و بسته میشود. همین.
به این میگن سیستم سیگنال و اسلات در کیوت. یکجور جانبخشی به اشیاء!
به تصویر ۱ دقت کنید. هر کلاس در کیوت جدا از بخشهای اصلیاش(private و public و ...) دارای دو بخش دیگر هم هست: سیگنالها و اسلاتها.
همانطور که در شکل میبینید Signal 1 در Class X به Slot A در Class Y وصل است و متقابلاً Signal 1 در Class Y به Slot A در Class 1 وصل شده است.
این معنی خودمانیاش چی میشه؟ توضیح با شما.
اما این سیگنال و اسلاتها چی هستند؟ متغییرن؟ کلاسن؟
هیچکدام. دقیقا از جنس تابع اند! اما دسته بندیشون اسمش سیگنال و اسلاتِ همین.
اینا رو گفتیم که بریم یه مثال عملی بزنیم.
مثال:
میخواهیم برنامهای طراحی کنیم که یه فرم سادهی ورود (login) رو شبیهسازی کنه و با واردکردن
نام کاربری: admin
و
رمز: admin
پیغام خوشآمد گویی به کاربر نشان بده.
مرحلهی ۱: مطابق آموزش جلسه سوم یک پروژه از نوع Qt Widget Application بسازید.
مرحلهی ۲: در پنل سمت چپ، روی پوشهی Forms و سپس روی mainwindow.ui کلیک کنید.
صفحهای مطابق تصویر ۲ که شامل یک فرم خالی در وسط و یکسری ویجتها(یا کنترلها) در سمت چپ است جلوی رویتان ظاهر میشود.
مرحله ۳: چهارتا Label رو برای نمایش متن روی فرم بکشید. برای تغییر متن روی Label ها روی آنها دابل کلیک کنید ( مطابق تصویر 4)
مرحله 4: دو LineEdit روی فرم بکشید.(تصویر 5)
مرحله 5: یک PushButton روی فرم بکشید. برای تغییر متن روی PushButton روی آن دابل کلیک کنید(تصویر 6)
خب تا اینجا یک فرم ساده طراحی کردیم.
نوبت این است که به دکمه مون رفتار یاد بدیم! روی دکمهای که ساختهاید راست کلیک کنید و Go to slot… رو برنید. در پنجرهی بازشده زیر قسمت Select signal گزینهی Clicked و درنهایت Ok را بزنید. (تصویر 7)
با این کار درواقع داریم یک اسلاتِ به گوش درست میکنیم برای سیگنال Clicked دکمه. یعنی به فارسیاش میشه این: یک تابع از نوع Slot تعریف میکنیم که هر وقت دکمه کلیک شد فراخوانی بشه.
کدهای زیر را مطابق شکل 8 الف وارد کرده و کلید Ctrl + R یا دکمهی سبز پایین سمت چپ کیوت کریتور را بزنید تا برنامه اجرا شود. (اگر احیاناً پنجرهی Save Changes ظاهر شد Save All رو بزنید)
درصورتیکه کدهایتان را بهدرستی نوشته باشید خروجیای شبیه تصویر 9 مشاهده خواهید کرد. زیباست نه؟! دیدید که همزمان با کد C++ چگونه از HTML و CSS هم داخل کدمان برای زیباتر شدن کار استفاده کردیم. این کار ضرورتی نداشت لذا میتوانستید بهجای تگ، متن ساده بنویسید.(مثل تصویر 8 ب)
خب تبریک عرض میکنم اولین برنامهی کیوت خودتان رو نوشتید!
نوبت این است که به دکمه مون رفتار یاد بدیم! روی دکمهای که ساختهاید راست کلیک کنید و Go to slot… رو برنید. در پنجرهی بازشده زیر قسمت Select signal گزینهی Clicked و درنهایت Ok را بزنید. (تصویر 7)
با این کار درواقع داریم یک اسلاتِ به گوش درست میکنیم برای سیگنال Clicked دکمه. یعنی به فارسیاش میشه این: یک تابع از نوع Slot تعریف میکنیم که هر وقت دکمه کلیک شد فراخوانی بشه.
کدهای زیر را مطابق شکل 8 الف وارد کرده و کلید Ctrl + R یا دکمهی سبز پایین سمت چپ کیوت کریتور را بزنید تا برنامه اجرا شود. (اگر احیاناً پنجرهی Save Changes ظاهر شد Save All رو بزنید)
درصورتیکه کدهایتان را بهدرستی نوشته باشید خروجیای شبیه تصویر 9 مشاهده خواهید کرد. زیباست نه؟! دیدید که همزمان با کد C++ چگونه از HTML و CSS هم داخل کدمان برای زیباتر شدن کار استفاده کردیم. این کار ضرورتی نداشت لذا میتوانستید بهجای تگ، متن ساده بنویسید.(مثل تصویر 8 ب)
خب تبریک عرض میکنم اولین برنامهی کیوت خودتان رو نوشتید!
#تصویر_8_الف. نوشتن کد برای عکس العمل دکمه (نوشتن html و css در متن پیغام)
این هم کد اسلات دکمه برای دوستانی که طرفدار کپی پیست هستند صرفا برای بالا بردن دقت(نه خدای ناکرده تنبلی!!):
void MainWindow::on_pushButton_clicked()
{
if(ui->lineEdit->text()=="admin" && ui->lineEdit_2->text()=="admin"){
ui->label_4->setText
("شما با موفقیت وارد شدید")
}
else{
ui->label_4->setText("لطفا مجددا سعی فرمایید!");
}
}
ui->myLineEdit->text()
ui.myLineEdit.text()
دلیلش را با گفتن یک کلمه ی کلیدی به خودتان واگذار میکنم که تحقیق کنید:
Pointer ها یا اشاره گرها
نکته ۲:
برای خواندن/ نوشتن مقادیر ویجتها باید از Setter/Getter استفاده کنیم که در مباحث پایه ای زبان C++ بهش میرسیم.
بطور ساده و محدود: هیچ وقت نمی توان مقادیر متغییرهای کلاسهای کیوت را بطور مستقیم تغییر داد یا خواند. بلکه باید برای این کار از توابع مخصوصی که بدین منظور تعیین شده است استفاده کرد. مثل تابع text() در LineEdit که مسئول خواندن متن داخل تسکت باکس و setText() در Label که مسئول تغییر متن برچسب می باشد.
خب این جلسه هم تمام شد. امیدوار بودم برسم که دو جلسه ی متوالی رو در خدمتتون باشم اما متاسفانه وقت نیست و باید بیفتم دنبال غم نان و جان.
براتون آرزوی موفقیت، آسمانی آبی، دلی سرخ و شاد و تنفسی عمیق و آرام را دارم.
تا جلسه آینده بدرود.
😊🌺🌺🌺✋🏻
void MainWindow::on_pushButton_clicked()
{
if(ui->lineEdit->text()=="admin" && ui->lineEdit_2->text()=="admin"){
ui->label_4->setText
("شما با موفقیت وارد شدید")
}
else{
ui->label_4->setText("لطفا مجددا سعی فرمایید!");
}
}
ui->myLineEdit->text()
ui.myLineEdit.text()
دلیلش را با گفتن یک کلمه ی کلیدی به خودتان واگذار میکنم که تحقیق کنید:
Pointer ها یا اشاره گرها
نکته ۲:
برای خواندن/ نوشتن مقادیر ویجتها باید از Setter/Getter استفاده کنیم که در مباحث پایه ای زبان C++ بهش میرسیم.
بطور ساده و محدود: هیچ وقت نمی توان مقادیر متغییرهای کلاسهای کیوت را بطور مستقیم تغییر داد یا خواند. بلکه باید برای این کار از توابع مخصوصی که بدین منظور تعیین شده است استفاده کرد. مثل تابع text() در LineEdit که مسئول خواندن متن داخل تسکت باکس و setText() در Label که مسئول تغییر متن برچسب می باشد.
خب این جلسه هم تمام شد. امیدوار بودم برسم که دو جلسه ی متوالی رو در خدمتتون باشم اما متاسفانه وقت نیست و باید بیفتم دنبال غم نان و جان.
براتون آرزوی موفقیت، آسمانی آبی، دلی سرخ و شاد و تنفسی عمیق و آرام را دارم.
تا جلسه آینده بدرود.
😊🌺🌺🌺✋🏻
به نام خدا
با عرض سلام و خسته نباشید خدمت شما دوستان عزیز و ارجمند
سال نوی شما مبارک باشه ان شاء الله
ضیادید هستم و در خدمت شما خواهم بود با قسمت چهارم از آموزش زبان انگلیسی
بخش اول لغات عمومی هست که تقدیم حضورتون می کنیم . لغات این جلسه ، از کتاب مشهور و بسیار عالی 504 لغت ضروری تقدیم میشه :
با عرض سلام و خسته نباشید خدمت شما دوستان عزیز و ارجمند
سال نوی شما مبارک باشه ان شاء الله
ضیادید هستم و در خدمت شما خواهم بود با قسمت چهارم از آموزش زبان انگلیسی
بخش اول لغات عمومی هست که تقدیم حضورتون می کنیم . لغات این جلسه ، از کتاب مشهور و بسیار عالی 504 لغت ضروری تقدیم میشه :