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重新编辑 ]