C++_GUI_Qt4_编程(第二版)_Chapter_2

上传人:fgh****35 文档编号:248229627 上传时间:2024-10-23 格式:PPT 页数:46 大小:1.74MB
返回 下载 相关 举报
C++_GUI_Qt4_编程(第二版)_Chapter_2_第1页
第1页 / 共46页
C++_GUI_Qt4_编程(第二版)_Chapter_2_第2页
第2页 / 共46页
C++_GUI_Qt4_编程(第二版)_Chapter_2_第3页
第3页 / 共46页
点击查看更多>>
资源描述
,单击此处编辑母版样式,第二级,第三级,第四级,第五级,第六级,第七级,第八级,*,*,*,单击此处编辑母版标题样式,Chapter 2,创建对话框,这一章讲解如何使用,Qt,创建对话框。对话框为用户提供了许多需选项和多种选择,2.1,子类化,QDialog,第一个例子是玩群攻用,c+,编写的一个,Find,对话框。通过这一 过程,就可以让对话框拥有自己的信号和槽,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);,signals:,void findNext(const QString,void findPrevious(const QString,private slots:,void findClicked();,void enableFindButton(const QString,private:,QLabel*label;,QLineEdit*lineEdit;,QCheckBox*caseCheckBox;,QCheckBox*backwardCheckBox;,QPushButton*findButton;,QPushButton*closeButton;,;,#endif,Finddialog.cpp,#include,#include finddialog.h,FindDialog:FindDialog(QWidget*parent),:QDialog(parent),label=new QLabel(tr(Find,lineEdit=new QLineEdit;,label-setBuddy(lineEdit);,caseCheckBox=new QCheckBox(tr(Match,backwardCheckBox=new QCheckBox(tr(Search,findButton=new QPushButton(tr(,findButton-setDefault(true);,findButton-setEnabled(false);,closeButton=new QPushButton(tr(Close);,connect(lineEdit,SIGNAL(textChanged(const QString&),this,SLOT(enableFindButton(const QString,connect(findButton,SIGNAL(clicked(),this,SLOT(findClicked();,connect(closeButton,SIGNAL(clicked(),this,SLOT(close();,QHBoxLayout*topLeftLayout=new QHBoxLayout;,topLeftLayout-addWidget(label);,topLeftLayout-addWidget(lineEdit);,QVBoxLayout*leftLayout=new QVBoxLayout;,leftLayout-addLayout(topLeftLayout);,leftLayout-addWidget(caseCheckBox);,leftLayout-addWidget(backwardCheckBox);,QVBoxLayout*rightLayout=new QVBoxLayout;,rightLayout-addWidget(findButton);,rightLayout-addWidget(closeButton);,rightLayout-addStretch();,QHBoxLayout*mainLayout=new QHBoxLayout;,mainLayout-addLayout(leftLayout);,mainLayout-addLayout(rightLayout);,setLayout(mainLayout);,setWindowTitle(tr(Find);,setFixedHeight(sizeHint().height();,Find,对话框的窗体布局,布局管理器的父子层次关系,现在来实现,find,对话框中所用道的槽,void FindDialog:findClicked(),QString text=lineEdit-text();,Qt:CaseSensitivity cs=,caseCheckBox-isChecked()?Qt:CaseSensitive,:Qt:CaseInsensitive;,if(backwardCheckBox-isChecked(),emit findPrevious(text,cs);,else,emit findNext(text,cs);,void FindDialog:enableFindButton(const QString&text),findButton-setEnabled(!text.isEmpty();,创建,main.cpp,来测试这些文件,#include,#include finddialog.h,int main(int argc,char*argv),QApplication app(argc,argv);,FindDialog*dialog=new FindDialog;,dialog-show();,return app.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(const QString&),this,SIGNAL(updateRecord(const QString,连接也可以被移除,disconnect(lcd,SIGNAL(overflow(),this,SLOT(handleMathError();,要把信号成功连接道槽,他们的参数必须具有相同的顺序和相同的类型,快速设计对话框,对于程序员来说,纯粹同过编写,c+,元代嘛来开发真个,QT,程序并不稀奇。但是,QT,仍然提供了可是话的方法来设计窗体,这样的方式会比手工编码显得更自然,更迅速。,QT,设计师(,Qt Designer,),就是这样的一种图形化工具,使用,QT,设计师来制作下面的对话框,Qt,设计师的界面,直接拖放所需要的部件,为窗体设置一些属性,带布局的窗体,设置窗体的,Tab,建顺序,保存和使用窗体,把对话框保存到,gotocell,目录下,另存为,gotocelldialog.ui,,然后使用一个文本编辑器在同意目录下创建一个,main.cpp,接下来运行,qmake,生成,pro,文件,,qmake,会自动加入,ui,文件在工程中,Qmake,非常智能,它会自动生成适当的,makefile,规则来调用,Qt,用户界面编译器(,uic,),Uic,工具会将,ui,文件转化为*,.h,文件以供调用,Main.cpp,#include,#include,#include ui_gotocelldialog.h,int main(int argc,char*argv),QApplication app(argc,argv);,Ui:GoToCellDialog ui;,QDialog*dialog=new QDialog;,ui.setupUi(dialog);,dialog-show();,return app.exec();,Uic,生成的对话框文件,class Ui:GoToCellDialog,public:,QLabel*label;,QLineEdit*lineEdit;,QSpacerItem*spacerItem;,QPushButton*okButton;,QPushButton*cancelButton;,.,void setupUi(QWidget*widget),.,;,改变形状的对话框,我们已看到了如何创建对话框,但是这些对话框永远只会显示一些相同的窗口部件。在某些情况下,人们非常希望能够有一些可以变形的对话框,最常见的变形对话框有两种:,拓展对话框,多页对话框,拓展对话框的例子,不带布局的群组框,带布局的群组框,接下来把窗体的各个子对象摆放到网格中,布局前,布局后,重新命名窗体中的各个部件,连接窗体的信号和槽,槽选项对话框,动态对话框,动态对话框就是在程序运行时候使用的从,Qt,设计师的。,Ui,文件创建而来的那些对话框。,动态对话框不需要通过,uic,把,Ui,文件转换成,c+,代码,相反,它是在程序运行的时候使用,QuiLoader,类载入该文件的,QUiLoader,类载入该文件,就像下面这种方式,QUiLoader uiLoader;,QFile file(sortdialog.ui);,QWidget*sortDialog=uiLoader.load(,if(sortDialog),.,QComboBox*primaryColumnCombo=,sortDialog-findChild(primaryColumnCombo);,if(primaryColumnCombo),.,常用内置的窗口部件类和对话框类,单页容器部件,多页容器部件,项视图窗口部件,Qt,的显示部件,QT,的输入窗口部件,QT,的反馈对话框,QT,的,Qwizard,对话框,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 机械制造 > 工业自动化


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!