• 7940阅读
  • 8回复

自己两个月学习QT的学习心得!共享!希望能对新手有一点点帮助! [复制链接]

上一主题 下一主题
离线wangbenqq
 

只看楼主 倒序阅读 楼主  发表于: 2008-04-25
— 本帖被 XChinux 执行加亮操作(2008-04-25) —
将近两个月的QT开发,写一些积累
首先是QT desinger的使用,用desinger来画界面,生成一个.ui文件,在以前的版本中都可以用uic命令来得到.h和.cpp文件,但是在QT4中只能得到.h文件,.cpp文件要自己写.以前的命令是uic -o *.h *.ui生成.h文件,用uic -i *.h -o *.cpp *.ui来生成.cpp文件,但是现在只能用前一个命令来生成ui_*.h文件,剩下的*.h和*.cpp文件要自己写,main.cpp也得自己写,别人怎么写,自己照着写就好!
做好界面之后就该在.cpp里面添加功能函数了。
主要的就是connect连接的singal和slots。这是QT的一个新的概念,和VC里的消息相应挺像的。文档里介绍了三种方法,其实直接自己写就好,根据自己的需要,根据QT类中提供的singal和slots,有需要的就直接调用,没有需要的就自己写,在定义singal和slots的时候要注意一般都定义为private slots(singal)。定义为私有的,而且别忘了加slots和singal关键字,如果不加这个关键字,它只是一个函数而不是信号或者槽了,在CONNECT的时候就没法调用。
在定义信号和槽的时候还可以使用QMetaObject::connectSlotsByName(this);自动连接以名字命名的SLOTS,比如on_pushButton_clicked(),这样就不用定义connect了,当点击pushButton的时候,就可以自动的连接这个SLOTS了。很方便的。

有了以上的两个步骤,就基本上可以做出基本的界面程序了,即有了界面也有了消息相应。
下面介绍一下我用过的几个类,一个主要的就是Model/View。很多界面都要用到这个类型。Model用来获取数据和底层交互,而View用来显示Model所获得的信息,将它显示出来。要显示文件系统就用QDirModel+QTreeView类,应该也可以用QDirModel+QTreeWidget但是没有试过!呵呵!
View类有QTreeView,QTableView,QListView,Model类现成的不是太多,可以根据自己的需要来写,具体文档中有介绍如何编辑自己的MODEL。接下来就要多显示的东东进行操作,对于托放在文档中有专门的介绍,这里涉及了一个我以前没用过的类型MIMI类型。托放的时候不同的部件之间接受的数据是用这个类型定义的,统一接收这个类型的数据,可以用QString和她一起使用。具体实现托放在文档中使用直接搜索drag and drop就好。
但是我不想使用托放的方法来传递数据,我想用按钮来实现,当点击按钮的时候传递数据,在QDirModel中,当点击的时候可以获取index。connect(ui.treeView,SIGNAL(clicked(QModelIndex &) ),ui.treeView,SLOT(setCurrentIndex(QModelIndex &))。当点击Tree时,获取当前点击的INDEX,然后 QFileInfo fi3;fi3=model->fileInfo(inde);就可以获取到当前点击的文件的文件信息了。这个东东我是绕了好大一圈之后才弄明白这样使用的!唉!浪费了好多时间。

以上主要是Model/View的使用。

接下来我遇到的问题是使用QTableWidget,它的使用要比QTableView使用起来方便多了,因为他是继承的QTableView。它的使用直接看这个类就好,不难的。

我又遇到的一个问题是设置进度条,setValue()里面的数值设置,现设置最大值setRange(0,max),然后在setValue()里填上比MAX小的数值即可,它会自己计算%的。

我还用到了QFile类,这个类是实现对文件的操作的。详细的就不多说了,难度都不大!

以上是两个月来,从学习到开发程序,对于在使用QT时,遇到的一些问题,希望能够对刚刚使用的新手有一点帮助吧。
可能我写的会有不对的地方,毕竟一下子也回想不起来太全面,:)希望高手能给指正!!!

其实在这期间对我帮助最大的就是这个论坛上的一个高手,具体名字就不说了,呵呵,在这里真的很感谢他。同时也很感谢版主!对我的问题回答好多,很感谢!也感谢回答过我问题的高手们!!!
离线xjcook

只看该作者 1楼 发表于: 2008-04-25
沙发
离线xjcook

只看该作者 2楼 发表于: 2008-04-25
问下楼主啊,看了你的东西,有些东西正是我感兴趣的,就是QDirModel+QTreeView,
使用connect(ui.treeView,SIGNAL(clicked(QModelIndex &) ),ui.treeView,SLOT(setCurrentIndex(QModelIndex &))是可以取得文件信息了,但是只是在鼠标点击的时候,treeView没有类似于currentChange之类的信号,所以数用键盘上下键移动导致选择的文件改变时是不会触发的,你是咋处理的。
离线wzc81614
只看该作者 3楼 发表于: 2008-04-25
3ks share
离线wuyudry

只看该作者 4楼 发表于: 2008-04-25
占个位置再看,嘿嘿!
做东西要自己遇到了问题再去处理才记得牢~!
离线浪漫天使
只看该作者 5楼 发表于: 2008-04-25
请你负责任点.不要用手动uic误导人!!!!!!!!!!!!!!!!! n多人看了你的帖子,来问我uic的问题, 凡是手动用uic的一概不理!!!!!!!!!!!!!!

在pro文件里面加入ui就可以了
qt2是
INTERFACES  = myuifilename.ui
qt3和qt4就是
FORMS += myuifilename.ui
[ 此贴被浪漫天使在2008-04-25 19:11重新编辑 ]
离线dongjfyy
只看该作者 6楼 发表于: 2008-04-25
谢谢楼主共享经验!!!!!!!!刚开始学着用,先顶一下!希望以后楼主多多指教.
QT新手,还请大家多多指教!!!
离线wangbenqq

只看该作者 7楼 发表于: 2008-04-26
5楼的兄弟!谢谢您的批评。
不过我没有太明白您的意思。我只是用动的生成了用file.ui文件生成了ui_file.h文件。然后在别的.h和.cpp里面的头文件引用了这个文件啊,以方便使用它所定义的对象啊。有什么问题么?
这样在qmake -project的时候,你说的那些都自动生成了啊??

您说的我不是太明白!
请指正!!
离线wangbenqq

只看该作者 8楼 发表于: 2008-04-26
2楼的兄弟你说的currentChange在QTreeView的基类QAbstractItemView里面有这个SLOTS,而不是信号。但是具体怎么个获得键盘的信号,我还没弄过,呵呵!你自己看一下相关的吧。能力有限
快速回复
限100 字节
 
上一个 下一个