نقل قول: معرفی و آموزش C++/Qt به صورت گام به گام
ادامه مرحله سی و چهارم: معرفی و کار با TextStream ها
در رابطه با خواندن نوشتن در رشته ها کلاسی داریم به نام QTextStream که امکان نوشتن و خواندن رو برای ما فراهم میکنه... روش کارش مشابه QDataStream در پست قبلی هستش با این تفاوت که در اینجا با رشته ها سرو کار داریم...
پروژه ای ایجاد میکنم از نوع کنسول و میرم سراغ کد نویسی که ابتدا تابعی مینویسم برای خواندن با نام Read و تابعی مینویسم برای نوشتن با نام Write به صورت زیر...
فایل های زیر رو فراخوانی میکنم :
#include <QTextStream>
#include <QFile>
کد مربوط به Read
void Read()
{
QFile MyFile("d://MyFile.txt");
if(MyFile.open(QIODevice::ReadOnly | QIODevice::Text))
{
QTextStream MyStream(&MyFile);
QString MyLine;
do
{
MyLine = MyStream.readLine();
qDebug() << MyLine;
}
while(!MyLine.isNull());
}
MyFile.close();
qDebug() << "MyFile Read.";
}
و کد مربوط به Write
void Write()
{
QFile MyFile("d://MyFile.txt");
if(MyFile.open(QIODevice::WriteOnly | QIODevice::Text))
{
QTextStream MyStream(&MyFile);
MyStream << "Hello \r\n";
MyStream << "World \r\n";
MyStream.flush();
MyFile.close();
qDebug() << "MyFile Written.";
}
}
و در نهایت به صورت پشت سرهم هر دو تابع رو به ترتیب اول نوشتن و بعد خواندن فراخوانی میکنم...
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
Write(); //First step
Read(); //Second step
return a.exec();
}
توضیحات برای این مورد لازم نیست چون همانند QDataStream پیاده سازی شده فقط با این تفاوت که از نوع انحصاری QTextStream استفاده کردیم.
2 ضمیمه
نقل قول: معرفی و آموزش C++/Qt به صورت گام به گام
مرحله 35 :معرفی انواع حالت های کامپایل در Qt :
در رابطه با حالت داینامیک (Dynamic) توضیح مختصر :
در این حالت شما در بسیاری از موارد برای توسعه نرم افزار در دو حالت OpenSource و انحصاری قادر خواهید بود.
جوانب مثبت و منفی زیر است:
مزایا :
- معمولا برنامه برای کاربر نهایی یا همان End user یک بسته جمع و جور و کامل رو فراهم میکنید و همچنین فایل اجرائی در کم حجمترین و فشرده ترین حالت خارج خواهد شد.
- کتابخانه های Qt رو شما میتونید بدون تغییر و کامپایل مجدد پروژه آن ها را برای توسعه دهندگان بازخورد داده و یا به روز رسانی نمایید و حتی آن ها را تغییر دهید.
- نیاز به منابع سخت افزاری بسیار کمی میباشد برای مثال اشغال حافظه Ram بسیار کمتر از حالت Static میباشد.
معایب :
- برای مطمئن شدن از کارائی درست برنامه در هر سیستم و هر سکویی نیاز است بارها و بارها از هر جوانبی برنامه رو نسبت به کتابخانه بررسی نمایید تا وقتی مورد استفاده توسط کاربر یا همان End - User قرار میگیرد بدون بروز مشکل یا خطایی اجرا شود , معمولا بر روی سیستم های Linux نیز باید کتابخانه های به درستی نصب گردد.
- شما باید مطمئن شوید که تمام کتابخانه های مورد نیاز در سیستم هدف (End User) در دسترس هستند در صورتی که بر روی سیستم مورد نظر در دسترس نیستند باید راه حل مناسبی برای ارائه کتابخانه های مورد نظر فراهم نمایید و خدمات آن را در اختیار کاربر قرار دهید.
در رابطه با حالت استاتیک (Static) توضیح مختصر :
در این حالت شما می توانیدا مطمئن باشید که برنامه شما در هر سیستمی بدون نیاز به پیش نیازی قابل اجرا خواهد بود.
جوانب مثبت و منفی زیر است:
مزایا :
- معمولا برنامه برای کاربر نهایی یا همان End user یک بسته جمع و جور و کامل رو فراهم میکنید.
- برنامه شما میتوایند مستقل از هر نسخه از کتابخانه های موجود بر روی سیستم کاربر برنامه رو اجرا کنید حالا چه Qt4 باشه چه Qt5.3.1 باشه هیچ تداخلی نخواهد داشت.
- کمی سریع نسبت بع حالت داینامیکی اجرا میشود که (در CPU های امروز شما به سختی آن را متوجه خواهید شد)
معایب :
- درخواست های برنامه شما به کتابخانه بسیار زیاد و سنگین خواهد بود زیرا کتابخانه ها نیز به برنامه شما متصل و لینک شده هستند.
- ممکن است برای رفع مشکلات کتابخانه و تغییر / به روز رسانی و ... مجبور به کامپایل مجدد برنامه شوید.
- مصرف منبع Ram در صورت درخواست های پی در پی و چند گانه بسیار زیاد خواهد بود.
- در حالت Runtime شما قادر به اجرای plugins توسط QPluginLoader نخواهید بود.
- کامپایل استاتیک بدون داشتن لیسانس مربوطه از طرف Digia مجاز نیست.
ضمیمه 121735
4 ضمیمه
نقل قول: معرفی و آموزش C++/Qt به صورت گام به گام
مرحله 36 : نحوه افزودن دیگر کتابخانه های C++ در محیط Qt Creator و استفاده همراه با کتابخانه Qt
سلام ؛
امروز قصد دارم نحوه افزودن کتابخانه های دیگه رو در محیط Qt توضیح بدم با این روش شما میتونید هر کتابخانه ای رو وارد پروژه کرده و همراه با کتابخانه Qt ازش استفاده کنید برای مثال من خودم به شخصه همیشه رابط کاربری رو با Qt طراحی میکنم و برای برنامه نویسی اصلی از کتابخانه های استاندارد C++ و یا دیگر کتابخانه های اختصاصی مثل Boost و Poco استفاده میکنم.
در این آموزش من نحوه وارد کردن کتابخانه Poco رو براتون توضیح میدم.
زبان C/C++ یکی از قابلیت هایی که نسبت به زبان های دیگری مانند C# یا غیره داره نامحدود بودن استفاده از کتابخانه های این زبان هست که به صورت پیشفرض کتابخانه های استاندارد و از قبل تعریف شده در زبان C++ قابل استفاده هستند مانند کلاس های iostream و ... که کاملا پیشفرض روز این زبان ارائه شده است.
حالا در رابطه با این موضوع باید توضیحی بدم که اگر برنامه نویس یا توسعه دهنده ای نیازمند استفاده از کتابخانه ای منحصربفرد رو داره میتونه اون رو به زبان C++ اضافه کنه و ازش استفاده کنه برای مثال من برای کار با شبکه و اینترنت کتابخانه POCO رو ترجیح میدم پس برای استفاده از این ابتدا باید پیکربندی و آماده سازی لازم رو انجام بدم به صورت زیر عمل میکنم.
ابتدا کتابخانه رو دانلود میکنم و در مسیر مقابل به صورت دلخواه قرار میدم : C:\poco-1.5.3-all (من امروز در محیط ویندوز هستم برای همین روی ویندوز این رو توضیح میدم توضیحات دقیقا روی محیط Linux هم صدق میکنه تفاوت چندانی نداره فقط باید کتابخانه رو از قبل کامپایل کرده باشید)
قبل از هر چیزی باید بدونید که هر کتابخانه دارای libs و include هستش هر نوع کتابخانه ای که دانلود کنید این دو تا گزینه رو باید داشته باشه که بعد از کامپایل کتابخانه فایل lib و dll هاش در ویندوز یا Linux ایجاد خواهد شد.
من به دلیل پیچیده بودن کتابخانه POCO (پوکو) رو انتخاب کردم چون شامل کتابخانه های مربوط به Net و ... هستش که برای آموزش هدف من کار با Net هست بنابراین پوشه های include و libs در کنار هم نخواهند بود لذا include مربوط به هر کتابخانه در داخل خودش قرار گرفته.
خب بریم سر اصل مطلب ابتدا یه پروژه ای ایجاد میکنم با نام MyLibs از هر نوعی ایجاد میکنید مهم نیست.
روی پروژه طبق تصویر راست کلیک کنید و گزینه Add library رو بزنید.
بعد چنجره زیر نماین میشه که شامل گزینه های زیر هستش :
- گزینه Internal Library مربوط هست برای زمانی که شما کتابخانه رو در داخل پروژه خودتون ایجاد کردین که معمولا مسیر واقع توسط فایل .pro مشخص خواهد شد به طور کلی کتابخانه های داخلی و غیر External رو میتونید از این قسمت شناسایی کنید.
- گزینه External library از این گزینه زمانی استفاده میشه که کتابخانه ما در مسیر پروژه ما نیستش یا به طور کلی در داخل پروژه ما قرار نگرفته دقیقا برعکس گزینه اول که میشه همون کتابخانه خارجی یا خارج از پروژه.
- گزینه System library هم مربوط میشه به کتابخانه های سیستمی هستش.
- و یک گزینه ای هم خواهیم داشت در محیط های Unix که به نام Package Library قابل مشاهده خواهد بود این گزینه هم زمانی مورد استفاده قرار میگیره که شما نیاز دارید کتابخانه رو از طریق سرویس pkg-config در ایستگاه های Unix که شامل Mac OS X و Linux هستش تنظیم کنید.
حالا ما با این ها کاری نداریم و در استاندارد ترین حالت از External Library استفاده خواهیم کرد بنابراین گزینه External Library رو انتخاب و Next میزنیم.
ضمیمه 122530
خب در این قسمت ما گزینه هایی داریم که مربوط به پیکربندی و مشخص کردن مسیر کتابخانه ای هستش که از قبل کامپایل و خروجی های lib و یا dll اون مشخص شده است.
بنابراین گزینه ها وظایف زیر رو دارند :
- گزینه Library file مربوط هست به مسیر فایل های مربوط به libs موجود در کتابخانه برای مثال مسیر lib برای کتابخانه Poco در ایستگاه ویندوزی من هستش : C:\poco-1.5.3-all\lib پس روی گزینه Browse کلیک کرده و این مسیر رو با انتخاب فایل مورد نظرم مثلا PocoNetd.lib مشخص میکنم در نهایت مسیر میشه به صورت : C:\poco-1.5.3-all\lib\PocoNetd.lib
- گزینه Include path مربوط هستش به پوشه Include مربوط به کتابخانه که شامل فایل های .h یا همون هدر هاست بنابراین برای اینکه Include مربوط به کلاس های Net رو انتخاب کنم میرم به مسیر : C:\poco-1.5.3-all\Net\include که شامل Include های مشخص برای فایل Net هست.
- گزینه Platforms مشخص کننده مسیر در فایل .pro برای نوع سیستم عامل هستش.
- گزینه Linkage - Dynamic مشخص کننده کتابخانه از نوع Dynamic یا Static و گزینه Framework هستش.
- و در آخر گزینه ای داریم که مختص ویندوز هست.
تنظیمات رو به صورت زیر انجام میدیم و Next رو میزنیم.
ضمیمه 122531
و در نهایت Finished و سپس در داخل فایل .pro کد های زیر رو خواهیم دید.
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNet
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNetd
else:unix: LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNet
INCLUDEPATH += $$PWD/../../../../../poco-1.5.3-all/Net/include
DEPENDPATH += $$PWD/../../../../../poco-1.5.3-all/Net/include
کتابخانه من آماده هستش ولی چون در Poco برای استفاده از کلاس مورد نظر پیش نیازی داریم به نام Foundation پس اون گزینه رو هم باید طبق روشی که گفتم اضافه کنیم که در نهایت به صورت زیر خواهد بود :
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNet
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNetd
else:unix: LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoNet
INCLUDEPATH += $$PWD/../../../../../poco-1.5.3-all/Net/include
DEPENDPATH += $$PWD/../../../../../poco-1.5.3-all/Net/include
win32:CONFIG(release, debug|release): LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoFoundation
else:win32:CONFIG(debug, debug|release): LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoFoundationd
else:unix: LIBS += -L$$PWD/../../../../../poco-1.5.3-all/lib/ -lPocoFoundation
INCLUDEPATH += $$PWD/../../../../../poco-1.5.3-all/Foundation/include
DEPENDPATH += $$PWD/../../../../../poco-1.5.3-all/Foundation/include
خب حالا فایل .pro رو Save کرده و روی گزینه build و بعد Run qmake کلیک میکنیم تا پروژه با تغییراتی که داده شد پیکربندی و آماده شود.
برای آزمایش کد زیر رو مینویسم و کتابخانه بدون مشکل قابل دسترسی و استفاده هستش :
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <Poco/Net/Net.h>
#include <Poco/Net/MailMessage.h>
using namespace Poco::Net;
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MailMessage mail;
}
MainWindow::~MainWindow()
{
delete ui;
}
فقط بازم تاکید میکنم نوع کامپایلری که کتابخانه رو باهاش کامپایل کردین خیلی مهمه مثلا من از قبل این کتابخانه رو با MSVC 2013 نسخه 32 بیت در مد Debug کامپایل کردم پس در Qt هم باید از مد Debug و کامپایلر MSVC 2013 با معماری 32 بیت استفاده کنید.
نه تنها Poco من این مثال رو فقط برای آموزش مراحل تعریف کتابخانه زدم بنابراین از تمامی کتابخانه ها به همین روش میتونید استفاده کنید.
شاد و پیروز باشید.
نقل قول: معرفی و آموزش C++/Qt به صورت گام به گام
دوستان همانطور که از قبلا اشاره شده بود طی این مدت سعی کردم با بهینه سازی آموزش های جاری و توسعه آن و همچنین اشاره به سوالاتی که درخواست شده بود کرده ام که در نهایت منجر به ویرایش و دریافت مجوز برای کتاب به صورت رسمی شد بنابراین شما میتوانید برای دریافت "آموزش زبان ++C همراه با کتابخانه Qt 5.5.x (سطح مقدماتی ویرایش ۲)" اقدام نمایید.
بررسی و دریافت نسخه رسمی کتاب
برای مشاهده ادامه فعالیتها به انجمنهای https://forum.iostream.ir رجوع نمایید.