




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
Chapter2
创建对话框这一章讲解如何使用Qt创建对话框。对话框为用户提供了许多需选项和多种选择2.1子类化QDialog第一个例子是玩群攻用c++编写的一个Find对话框。通过这一过程,就可以让对话框拥有自己的信号和槽Finddialog.h#ifndefFINDDIALOG_H#defineFINDDIALOG_H#include<QDialog>classQCheckBox;classQLabel;classQLineEdit;classQPushButton;classFindDialog:publicQDialog{ Q_OBJECT public: FindDialog(QWidget*parent=0);
signals: voidfindNext(constQString&str,Qt::CaseSensitivitycs);voidfindPrevious(constQString&str,Qt::CaseSensitivitycs);
privateslots: voidfindClicked(); voidenableFindButton(constQString&text); private: QLabel*label; QLineEdit*lineEdit; QCheckBox*caseCheckBox; QCheckBox*backwardCheckBox; QPushButton*findButton; QPushButton*closeButton;};#endif
Finddialog.cpp#include<QtGui>#include"finddialog.h"FindDialog::FindDialog(QWidget*parent):QDialog(parent){ label=newQLabel(tr("Find&what:")); lineEdit=newQLineEdit; label->setBuddy(lineEdit); caseCheckBox=newQCheckBox(tr("Match&case")); backwardCheckBox=newQCheckBox(tr("Search&backward")); findButton=newQPushButton(tr("&Find")); findButton->setDefault(true); findButton->setEnabled(false); closeButton=newQPushButton(tr("Close"));connect(lineEdit,SIGNAL(textChanged(constQString&)),this,SLOT(enableFindButton(constQString&)));connect(findButton,SIGNAL(clicked()),this,SLOT(findClicked()));connect(closeButton,SIGNAL(clicked()),this,SLOT(close()));QHBoxLayout*topLeftLayout=newQHBoxLayout;topLeftLayout->addWidget(label);topLeftLayout->addWidget(lineEdit);QVBoxLayout*leftLayout=newQVBoxLayout;leftLayout->addLayout(topLeftLayout);leftLayout->addWidget(caseCheckBox);leftLayout->addWidget(backwardCheckBox); QVBoxLayout*rightLayout=newQVBoxLayout; rightLayout->addWidget(findButton); rightLayout->addWidget(closeButton); rightLayout->addStretch(); QHBoxLayout*mainLayout=newQHBoxLayout; mainLayout->addLayout(leftLayout); mainLayout->addLayout(rightLayout); setLayout(mainLayout); setWindowTitle(tr("Find")); setFixedHeight(sizeHint().height());}Find对话框的窗体布局布局管理器的父子层次关系现在来实现find对话框中所用道的槽voidFindDialog::findClicked(){QStringtext=lineEdit->text();Qt::CaseSensitivitycs=caseCheckBox->isChecked()?Qt::CaseSensitive:Qt::CaseInsensitive;if(backwardCheckBox->isChecked()){emitfindPrevious(text,cs);}else{emitfindNext(text,cs);}}voidFindDialog::enableFindButton(constQString&text){findButton->setEnabled(!text.isEmpty());}创建main.cpp来测试这些文件#include<QApplication>#include"finddialog.h"intmain(intargc,char*argv[]){QApplicationapp(argc,argv);FindDialog*dialog=newFindDialog;dialog->show();returnapp.exec();}深入介绍信号和槽信号和槽机制是QT编程的基础。他可以让应用程序的编程人员把这些互不了解的对象绑定在一起。槽和普通的C++成员函数几乎是一样的——可以是虚函数;可以被重载;可以使公有的,私有的和保护的;并且也可以被其他的c++成员函数调用一个信号可以连接多个槽connect(slider,SIGNAL(valueChanged(int)),spinBox,SLOT(setValue(int)));connect(slider,SIGNAL(valueChanged(int)),this,SLOT(updateStatusBarIndicator(int)));多个槽可以连接到一个信号connect(lcd,SIGNAL(overflow()),this,SLOT(handleMathError()));connect(calculator,SIGNAL(divisionByZero()),this,SLOT(handleMathError()));一个信号可以与另外一个信号相连接connect(lineEdit,SIGNAL(textChanged(constQString&)),this,SIGNAL(updateRecord(constQString&)));连接也可以被移除disconnect(lcd,SIGNAL(overflow()),this,SLOT(handleMathError()));要把信号成功连接道槽,他们的参数必须具有相同的顺序和相同的类型快速设计对话框对于程序员来说,纯粹同过编写c++元代嘛来开发真个QT程序并不稀奇。但是QT仍然提供了可是话的方法来设计窗体,这样的方式会比手工编码显得更自然,更迅速。QT设计师(QtDesigner),就是这样的一种图形化工具使用QT设计师来制作下面的对话框Qt设计师的界面直接拖放所需要的部件为窗体设置一些属性带布局的窗体设置窗体的Tab建顺序保存和使用窗体把对话框保存到gotocell目录下,另存为gotocelldialog.ui,然后使用一个文本编辑器在同意目录下创建一个main.cpp接下来运行qmake生成pro文件,qmake会自动加入ui文件在工程中Qmake非常智能,它会自动生成适当的makefile规则来调用Qt用户界面编译器(uic)Uic工具会将ui文件转化为*.h文件以供调用Main.cpp#include<QApplication>#include<QDialog>#include"ui_gotocelldialog.h"intmain(intargc,char*argv[]){QApplicationapp(argc,argv);Ui::GoToCellDialogui;QDialog*dialog=newQDialog;ui.setupUi(dialog);dialog->show();returnapp.exec();}Uic生成的对话框文件classUi::GoToCellDialog{public:QLabel*label;QLineEdit*lineEdit;QSpacerItem*spacerItem;QPushButton*okButton;QPushButton*cancelButton;...voidsetupUi(QWidget*widget){...}};改变形状的对话框我们已看到了如何创建对话框,但是这些对话框永远只会显示一些相同的窗口部件。在某些情况下,人们非常希望能够有一些可以变形的对话框最常见的变形对话框有两种:拓展对话框多页对话框拓展对话框的例子不带布局的群组框带布局的群组框接下来把窗体的各个子对象摆放到网格中布局前布局后重新命名窗体中的各个部件连接窗体的信号和槽槽选项对话框动态对话框动态对话框就是在程序运行时候使用的从Qt设计师的。Ui文件创建而来的那些对话框。动态对话框不需要通过uic把Ui文件转换成c++代码,相反,它是在程序运行的时候使用QuiLoader类载入该文件的QUiLoader类载入该文件,就像下面这种方式QUiLoaderuiLoader;QFilefile("sortdialog.ui");QWidget*sortDialog=uiLoa
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 母婴护理初级复习试题含答案(一)
- 高级育儿试卷复习测试卷含答案
- 环保行业运营流程优化作业指导书
- 护师及主管护师练习卷含答案
- 奶茶店品牌评估营销手册
- 项目开发进度管理与计划安排
- 分析法律制定中权利约束边界
- 员工培训计划与实施细则
- 医疗敷料贴合度提高方法
- 三农村环境治理综合方案
- 产品备案合同范例
- 《民法典物权编》课件
- 2024-2025学年小学三年级第二学期心理健康教育计划
- 2024-2025学年全国版图知识竞赛考试题库 (含答案)
- 2025年呼伦贝尔职业技术学院单招职业适应性测试题库及参考答案
- 数字人直播代运营协议
- 天津市部分区2022-2023学年七下期中考试数学试卷(原卷版)
- 2025年度人力资源服务外包项目验收与交付合同范本
- 加气站气瓶充装质量保证体系手册2024版
- 工业机器人中传感器应用案例
- 基于教学评一体化理念的高中英语阅读教学行动研究
评论
0/150
提交评论