资源预览内容
第1页 / 共3页
第2页 / 共3页
第3页 / 共3页
亲,该文档总共3页全部预览完了,如果喜欢就下载吧!
资源描述
Qt 创建个对话框(上)创建个对话框(上)先说明点,在 C+ GUI Programming with Qt4, 2nd 中,这章连同以后的若章起,完成了个较完整的程序个模仿 Excel 的电表格。不过这个程序挺的,且书中也没有给出完整的源代码,只是分段分段的我不喜欢这个样,我想要看到我写出来的是什么东西,这是最主要的,不是慢慢的过上章的内容才能看到的作品。所以,我打算换种式,每章只给出简单的知识,但是每章都能够运出东西来。好了,扯完了,下开始!以前说的主要是些基础知识,现在我们来真正做个东西个查找对话框。什么?什么叫查找对话框?唉唉,先看看我们的最终作品吧!好了,先新建个程,就叫 FindDialog 吧!嗯,当然还是 Qt Gui Application,然后最后步注意,Base Dialog 选择 QDialog,不是默认的 QMainWindow,因为我们要学习建对话框嘛!名字随便起,不过我就叫 finddialog 啦!Ganarate form 还是不要的。然后 Finish 就好了。打开 finddialog.h,开始编写头件。#ifndef FINDDIALOG_H #define FINDDIALOG_H #include class QCheckBox; class QLabel; class QLineEdit; class QPushButton; class FindDialog : public QDialog Q_OBJECT public: FindDialog(QWidget *parent = 0); FindDialog(); signals: void findNext(const QString &str, Qt:CaseSensitivity cs)void findPrevious(const QString &str, Qt:CaseSensitivity cs)private slots: void findClicked(); void enableFindButton(const QString &text); private: QLabel *label; QLineEdit *lineEdit; QCheckBox *caseCheckBox; QCheckBox *backwardCheckBox; QPushButton *findButton; QPushButton *closeButton; ; #endif / FINDDIALOG_H家都是懂得 C+ 的啊,所以什么 #ifndef,#define 和 #endif 的含义和途就不再赘述了。先,声明四个到的类。这做的是前向声明,否则的话是编译不过的,因为编译器不知道这些类是否存在。简单来说,所谓前向声明就是告诉编译器,我要这个类,且这个类存在,你就不要担它们存不存在的问题啦!然后是我们的 FindDialog,继承 QDialog。下是个重要的东西:Q_OBJECT。这是个宏。凡是定义信号槽的类都必须声明这个宏。于为什么,我们以后再说。然后是 public 的构造函数和析构函数声明。然后是个 signal:,这是 Qt 的关键字还记得前说过的嘛?Qt 扩展了 C+ 语,因此它有的关键字这是对信号的定义,也就是说,FindDialog 有两个public 的信号,它可以在特定的时刻发出这两个信号,就这来说,如果户点击了Find 按钮,并且选中了 Search backward,就会发出 findPrevious(),否则发出findNext()。紧接着是 private slots:的定义,和前的 signal 样,这是私有的槽的定义。也就是说,FindDialog 具有两个槽,可以接收某些信号,不过这两个槽都是私有的。为了 slots 的定义,我们需要访问 FindDialog 的组件,因此,我们把其中的组件定义为成员变量以便访问。正是因为需要定义这些组件,才需要对它们的类型进前向声明。因为我们仅仅使的是指针,并不涉及到这些类的函数,因此并不需要 include它们的头件当然,你想直接引头件也可以,不过那样的话编译速度就会慢些。好了,头件先说这些,下篇再说源代码啦!休息,休息下!本出 “空间” 博客,请务必保留此出处http:/devbean.blog.51cto.com/448512/194031W3Cschool(www.w3cschool.cn)最的技术知识分享与学习平台此篇内容来于w3cschool.cn站户上传并发布。
收藏 下载该资源
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号