ورود

View Full Version : ساختن کلاس از کلاسهای موجود در کیوت(مبهم)



hosseinam1370
پنج شنبه 03 اردیبهشت 1394, 15:08 عصر
دوستان ، چرا در این کلاسی که من ساختم ، دکمه نمایش داده نمیشه؟
مشکلش چیه؟

خواستم یه کلاسی از دکمه بسازم ، و از اون در main استفاده کنم.


کد main :
#include "tamrineqt.h"
#include <QtWidgets/QApplication>

#include <myWidget.h>



using namespace std;
int main(int argc, char **argv)
{
QApplication a(argc, argv);
myWidget m;
m.showMy();
return a.exec();
}




کد هدر myWidget :


class myWidget
{
public:
void showMy();

};


کد myWidget :

#include <myWidget.h>
#include <qpushbutton.h>

void showMy ()
{
QPushButton m("ok");
m.show();
}





خطایی که میده :

Error 1 error LNK2019: unresolved external symbol "public: void __thiscall myWidget::showMy(void)" (?showMy@myWidget@@QAEXXZ) referenced in function _main D:\hossein-class\c++\tamrinat c++\tamrineQt\tamrineQt\main.obj tamrineQt


Error 2 error LNK1120: 1 unresolved externals D:\hossein-class\c++\tamrinat c++\tamrineQt\Win32\Debug\\tamrineQt.exe 1 1 tamrineQt



با تشکر.

esafb52
پنج شنبه 03 اردیبهشت 1394, 23:09 عصر
void myWidget :: showMy () { QPushButton m("ok"); m.show(); }

hosseinam1370
جمعه 04 اردیبهشت 1394, 08:18 صبح
کد رو کجا اضافه کنم؟ با تشکر.

chikar
جمعه 04 اردیبهشت 1394, 22:21 عصر
کد رو کجا اضافه کنم؟ با تشکر.

همونطور که آقای esafb52 (http://barnamenevis.org/member.php?113083-esafb52) پاسخ دادند شما باید بگید که تابع showmy تون که تو فایل myWidget هست آیا یک تابع مستقل هست و یا اینکه متعلق به کلاس خاصی است پس با اضافه کردن اسم کلاس و :: به تابع showmy می تونید از اون بهره ببرید

void myWidget::showMy()
{
QPushButton m("ok");
m.show();
}


البته بهتر بود از new برای تعریف QpushButton استفاده کنید چون به این صورتی که نوشتید با اتمام تابع showmy ویجتتون هم به اتمام می رسه و بسته می شه و شاید اصلا اجراش رو نبینید!
یه نکته دیگه اگه کلاستون تو دایرکتوری اصلی قرار نداره و در همین پوشه برنامه تون قرار داره به جای <> از "" استفاده کنید و بعد از ساخت کلاس هم البته تو کیوت کریتور، رو پروژتون راست کلیک و qmake رو بزنید...
نکته آخر هم میشه جواب عنوان تاپیکی که ساختید(ساختن کلاس از کلاسهای موجود در کیوت(مبهم) )
یعنی اینکه اگه می خواید مثلا کلاستون از نوع QWidget باشه باید کلاسی که ساختید از QWidget ارث ببره، اگه می خواید کلاستون از جنس برچسب باشه باید کلاستون از QLabel ارث ببره و ... (می تونید به مستندات کیوت مراجعه کنید)



//mywidget2.h
#include <QWidget>

class mywidget2 : public QWidget
{
Q_OBJECT
public:
explicit mywidget2(QWidget *parent = 0);

};

-------------------------------------------

//mywidget2.cpp
#include "mywidget2.h"

mywidget2::mywidget2(QWidget *parent) :
QWidget(parent)
{
}