کلاس QString و رشته ها در Qt

در زبان سی پلاس پلاس، گونه (نوع – Data Type) به نام string هست که با آن می توانیم یک متغیر از گونه رشته را در برنامه بسازیم. یک رشته توالی از کاراکترها است که میان دو کاراکتر Double Quotes نوشته می شوند. در زبان سی، گونه string به آشکار نیست، و باید یک آرایه از گونه char بسازید، پس می بینید که رشته ها توالی یا شاید بگوییم آرایه از کاراکترها (شماره، حرف ها، فضای خالی و کاراکترهای ویژه مانند $ @) هستند که هر کدام از این کاراکترهای درون رشته دارای یک اندیس هستند. نخستین کاراکتر درون رشته، دارای اندیس صفر و واپسین (آخرین) کاراکتر درون رشته، دارای اندیس n – 1 است که در آن n، اندازه یک شمارگان (تعداد) کاراکترهای رشته است.توجه کنید گونه داده QString در Qt به گونه یک کلاس شناسانده (تعریف) شده است، بنابراین هر زمان که یک متغیر از آن بسازیم، آن متغیر یک نمونه (Instance) یا شی (Object) از کلاس QString خواهد بود، بنابراین می توانیم بدست آن متغیر، به متدهای کلاس QString دسترسی داشته باشیم. در زیر چهار نمونه از چگونگی ساخت متغیر رشته ای QString ساخته ایم. در دستور یکم و دوم، یک متیغر رشته ای تهی (پوچ – null) ساخته ایم. در سومین و چهارمین دستور، یک رشته با مقدار Hello ساخته ایم. ناهم سانی (تفاوت) این دو در این است که در چهارمین دستور، تابع سازنده کلاس QString را برای ساخت به کار برده ایم.مقدار null یکی از گونه های داده در زبان سی پلاس پلاس است که مقدار Null یا همان پوچ، تهی یا هیچ اشاره دارد.گونه های int و float و double سه دیگر گونه های داده هستند که به ترتیب به شماره صحیح و شماره ممیز شناور (اعشاری) اشاره دارند. float و double هر دو مقدار ممیز شناور (اعشاری) را در خود نگه می دارد ولی بازه double بزرگتر (۱۰ بیتی) است.در کد بالا و در آغاز رشته strVar1 value، یک کاراکتر n\ گذاشته شده است. n\ کاراکتر کنترلی است که مکان نما را به بَند (خط) تازه یا خط پَسیین (بعدی) می برد. کاراکتر کنترلی دیگر، t\ است که مکان نما را یک Tab به پیش رو (جلو) می برد. در شکل بالا بَند (خط) تازه، نشان داده شده است. چون کاراکتر n\ آغاز رشته آمده، پس نخست به خط پَسین (بعدی) رفته و سپس رشته چاپ می شود.در کد زیر تابعی به نام boolToString نوشته ایم که یک ورودی از گونه bool دریافت کرده و یک QString برگشت می دهد. سپس در بدنه تابع، یک متغیر به نام result از گونه QString ساخته شده است که سپس و بر پایه شرط if یا مقدار رشته ای True یا False را در خود نگه می دارد. در پایان باید بدست عبارت return (مقدار) متغیر result برگشت داده شود.هر تابع می تواند هیچ یا یک یا چندین ورودی (پارامتر) از گونه های متفاوت را دریافت کند. این پارامترها، تنها در بدنه تابع شناخته شده و قابل دسترسی هستند. همچنین اگر متغیر در خود بدنه تابع، نوشته شود، پس به گونه محلی بوده و در بدنه همان تابع قابل دسترسی است.هر تابع می تواند هیچ مقداری را برگشت ندهد، در این مورد، باید عبارت void را برای مقدار برگشتی تابع به کار ببریم. همچنین تابع می تواند یک مقدار از گونه ویژه مانند int یا string یا QString یا bool یا هر گونه دیگری را برگشت دهد.گونه پارامترهای ورودی تابع یا مقدار برگشتی تابع، تنها گونه های پیش فرض زبان برنامه نویسی نیست، بلکه می تواند از گونه کلاس های تعریف شده کاربر نیز باشد. به یاد داشته باشید که هر کلاسی که کاربر در برنامه می سازد، خودش از این پس یک گونه (Type) تازه خواهد بود.تابع هایی که یک مقدار را برگشت می دهند، باید عبارت return را برای مقدار برگشتی به کار ببرند. مقدار یا متغیر پیش روی return باید همسان با گونه برگشتی باشد.نوع bool یکی از گونه های زبان سی و سی پلاس پلاس است که به درستی یا نادرستی اشاره دارد. در سی پلاس پلاس، واژه کلیدی true به درستی و false به نادرستی اشاره دارد. همچنین از دید دیگر، شماره صفر یا کمتر از صفر (شماره منفی) به نادرستی اشاره داشته و دیگر شماره ها، به درستی اشاره دارند.مقدار برگشتی و ساخت متغیرهمانگونه که گفتیم، هر تابع یا متد کلاس می تواند یک خروجی از یم گونه (Type) را برگشت دهد، بنابراین متغیری که می خواهیم مقدار برگشتی را در خودش نگه دارد، باید هم گونه (هم نوع) با گونه برگشتی تابع یا متد کلاس باشد. در زیر تابع QLatinString یک رشته دریافت و سپس بر روی آن رشته یک سری پردازش انجام داده و در خروجی، یک رشته (QString) برگشت می دهد، بنابراین متغیر url نیز باید از گونه QString باشد.QString url = QLatin1String("http://www.unicode.org/");مقداردهی آغازین یک رشتهدر نخستین کد همین نوشته، متغیر strVar4 را به بدست تابع سازنده (Constructor Function) ساختیم. چون QString یک کلاس است، پس هر گاه یک متغیر از آن بسازیم، پس یک نمونه از کلاس QString ساخته ایم، همچنین اگر همانند متغیرهای strVar3 و strVar4 یک مقدار در زمان ساخت متغیر بدهیم، پس نمونه کلاس را مقدار دهی آغازین (Initializing) کرده ایم. ساخت (مقدار دهی آغازین) یک رشته از آرایه ای از کاراکترهاهمانگونه که گفتیم، رشته توالی (Sequence) از کاراکتر ها (Characters) است که میان دو کاراکتر ” ” نوشته می شوند. در زبان سی و سی پلاس پلاس، یک گونه داده (Data Type) به نام char هست که بدست آن می توانیم متغیر کاراکتری بسازیم. متغیر کاراکتری، تنها تک کاراکتر را دریافت می کند که این تک کاراکتر میان دو کاراکتر ‘ ‘ نوشته می شود.در فریم ورک کیوت، یک کلاس به نام QChar هست که به کمک آن می توانیم یک متغیر کاراکتری بسازیم. چون QChar همانند QString یک کلاس است، پس متغیری که از آن ساخته می شود یک نمونه یا شی از کلاس QChar خواهد بود، پس می توانیم با آن به متدهای کلاس QChar دسترسی داشته بدر سی پلاس پلاس، هر کلاس می تواند، صفر، یک یا چندین تابع سازنده داشته باشد. تابع سازنده، تابعی هم نام با نام کلاس است که برای دریافت ورودی های آغازین کلاس به کار گرفته می شود. در متغیر strVar4 (بالا)، یکی از تابع های سازنده کلاس QString را به کار بردیم که یک تک رشته را دریافت کرد ولی در زیر و در خط ۸، یک متغیر به نام strVar5 ساخته ایم که تابع سازنده دیگری را فراخوانی کرده ایم. این تابع در پارامتر نخست، یک آرایه یا نام یک متغیر آرایه ای از کاراکترها در فرمت یونیکد را دریافت می کند و پارامتر دوم آن، شماره ای است که اندازه رشته برگشتی را نشان می دهد. کد زیر الگوی این تابع سازنده را نشان می دهد.QString(const QChar *unicode, int size = -1)همانگونه که در الگو می بینید، ورودی این تابع سازنده، یک متغیر آرایه ای کاراکتری ثابت (Constant) است. بنابراین در بَند (خط) ۶ یک آرایه QChar به اندازه ۵ کاراکتر به گونه const ساخته ایم. سپس در بَند (خط) ۸ آن را به ورودی نخست تابع سازنده فرستاده ایم و سپس شماره ۴ را برای اندازه رشته برگشتی، به ورودی دوم تابع سازنده فرستاده ایم. بنابرین باید خروجی تابع سازنده، رشته Hello باشد ولی اینگونه نیست و خروجی آن Hell است، زیرا ما شماره ۴ را به ورودی دوم فرستادیم، پس اندازه رشته برگشتی ۴ کاراکتر از آرایه کاراکتری ورودی است، پس واپسین (آخرین) کاراکتر آرایه دیگر در رشته برگشتی نخواهد بود.برای شناساندن (تعریف) ثابت ها درون برنامه، باید پیش از نوع ثابت، عبارت const نوشته شود. توجه کنید همانگونه که از نامش پیداست، نمی توان مقدار ثابت را تغییر دهیم ولی می توان مقدار متغیرها را تغییر داد.منبعآموزش های دیگر