• 5778阅读
  • 7回复

一个简单的qt程序里的问题 [复制链接]

上一主题 下一主题
离线knowkjava
 
只看楼主 倒序阅读 楼主  发表于: 2009-12-07
  1. #include <QApplication>
  2. #include <QPushButton>
  3. int main(int argc,char *argv[])
  4. {
  5.     QApplication app(argc,argv);
  6.     QPushButton *button = new QPushButton("Quit");
  7.     QObject::connect(button,SIGNAL(clicked)),&app,SLOT(quit()));
  8.     button->show();
  9.     return app.exec();
  10. }

不解一:既然exec是QApplication的静态方法,为什么还要声明一个QApplication的实例app?干嘛不直接调用QApplication.exec()?就像java里那样
不解二:同样是静态方法,QApplication的exec和QObject的connect写法不一样阿?::这个符号是什么意思?是不是想到于java中的.
不解三:java.lang.*包里的类在类里使用时是不用导入的。这里QObject没有在头文件里导入,而 QApplication,QPushButton却在头文件里导入了。这是为什么呢?是不是也像java里那样?如果是这样的话,请问哪些类引用时不需要在头文件里导入,哪些类需要导入呢?
离线lee520
只看该作者 1楼 发表于: 2009-12-07
坐等解答,顺便帮顶,顺便问下,您能把您的环境变量发下给我看下么,感觉我的设的总是不对
离线sbtree
只看该作者 2楼 发表于: 2009-12-07
一:QApplication类只不过是对操作系统进程的一个包装,理论上讲,类似于系统API对进程的操控函数都应该做成静态的,这里声明一个app实际上是为了下面能够利用信号和槽的机制。
二:可以写成一样的::样式,这一点建议楼主要做做c++的功课
三:QApplication继承至QObject,不用再导入是理所当然的,编译器是可以是别的到的

从楼主的问题来看,楼主对C++还需进一步认识
windows 7 + VC++2008 + Qt4.5.2
离线yj_yulin

只看该作者 3楼 发表于: 2009-12-07
试答一下:
一.声明实例其实是因为构造函数里面作了一些初始化的动作,否则直接调用QApplication.exec()会出问题的,java在你的程序运行前,已经由jvm作了很多工作了,但是c++是没有的.
二.写法不同而已,不用过于计较,静态方法的调用本来就可以这样子来调用,可以用类名来调用,如果是实例,也可以直接使用
三.你想用什么就是引用什么,当然,有些引用文件其实已经暗地里给你引用过来了,因为它里面也用到了一些其它的类,如上面的qobject,肯定是#include <QApplication>
#include <QPushButton>在这里面已经引用了,你可以顺便用,不过你不确定的话,其实可以加上#include<QObject>,这样也正规点

其实上面基本还是c++的的语法问题,看来楼主基本没怎么看c++基础啊
离线knowkjava
只看该作者 4楼 发表于: 2009-12-07
感谢sbtree老师的耐心指导,我以前是做java的,c放了好多年了
我会努力的。以前,现在,将来
离线knowkjava
只看该作者 5楼 发表于: 2009-12-07
也感谢yj_yulin老师的指导。我确实没怎么看c++基础。没办法的,项目很急,直接下demo照抄
离线北落师门
只看该作者 6楼 发表于: 2009-12-07
先看C++啊  都是最基本的
离线knowkjava
只看该作者 7楼 发表于: 2009-12-08
看来我需要去看看C++了
各位C++的前辈帮忙推荐一本很经典的C++基础书?先谢谢了
快速回复
限100 字节
 
上一个 下一个