PDA

View Full Version : مشکل در فرم



dj_dj_dj
جمعه 18 اردیبهشت 1394, 18:18 عصر
سلام دوستان. من تازه شروع کردم به یادگیری Qt و طراحی به صورت GUI

من وقتی فرم رو باز میکنم و یه شی بهش اضافه میکنم مثلا button بعد که go to slot میزنم و تابعش ساخته میشه توو فایل mainwindow بعد که میام پاک میکنم هم دگمه رو از روو فرم وهم تابعش رو از فایل mainwindow بعد که دوباره کامپایل میکنم خطا میگیره که pushbuttoon وجود نداره خب درسته وجود نداره و من پاکش کردم چون بهش دیگه نیازی ندارم. واسه چی باید خطا بگیره ؟ نه شی اش هست توو فرم و نه توو تابع mainwindow . یعنی واسه هر تمرین کردن باید از صفر یه پروژه جدید بسازم خسته شدم .
موقع کامایل توو فایل moc_mainwindow.cpp خطا میگیره undefined reference to `MainWindow::on_pushButton_clicked()'
بعد از انجام go to slot انگار یه تغییراتی توو فایل moc_mainwindow.cpp ایجاد میشه که وقتی دستی میام شی رو از روو فرم و همچنین تابعش رو از توو mainwindow.cpp پاک میکنم ولی تغییرات ایجاد شده توو اون فایل پاک نمیشه .

و یه سوال دیگه وقتی میایم کلا فرم روو توو فایل main.cpp تعریف میکنیم و میسازیم حالتی واسه دیدن گرافیکی فرم نداره؟ حتما باید کامپایل بشه بعد دید فرم رو؟
تشکر

chikar
جمعه 18 اردیبهشت 1394, 19:18 عصر
سلام دوستان. من تازه شروع کردم به یادگیری Qt و طراحی به صورت GUI

من وقتی فرم رو باز میکنم و یه شی بهش اضافه میکنم مثلا button بعد که go to slot میزنم و تابعش ساخته میشه توو فایل mainwindow بعد که میام پاک میکنم هم دگمه رو از روو فرم وهم تابعش رو از فایل mainwindow بعد که دوباره کامپایل میکنم خطا میگیره که pushbuttoon وجود نداره خب درسته وجود نداره و من پاکش کردم چون بهش دیگه نیازی ندارم. واسه چی باید خطا بگیره ؟ نه شی اش هست توو فرم و نه توو تابع mainwindow . یعنی واسه هر تمرین کردن باید از صفر یه پروژه جدید بسازم خسته شدم .
موقع کامایل توو فایل moc_mainwindow.cpp خطا میگیره undefined reference to `MainWindow::on_pushButton_clicked()'
بعد از انجام go to slot انگار یه تغییراتی توو فایل moc_mainwindow.cpp ایجاد میشه که وقتی دستی میام شی رو از روو فرم و همچنین تابعش رو از توو mainwindow.cpp پاک میکنم ولی تغییرات ایجاد شده توو اون فایل پاک نمیشه .

و یه سوال دیگه وقتی میایم کلا فرم روو توو فایل main.cpp تعریف میکنیم و میسازیم حالتی واسه دیدن گرافیکی فرم نداره؟ حتما باید کامپایل بشه بعد دید فرم رو؟
تشکر

شما وقتی یه دکمه می سازید، , و از go to slot استفاده می کنید، اعلان کدتون تو فایل MainWindow.h می ره و تعریف در فایل MainWindow.cpp ولی شما مقادیر MainWindow.cpp رو فقط پاک می کنید، ولی برای پاک کردن کامل باید از تو هر دو فایل کدتون رو پاک کنید برید تو MainWindow.h و کد زیر رو هم پاک کنید

void on_pushButton_clicked();


اگر تو main یا هر جایی کد می نویسید، باید کامپایل کنید تا خروجی رو ببینید دیگه:متعجب:، مگه اینکه تو دیزاینر ویجتی رو اضافه کنید، که اون هم طراحیش فقط قابل دیدن هست!!!

dj_dj_dj
جمعه 18 اردیبهشت 1394, 20:09 عصر
ممنون . سوال اولم حل شد مرسی .
در مورد سوال دومم منظورم همون دیزانش بود . مثلا یکی میای شما از قسمت طراحی یه button مثلا میزاری اسمش فلان میزاری این طراحیش جلو چشمته منظور روو طراحیش میتونی تغییراتی ایجاد کنی مثلا سایزشو عوض کنی تایلت عوض کنی موقعیتشو تغییر بدی مثلا go to slot بزنی تابعش میره توو mainwindow اونجا کد میزنی چیکار کنه
ولی یکی میای توو تابع main.cpp دگمه تعریف میکنی بعدکه کامپایل میکنی محیط گرافیکی رو میبینی . میخوام ببینم درست موقع کدنویسی نمیشه محیط دیزاین رو دید؟ مثلا بعد تعریف تابع دگمه روو فرم مشخص بشه
عذر میخوام من تحت کنسول کار کردن دید درست حسابی از محیط گرافیکی ندارم شرمنده

chikar
جمعه 18 اردیبهشت 1394, 21:41 عصر
خیر،باید کامپایل کنید
کامپایل کردن یعنی اینقدر سخته؟ تو کیوت کریتور، (گوشه پایین سمت چپ)، مد رو بذارید روی Realease و کامپایل کنید، هم سریع تر هست و هم روش اصولی تر نسبت به دیباگ!