PDA

View Full Version : مشکل لینک بعد از اضافه کردن سیگنال



kitten
دوشنبه 24 آبان 1389, 10:13 صبح
سلام دوستان من داشتم یه برنامه با کیوتی می نوشتم که تا سیگنال ها را به برنامه اضافه کردم برنامه دیگه کامپایل نشد
می تونید بگید مشکل چیه؟
فایل main :

#include "calc.h"
#include <QtGui>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
calc *mycalc = new calc;
mycalc->setInterface();
mycalc->show();
return a.exec();
}

calc.h

#include <QWidget>

class QLabel;
class QPushButton;
class QLineEdit;

class calc : public QWidget
{
Q_OBJECT

public:
calc(QWidget *parent = 0);
void setInterface();
private slots:
void button0c();
void button1c();
void button2c();
void button3c();
void button4c();
void button5c();
void button6c();
void button7c();
void button8c();
void button9c();
private:
QPushButton *buttonadd;
QPushButton *buttonmines;
QPushButton *buttoncross;
QPushButton *buttondivide;
QPushButton *button0;
QPushButton *button1;
QPushButton *button2;
QPushButton *button3;
QPushButton *button4;
QPushButton *button5;
QPushButton *button6;
QPushButton *button7;
QPushButton *button8;
QPushButton *button9;
QPushButton *buttonsin;
QPushButton *buttoncos;
QPushButton *buttontan;
QPushButton *buttoncot;
QLineEdit *le1;


};
calc.cpp
#include <QtGui>
#include"calc.h"

calc::calc(QWidget *parent)
:QWidget(parent)
{
QGridLayout *layout = new QGridLayout;
le1 = new QLineEdit;
button7 = new QPushButton;
button7->setText("7");
button8 = new QPushButton();
button8->setText("8");
button9 = new QPushButton();
button9->setText("9");
button4 = new QPushButton;
button4->setText("4");
button5 = new QPushButton();
button5->setText("5");
button6 = new QPushButton();
button6->setText("6");
button1 = new QPushButton();
button1->setText("1");
button2 = new QPushButton();
button2->setText("2");
button3 = new QPushButton();
button3->setText("3");
button0 = new QPushButton();
button0->setText("0");
buttondivide = new QPushButton;
buttondivide->setText("/");
buttoncross = new QPushButton;
buttoncross->setText("*");
buttonadd = new QPushButton;
buttonadd->setText("+");
buttonmines = new QPushButton;
buttonmines->setText("-");
buttonsin = new QPushButton;
buttonsin->setText("Sin");
buttoncos = new QPushButton;
buttoncos->setText("Cos");
buttontan = new QPushButton;
buttontan->setText("Tan");
buttoncot = new QPushButton;
buttoncot->setText("Cot");
layout->addWidget(le1,0,0);
layout->addWidget(button7,1,0);
layout->addWidget(button8,1,1);
layout->addWidget(button9,1,2);
layout->addWidget(buttondivide,1,3);
layout->addWidget(button4,2,0);
layout->addWidget(button5,2,1);
layout->addWidget(button6,2,2);
layout->addWidget(buttoncross,2,3);
layout->addWidget(button1,3,0);
layout->addWidget(button2,3,1);
layout->addWidget(button3,3,2);
layout->addWidget(buttonadd,3,3);
layout->addWidget(button0,4,1);
layout->addWidget(buttonmines,4,3);
layout->addWidget(buttonsin,1,4);
layout->addWidget(buttoncos,2,4);
layout->addWidget(buttontan,3,4);
layout->addWidget(buttoncot,4,4);
this->setLayout(layout);
connect(button0, SIGNAL(clicked()),this,SLOT(button0c()));
connect(button1, SIGNAL(clicked()),this,SLOT(button1c()));
connect(button2, SIGNAL(clicked()),this,SLOT(button2c()));
connect(button3, SIGNAL(clicked()),this,SLOT(button3c()));
connect(button4, SIGNAL(clicked()),this,SLOT(button4c()));
connect(button5, SIGNAL(clicked()),this,SLOT(button5c()));
connect(button6, SIGNAL(clicked()),this,SLOT(button6c()));
connect(button7, SIGNAL(clicked()),this,SLOT(button7c()));
connect(button8, SIGNAL(clicked()),this,SLOT(button8c()));
connect(button9, SIGNAL(clicked()),this,SLOT(button9c()));
}
void calc::button0c() {

}
void calc::button1c() {

}
void calc::button2c() {

}
void calc::button3c() {

}
void calc::button4c() {

}
void calc::button5c() {

}
void calc::button6c() {

}
void calc::button7c() {

}
void calc::button8c() {

}
void calc::button9c() {

}
void calc::setInterface()
{
int WIDTH = 320;
int HEIGHT = 240;
int screenWidth;
int screenHeight;
int x, y;
QDesktopWidget *desktop = QApplication::desktop();
screenWidth = desktop->width();
screenHeight = desktop->height();
x = (screenWidth - WIDTH) / 2;
y = (screenHeight - HEIGHT) / 2;
this->resize(WIDTH, HEIGHT);
this->move( x, y );
this->setWindowTitle("Calculator");
this->setToolTip("Center window");
}

saeedIRHA
دوشنبه 24 آبان 1389, 15:20 عصر
سلام،
لطفا پیغام خطایی که میگیرد رو اینجا بگذارید که بشه راحتتر کمکتون کرد، چون من برنامهٔ شمارو کامپایل کردم و به درستی‌ کامپایل و اجرا شد.
درضمن وقتی‌ تغییری در فایل header میدین یک بار ,قبل از کامپایل برنامه با nmake یا make
qmake رو اجرا کنید که فایل make آپدیت بشه

kitten
دوشنبه 24 آبان 1389, 17:53 عصر
1>------ Build started: Project: calc, Configuration: Release Win32 ------
1>Moc'ing calc.h...
1>Linking...
1>calc.obj : error LNK2001: unresolved external symbol "public: virtual struct QMetaObject const * __thiscall calc::metaObject(void)const " (?metaObject@calc@@UBEPBUQMetaObject@@XZ)
1>calc.obj : error LNK2001: unresolved external symbol "public: virtual void * __thiscall calc::qt_metacast(char const *)" (?qt_metacast@calc@@UAEPAXPBD@Z)
1>calc.obj : error LNK2001: unresolved external symbol "public: virtual int __thiscall calc::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@calc@@UAEHW4Call@QMetaObject@@HPAPAX @Z)
1>D:\calc\Release\calc.exe : fatal error LNK1120: 3 unresolved externals
1>Build log was saved at "file://d:\calc\calc\Release\BuildLog.htm"
1>calc - 4 error(s), 0 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
سلام ممنون که جواب دادین
منم فکر می کنم باید کامپایل بشه فکر کنم این برنامه ای که باید برای فایلهام یه فایل moc بسازه خراب شده اخه وقتی به خط

1>Moc'ing calc.h...

می رسه یه ارور می ده که باید دیباگ کنم اما من no را می زنم
نمیدونم چه طوری باید دوباره make کنم اونی را که گفتید می شه توضیح بدهید

حامد مصافی
دوشنبه 24 آبان 1389, 19:23 عصر
clean & build

در پست ديگري (http://www.barnamenevis.org/forum/showthread.php?t=239160)جوابي دادم كه وقيقاَ به مشكل شما نيز مرتبط است



معمولا اين خطا زماني اتفاق مي افتد كه كلاسي كه در آخرين كامپايل metaData نداشته صاحب آن شده، براي حل اين مشكل بايد به فايل pro تلنگري بزنيد، براي مثال يك فاصله بي معني در آن بنويسيد و سپس پروژه را rebuild كنيد. در صورتي كه مشكل حل نشد پروژه را clean كرده و فايل هاي make را حذف كنيد سپس build كنيد. يا اينكه شخصا دستور qmake را اجرا كنيد.