PDA

View Full Version : پرسش و پاسخ تاپیک معرفی و آموزش C++‎‎‎‎‎‎/Qt به صورت گام به گام



tux-world
جمعه 10 مرداد 1393, 08:36 صبح
سلام به همه دوستان عزیز. از اونجایی که تاپیک:معرفی و آموزش C++‎‎‎‎‎‎‎‎/Qt به صورت گام به گام محلی مناسبی برای سوال پرسیدن نیست و این چنین تاپیکی احساس میشد و خودم هم سوالهای زیادی تو ذهنم بود برای اینکه جای مناسبی باشه برای سوال کردن تا اون تاپیک از موضوعش منحرف نشه ایجاد کردم این پست رو. دوستان منجمله بنده در صورتی که سوال داشتید یا انتقاد پیشنهاد یا یه سری موضوعاتی که به ذهنتون میرسه اینجا مطرح کنید.

tux-world
جمعه 10 مرداد 1393, 08:40 صبح
تو آموزش و این لینک (http://barnamenevis.org/showthread.php?436304-معرفی-و-آموزش-C-‎‎-Qt-به-صورت-گام-به-گام&p=1955008&viewfull=1#post1955008) بعد اینکه ما دیالوگ رو درست کردیم من این قسمت رو درست متوجه نشدم:



MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()

{
delete ui;
}



ما الان دو تا setupUi داریم یکی این و یکی اینکه برای از بین بردن و بازگدوندن فضایی که دیالوگ بعد اینکه نمایش داده چرا از :

MainWindow::~MainWindow()



استفاده کردیم؟ اینطوری القا میشه که کل برنامه رو میخواد ببنده و حذف کنه.
ممنون

tux-world
جمعه 10 مرداد 1393, 09:14 صبح
سوال دیگه این که برای اینکه به صورت استاتیک بخواییم برنامه رو کامپایل کنیم گفتید که هزینشو باید بدیم. یعنی بعد پرداخت قابلیتی ارائه میشه که میتونیم به صورت استاتیک کامپایل کنیم برنامه رو؟

کامبیز اسدزاده
جمعه 10 مرداد 1393, 09:33 صبح
تو آموزش و این لینک (http://barnamenevis.org/showthread.php?436304-معرفی-و-آموزش-C-‎‎-Qt-به-صورت-گام-به-گام&p=1955008&viewfull=1#post1955008) بعد اینکه ما دیالوگ رو درست کردیم من این قسمت رو درست متوجه نشدم:



MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()

{
delete ui;
}



ما الان دو تا setupUi داریم یکی این و یکی اینکه برای از بین بردن و بازگدوندن فضایی که دیالوگ بعد اینکه نمایش داده چرا از :

MainWindow::~MainWindow()



استفاده کردیم؟ اینطوری القا میشه که کل برنامه رو میخواد ببنده و حذف کنه.
ممنون

در C++‎‎‎‎‎‎ ما تعریفی داریم از Constructor و Destructor حالا .... این کد در بسته شدن کل برنامه تاثیری نداره ولی وظیفش ویران کردن کلاس MainWindow هستش که هنگام اجرای این خط کلاس MainWindow ویران میشه که یکی از روش های ویران سازی کلاس ها در C++‎‎‎‎‎‎ میباشد.

به این مثال توجه کنید :



#include <iostream>


using namespace std;


class Line
{
public:
void setLength(double len);
double getLength(void);
Line(); // This is the constructor declaration
~Line(); // This is the destructor: declaration


private:
double length;
};


// Member functions definitions including constructor
Line::Line(void)
{
cout << "Object is being created" << endl;
}
Line::~Line(void)
{
cout << "Object is being deleted" << endl;
}


void Line::setLength(double len)
{
length = len;
}


double Line::getLength(void)
{
return length;
}
// Main function for the program
int main()
{
Line line;


// set line length
line.setLength(6.0);
cout << "Length of line : " << line.getLength() << endl;


return 0;
}



ساده بخوام توضیح بدم به این صورت هستش که آبجکت در آغاز زندگی خودش ایجاد میشه و بعد از اجرا شدن مجددا توسط مخرب کننده از بین میره این یکی از بهترین شیوه های مدیریتی بر از بین بردن آبجکت های ایجاد شده بعد از تعریف و استفاده اون هستش.

که در این مثالی که شما پرسیدین نیز همین کار رو انجام میده یعنی آبجکت های موجود در کلاس MainWindow ابتدا تعریف / شناسایی شده و سپس بعد از استفاده از اونها مجددا تخریب میشوند که توسط نماد تقریبی یا در اینجا با نام (تیلدا (~) ) مورد استفاده قرار میگیره.

عمل تخریب بعد از آغاز کار شیئ خیلی مفید هست و مانع بر جای ماندن خزو خیلل ها بعد از Release میشه و این مفیده مثل این مینونه که بندو بساط رو تو یه پارک پهن کنی خوش بگذروتی بعدشم که پا شدی آتاشغال از خودت بجا نذاری ! :بامزه:


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


در حالت استاتیک قابلیت هایی افزوده نمیشه که در این قسمت هم یک توضیح مختصری در رابطه با مزیت ها و معایبشون تعریفی کردم : http://barnamenevis.org/showthread.php?462833-%D9%85%D9%82%D8%A7%DB%8C%D8%B3%D9%87-%DA%A9%D8%A7%D9%85%D9%BE%D8%A7%DB%8C%D9%84-Static-%D9%88-Dynamic

ولی در صورتی که شما از حالت لیسانس استفاده کنید IDE مربوط به Qt Creator دارای ویژگی های بیشتر و بهتری هستش که نامشم Qt Enterprise هست و دارای ویژگی های Qt Charts , Qt Quick Enterprise Controls , Qt Data Visualization , Qt Enterprise Tooling , Qt Virtual Keyboard , Qt Purchasing و ... هستش که کمی بهتر و امکانات بیشتری از قبیل کامپوننت های پیشرفته در اختیار توسعه دهندگان قرار میده.

از لحاظ خروجی و کیفیت .. سرعت و ... با نسخه رایگان هیچ فرق آن چنانی نداره فقط به اینم دقت کنید که وقتی از نسخه لیسانس استفاده میکنید میتونید سورس Qt رو تغییر بدین یا هر بلایی سرش بیارید ولی در نسخه رایگان این کار غیر قانونی هستش...

از نظر من ارزش هزینه کردن نداره چون کاری که نسخه Free انجام میده بدک نیست ! :لبخند:

tux-world
جمعه 10 مرداد 1393, 11:23 صبح
حالا این هزینش مگه چقدره؟ destructor پس به صورت اتومات انجام میشه ولی نوشتنش ضروریه درسته؟ ولی فکر کنم تو جاوا اینطوری نیست خودش بدون نوشتن و تعریف هم همینکار رو میکنه

کامبیز اسدزاده
جمعه 10 مرداد 1393, 12:48 عصر
حالا این هزینش مگه چقدره؟ destructor پس به صورت اتومات انجام میشه ولی نوشتنش ضروریه درسته؟ ولی فکر کنم تو جاوا اینطوری نیست خودش بدون نوشتن و تعریف هم همینکار رو میکنه

در C++ هم در صورت نوشته نشدن به صورت خود کار صورت میگیره :) ولی نوشتنش کار رو تضمینی میکنه.
در رابطه با هزینه Qt Enterprise هم اینجارو ببینید نسبت به نوع پلتفرم قیمتش رو بهتون میده : http://qt.digia.com/buy/