首先我们来看一下具体的一个问题:
#include<QtGui>
class myWidget : public QWidget
{
public:
myWidget();
~myWidget();
virtual void mousePressEvent(QMouseEvent *e);
private:
bool m_isfullscreen;
};
myWidget::myWidget(): QWidget();
{
m_isfullscreen = false;
}
void myWidget::mousePressEvent(QMouseEvent *e)
{
if(m_isfullscreen){
this->showNormal();
m_isfullscreen = false;
}
else{
this->showFullScreen();
m_isfullscreen = true;
}
}
int main(int argc, char* argv[])
{
QApplication app(argc, argv);
app.applicationName();
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
myWidget* pWidget = new myWidget;
QLabel label(pWidget);
label.setText(QObject::tr("同一个世界,同一个梦想"));
pWidget->show();
return app.exec();
}
大家编译的时候总是提示“undefined reference to `vtable for myWidget'”的错误
网上对这个问题说得五花八门的,文件没有分开的,有说是Q_OBJECT的问题
等等,反正回答是五花八门。其实主要问题在于大家可能习惯了在VC下工作老是
不写析构函数的实现(VC已经帮我们把这个做好了,即使它没有帮你写它也能发现
这个问题,而不是傻不拉几地告诉你“undefined reference to `vtable for myWidget'”)
在VC下编译肯定能通过,没问题,但是到了Qt的编译器Qmake下就行不通了,
你必须得写出析构函数的实现来。
myWidget::~myWidget()
{
}
否则怎么编译也通不过的。
所以大家在从一个开发环境到另一个开发环境的时候不要想当然,毕竟Microsoft和
TrollTeck的想法不一样的,呵呵。
[ 此帖被0708yc在2009-07-05 16:06重新编辑 ]