myButton是继承QPushButton的,myWidget是继承QWidget的,myDialog是继承QDialog的,它们的关系是这样的,
myButton作用很简单,就是让按钮被点击时发出的clicked()信号有标志
myButton的简单继承class myButton:public QPushButton
{
Q_OBJECT
public:
myButton(QWidget *parent=0);
void setId(int id){Id=id;}
public slots:
void click();
signals:
void clicked(int);
private:
int Id;
};
myButton::myButton(QWidget *parent):QPushButton(parent)
{
Id=0;
connect(this,SIGNAL(clicked()),this,SLOT(click()));
}
void myButton::click()
{
emit(clicked(Id));
}
//在myWidget中实例化了QPusButton和myButton class myWidget : public QWidget
{
public:
myWidget(QWidget *parent=0);
.................
public:
QPusButton *Btn;
myButton *myBtn;
.......................
}
在myDialog中实例化了myWidget PS: #include"mybutton.h" //在myDialog.h中包含了mybutton.h就好了class myDialog : public QDialog
{
Q_OBJECT
public:
myDialog(QWidget *parent=0);
public slots:
void myBtnClicked(int);
void BtnClicked();
........................
private:
myWidget *mywidget;
.....................
}
错误就发生在这里:
myDialog::myDialog(QWidget *parent):QDialog(parent)
{
mywidget=new myWidget(this);
connect(mywidget->Btn,SIGNAL(clicked()),this,SLOT(BtnClicked()));//这句编译时没错的
connect(mywidget->myBtn,SIGNAL(clicked(int)),this,SLOT(myBtnClicked(int)));//这句编译时出错,错误信息如下 }
void myDialog::myBtnClicked(int d)
{
.........
}
void myDialog::BtnClicked()
{
...........
}
编译时的出错信息
error:no matching function for call to 'myDialog::connect(myButton*&,const char[14],myDialog* const, const char[17])'
[ 此帖被磐石在2010-04-21 22:27重新编辑 ]