• 10942阅读
  • 3回复

关于QWidget的resize问题 [复制链接]

上一主题 下一主题
离线jinnsky
 

只看楼主 正序阅读 楼主  发表于: 2008-09-15
— 本帖被 XChinux 执行加亮操作(2008-09-16) —
今天开始学习Qt,版本是4.3.4,遇到一个问题,只要用到QWidget的resize方法就会报链接错误
比如:
      QWidget* pWidget = new QWidget();
            pWidget->resize(200, 300);
报错:I:\Vista\Qt\4.3.4\include\QtGui\..\..\src\gui\kernel\qwidget.h|939|undefined reference to `__imp___ZN5QSizeC1Eii|

如果是继承自QDialog类,在其构造函数里使用resize,也会报错:
class LoginDlg : public QDialog
{
public:
  LoginDlg(QWidget* p) : QDialgo(p) { resize(200, 300);  ......}
};

i:/Vista/Qt/4.3.4/lib/libQtCored4.a(d001226.o):(.text+0x0): multiple definition of `QSize::QSize(int, int)'
make.exe[1]: Leaving directory `F:/Code/C++/Qt/Qt4 Programming/LoginDlg'
debug/LoginDlg.o:i:/Vista/Qt/4.3.4/include/QtCore/../../src/corelib/tools/qsize.h:112: first defined here

从报错信息可以看出都是QSize的问题,如果不用resize一切正常~请问这是什么原因?希望各位帮忙解答,不胜感激~~~

我又试了一下setGeometry方法,也是跟上面一样的错误,只是报错信息里的QSize变成了QRect,这样实在不知道怎么设置Widget的大小了,希望各位指点~~
[ 此贴被jinnsky在2008-09-17 16:12重新编辑 ]
追求卓越 JinnSky
离线jinnsky

只看该作者 3楼 发表于: 2008-09-20
实在没有办法,只好去Qt的源代码里找,把QTDIR\src\corelib\tools下的qsize.h中的QSize::QSize(int w, int h)和qrect.h中的QRect::QRect(int aleft, int atop, int awidth, int aheight)注释掉,问题就解决了,QWidget类的resize和setGeometry都可以正常调用了~
但是我却没找到其他地方有这两个成员函数的定义,感觉很奇怪……如果有人知道的话请告知一下,谢谢~~~
追求卓越 JinnSky
离线jinnsky

只看该作者 2楼 发表于: 2008-09-16
谢谢你的回复~但我加上Q_OBJECT后还是一样的错误……
追求卓越 JinnSky
离线lee51525125
只看该作者 1楼 发表于: 2008-09-16
class LoginDlg : public QDialog
{
Q_OBJECT***********************************没有宏
public:
  LoginDlg(QWidget* p) : QDialgo(p) { resize(200, 300);  ......}
};
快速回复
限100 字节
 
上一个 下一个