当前位置: 代码迷 >> 综合 >> error: ‘class QApplication’ has no member named ‘setMainWidget’
  详细解决方案

error: ‘class QApplication’ has no member named ‘setMainWidget’

热度:92   发布时间:2024-01-10 14:48:47.0

原文:http://hi.baidu.com/ajian1453/blog/item/411889df064f23c938012f3f.html


习惯了windows下的基于GUI的应用程序开发,突然想想linux下该如何开发一个图形应用程序呢?查了查资料,发现QT是个好东西,于是迫不及待的在ubuntu8.04下试了试。

首先呢, 先找到一个教程, 照着教程试试:

http://www.qiliang.net/qt/tutorial1-01.html

不得不说, 这个教程很不错, 讲解比较细致,也容易懂。

接着,开始自己敲代码:

$ mkdir HelloWorld

$ cd HelloWorld

$ vi HelloWorld.cpp

代码内容如下:

// HelloWorld.cpp

#include <qapplication.h>

#include <qpushbutton.h>

int main(int argc, char** argv)

{

    QApplication a(argc, argv);

    QPushButton hello("Hello World!", 0);

    hello.resize(300, 130);

    a.setMainWidget(&hello);

    hello.show();

    return a.exec();

}

代码什么意思我也不说了, 如果你熟悉windows下的图形界面开发, 你会发现这些代码非常容易懂, 而且上面的教程里面对每句代码有很好的解释。

代码敲完了, 开始该编译了吧:

$ qmake -project

令人沮丧的是, 居然不认识qmake,不过有提示:

The program 'qmake' can be found in the following packages:

* libqt4-dev

* qt3-dev-tools

看看上面的提示, 似乎libqt4-dev这个版本比较新呀, 于是作为首先的安装对象:

$ sudo apt-get install libqt4-dev

哇, 速度还真不错, 5分钟就搞定了

重新编译:

$ qmake -project

$ qmake

$ make

g++ -c -pipe -O2 -Wall -W -D_REENTRANT -DQT_NO_DEBUG -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/share/qt4/mkspecs/linux-g++ -I. -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtCore -I/usr/include/qt4/QtGui -I/usr/include/qt4/QtGui -I/usr/include/qt4 -I. -I. -I. -o HelloWorld.o HelloWorld.cpp

HelloWorld.cpp: In function ‘int main(int, char**)’:

HelloWorld.cpp:9: error: ‘class QApplication’ has no member named ‘setMainWidget’

make: *** [HelloWorld.o] Error 1

郁闷呀, 前面2步没问题, 又出问题了, 不过, 不要慌, 看看错误提示先:

HelloWorld.cpp:9: error: ‘class QApplication’ has no member named ‘setMainWidget’

这句似乎比较能说明问题了, 没有这个成员函数, 怎么办? google吧, g.cn回车, 查一查,终于找到问题所在了:

http://www.gidforums.com/t-13690.html

呵呵, 原来是版本的问题, setMainWidget是Qt3的,而在Qt4中,这个函数已经过时了,

于是,For an immediate fix, you can define QT3_SUPPORT:

//

// Define QT3_SUPPORT before including any qt headers

//

#define QT3_SUPPORT

#include <qapplication.h>

#include <qpushbutton.h>

好,加上

#define QT3_SUPPORT

然后重新编译, 哈哈, 成功编译, 发现HelloWorld目录下面多了一些文件, 其中有一个绿色的

HelloWorld, 我想这个应该就是可执行文件了吧, 先不管, 执行一把:

$ ./HelloWorld

哈哈, 爽, 终于出来了:



兴奋一下, 于是写成上文,关于QT编程进一步的知识, 完全可以照着上面的教程去实际操作一下。

下面这篇文章:

http://blog.chinaunix.net/u2/60529/showart_1111263.html

也是一篇入门文章, 看看演练一下也不错。

从上面的例子来看, 这种写法似乎很熟悉, MFC? 呵呵, 好像是的哟, 如果你对MFC很熟悉, 然后网上找一些教程以及查看一下QT的相关文档如:

http://doc.trolltech.com/4.1/classes.html

我想写一些一般的GUI应用程序应该是不成问题的。

  相关解决方案