版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
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虞姣离婚后财产分割及子女教育资助协议书3篇
- 2024温州大学实验室数据安全保密与应急处理合同3篇
- 2024版教育技术研发咨询协议2篇
- 2024版基础设施建设劳务合作分包协议版B版
- 《中东和非洲》课件
- 2024车辆租用标准协议条款版B版
- 火车站台改造工程围挡施工合同
- 汽车零部件合作合同
- 幼儿园大班主题课程《爱在我身边》主题活动方案
- 广西桂林市(2024年-2025年小学三年级语文)部编版期末考试(上学期)试卷(含答案)
- 煤炭行业智能化煤炭筛分与洗选方案
- 高级会计实务案例分析-第三章 企业全面预算管理
- 2024年数学四年级上册线段、射线和直线基础练习题(含答案)
- 2024至2030年中国防弹衣行业市场全景分析及投资策略研究报告
- 高三日语复习:高考日语语法总结
- 3.16谣言止于智者-正确处理同学关系班会解析
- 2024年美国氟苯尼考市场现状及上下游分析报告
- 新教材北师大版数学一年级上册教学反思全册
- 电路分析(中国石油大学(华东))智慧树知到期末考试答案章节答案2024年中国石油大学(华东)
评论
0/150
提交评论