• 5138阅读
  • 6回复

关于信号和槽.....一个初学者的问题 [复制链接]

上一主题 下一主题
离线tresss
 

只看楼主 倒序阅读 楼主  发表于: 2006-12-07
关于信号和槽.....一个初学者的问题
刚开始学QT....看了一份教程,可能比较老...很多地方与现在的QT版本对不上.


现在看到信号和槽的链接上.代码如下:

#include <qapplication.h>
#include <qwidget.h>
#include <qpushbutton.h>
//#include <stdlib.h>


class MWindow:public QWidget
{
  Q_OBJECT
  public:
    MWindow();
  public slots:
    void MwExit();
  private:
    QPushButton *BtnExit;
};

MWindow::MWindow()
{
  setGeometry(200,200,100,300);   //the point of Mainform When start

  BtnExit=new QPushButton("Select All",this);
  BtnExit->setGeometry(10,10,80,30);
  BtnExit->setFont(QFont("Times",12,QFont::Bold,TRUE));

  connect(BtnExit,SIGNAL(clicked()),this,SLOT(MwExit()));
}

void MWindow::MwExit()
{
  BtnExit->setGeometry(30,30,60,30);
  exit(0);
}

void main(int argc,char **argv)
{
  QApplication a(argc,argv);
  MWindow w;
  w.show();
  a.exec();
}


这里编译为什么通不过...提示很多"undefined reference to `vtable for MWindow'"

如果将上边的Q_OBJECT注释掉之后,编译是成功的.但是这时点击按钮没有任何反应.........

错误在哪里呢?!
[ 此贴被XChinux在2006-12-24 10:07重新编辑 ]
离线cavendish

只看该作者 1楼 发表于: 2006-12-07
没有moc
注意你的编译过程

建议使用tmake/qmake辅助生成makefile
只看该作者 2楼 发表于: 2006-12-08
或者你将写成.h,.cpp和main.cpp这种形式
我记得我最开始也遇到这种情况,改写成这样就行了,也不知道是为什么。你试试看
离线soyeon
只看该作者 3楼 发表于: 2006-12-11
我刚开始的时候也遇到这样的问题,当时是把2个文件合成了一个文件才可以通过编译的,所以说这个问题的原因不出在这里,请问哪个高手知道原因的,请告诉我们一下,谢谢了。。。
离线soyeon
只看该作者 4楼 发表于: 2006-12-11
好像 不用那个 Q-OBJECT就 OK了,
离线浪漫天使
只看该作者 5楼 发表于: 2006-12-11
把下面的部分 放到一个 头文件里面,就叫main.h
#include <qapplication.h>
#include <qwidget.h>
#include <qpushbutton.h>
//#include <stdlib.h>


class MWindow:public QWidget
{
  Q_OBJECT
  public:
    MWindow();
  public slots:
    void MwExit();
  private:
    QPushButton *BtnExit;
};

把下面放到main.cpp里面
#include "main.h"

MWindow::MWindow()
{
  setGeometry(200,200,100,300);   //the point of Mainform When start

  BtnExit=new QPushButton("Select All",this);
  BtnExit->setGeometry(10,10,80,30);
  BtnExit->setFont(QFont("Times",12,QFont::Bold,TRUE));

  connect(BtnExit,SIGNAL(clicked()),this,SLOT(MwExit()));
}

void MWindow::MwExit()
{
  BtnExit->setGeometry(30,30,60,30);
  exit(0);
}

void main(int argc,char **argv)
{
  QApplication a(argc,argv);
  MWindow w;
  w.show();
  a.exec();
}

OK
离线wangowen

只看该作者 6楼 发表于: 2006-12-11
推荐使用qmake生成makefile
快速回复
限100 字节
 
上一个 下一个