QT-面向对象的QT编程,QT设计师

- 日理万妓 2021-10-26 13:52 524阅读 0赞

一、面向对象的编程

《案例》通过一个按钮更新时间显示,显示格式为xx:xx:xx

  1. //主函数文件
  2. #include<QApplication>
  3. #include"TimeDialog.h"
  4. int main(int argc,char** argv){
  5. QApplication app(argc,argv);
  6. TimeDialog time;
  7. time.show();
  8. return app.exec();
  9. }
  10. //类声明文件
  11. #ifndef __TIMEDIALOG__
  12. #define __TIMEDIALOG__
  13. #include<QDialog>
  14. #include<QTime>
  15. #include<QPushButton>
  16. #include<QLabel>
  17. #include<QVBoxLayout>//垂直布局器
  18. class TimeDialog:public QDialog{
  19. Q_OBJECT
  20. public:
  21. TimeDialog(void);
  22. private slots:
  23. void timeClicked(void);//因为label组件设置文本槽函数需要一个参数,但是buttonClicked信号是无参的。无法匹配,所以自定义槽函数进行连接
  24. private:
  25. QPushButton* m_btnTime;
  26. QLabel* m_labTime;
  27. };
  28. #endif
  29. //类实现文件
  30. #include "TimeDialog.h"
  31. TimeDialog::TimeDialog(){
  32. setWindowTitle("时间");
  33. //获取按钮对象
  34. m_btnTime=new QPushButton("获取时间",this);
  35. //获取标签对象
  36. m_labTime=new QLabel("00:00:00",this);
  37. m_labTime->setFrameStyle(QFrame::Panel||QFrame::Sunken);//设置边框风格
  38. m_labTime->setAlignment(Qt::AlignHCenter||
  39. Qt::AlignVCenter);//设置对齐方式
  40. //创建垂直布局器
  41. QVBoxLayout* layout=new QVBoxLayout(this);
  42. layout->addWidget(m_labTime);
  43. layout->addWidget(m_btnTime);
  44. //显示布局器
  45. setLayout(layout);
  46. //连接
  47. connect(m_btnTime,SIGNAL(clicked()),this,SLOT(timeClicked()));
  48. }
  49. void TimeDialog::timeClicked(void){
  50. //currentTime返回QTime类对象,他是一个静态静
  51. //态成员函数
  52. //toString讲时间转换为字符串
  53. m_labTime->setText(
  54. QTime::currentTime().
  55. toString("hh:mm:ss"));
  56. }

也可以自定义信号函数完成与标签的连接(注意自定义函数只能声明,不能定义)

1265794-20190808012350620-1917853705.png


二、QT设计师

1、《案例》使用designer重构加法计算器

(1)创建工程目录,并进入

(2)在终端输入designer进入设计师界面

  选择一个父窗口的模板,Dialog without buttons->单击Create

  Widget box(窗口部件盒)包含了常用的组件,从上到下分别为




































第一组(Layouts) 布局器
第二组(Spacers) 伸展器
第三组(Buttons) 按钮
第四组(Item views) 列表
第五组(Item widgets) 列表
第六组(Container) 容器
第七组(Input Widgets) 输入组件
第八组(Display Widgets) 显示组件

  右侧比较重要

(3)设计UI

  1)拖拽一个Button组件,到对话框上,day2中计算器中“=”号的属性设置按钮。

  使能禁用->修改objectname为m_btnCalc->Text文本改为“=”->修改字体大小,点大小18,加粗

  2)拖拽一个LineEdit组件,修改对象名为m_editX,修改字体大小,粗细。选择右对齐。同类有又右操作数的LineEdit对象。

  3)结果的LineEdit对象要设置为只读。

  4)加入Label的+号

(4)单机空白处,在快捷菜单中点击水平布局按钮,或者右键选择布局方式

(5)修改主对话框标题为“计算器”,修改对象名称

(6)保存UI

 (7)将UI文件转换成C++支持的.h文件,使用uic命令进行转换,如:uic CalculatorDialog.ui -o ui_CalculatorDialog.h//Makefile可完成此功能,可打开查看其内容

  这个自定义的类有两种用法:

    1)由其他类继承  

  把上述头文件中UI命名空间下的计算器类由昨天的计算器类来继承,删除原来的UI初始化,保留槽函数,连接函数等,可完成此前计算器相同的功能

    2)作为类成员

  自行完成

2、《案例》登录框

1265794-20190808150150458-2029957351.png

(1)按上图设置其必要属性,这里强调UI设计时两点:1)调节LineEdit的echoMode,使输入数据不可见。2)调节最小尺寸和最大尺寸的宽度和高度(与当前尺寸下相同),使其不可拉伸

(2)uic将ui文件转换为头文件

(3)编写代码

编写头文件继承LoginDialog或ui_LoginDialog类,可以与前者同名,因为在转换的头文件存在一个名为UI的命名空间。可以查看其关系。

编写类实现文件,需要在子类中调用setupUI函数,初始化UI ,同时在文件中将按钮中的文字改为中文确定和取消(使用button()函数获取buttonBox中的两个按钮指针,它的参数是一个枚举值,例如:QButtonBox::Ok,再使用setText设置其文本)

实现主文件。

(4)构建工程,调试代码

  1. //类声明文件
  2. #ifndef __LOGINDIALOG__
  3. #define __LOGINDIALOG__
  4. #include<QDialog>
  5. #include<QMessageBox>
  6. #include "ui_LoginDialog.h"
  7. class LoginDialog:public QDialog,public Ui::LoginDialog{
  8.   Q_OBJECT
  9. public:
  10.   LoginDialog();
  11. private slots:
  12.   void onAccepted();//单击组合按钮确定,发送的是accepted信号
  13.   void onRejected();//单击组合按钮取消,发送的是rejected信号
  14. };
  15. #endif
  16. //类实现文件
  17. #include "LoginDialog.h"
  18. #include<QPushButton>
  19. LoginDialog::LoginDialog()
  20. {
  21.   //初始化界面
  22.   setupUi(this);
  23.   m_btnBox->button(QDialogButtonBox::Ok)->setText("确定");
  24.   m_btnBox->button(QDialogButtonBox::Cancel)->setText("取消");
  25.   connect(m_btnBox,SIGNAL(accepted()),this,SLOT(onAccepted()));
  26.   connect(m_btnBox,SIGNAL(rejected()),this,SLOT(onRejected()));
  27. }
  28. void LoginDialog::onAccepted(){
  29.   //如果输入正确用户名和密码,则登录成功,关闭父窗口
  30.   //输入错误,弹出提示框
  31.   if(m_editUsername->text()=="tarena"&&m_editPasswd->text()=="123456"){
  32.     qDebug("登陆成功");
  33.     close();
  34. }
  35. else{
  36.   QMessageBox msgBox(QMessageBox::Critical,//提示框风格
  37.     windowTitle(),//标题
  38.     "用户名或密码错误",//提示消息
  39.     QMessageBox::Ok,//选择按钮
  40.     this);//父窗口指针
  41.   msgBox.setButtonText(QMessageBox::Ok,"确定");
  42.   msgBox.exec();
  43. }
  44. }
  45. void LoginDialog::onRejected(){
  46. //创建消息提示狂
  47.   QMessageBox msgBox(QMessageBox::Question,//提示框风格
  48.     windowTitle(),//标题
  49.     "确定取消登录吗?",//提示消息
  50.     QMessageBox::No|QMessageBox::Yes,//选择按钮
  51.     this);//父窗口指针
  52.   msgBox.setButtonText(QMessageBox::Yes,"确定");
  53.   msgBox.setButtonText(QMessageBox::No,"取消");
  54.   //点击yes退出父窗口
  55.   if(msgBox.exec()==QMessageBox::Yes){
  56.     close();
  57. }
  58. }
  59. //主文件
  60. #include<QApplication>
  61. #include "LoginDialog.h"
  62. int main(int argc,char** argv){
  63.   QApplication app(argc,argv);
  64.   LoginDialog login;
  65.   login.show();
  66.   return app.exec();
  67. }

三、创造器(qtcreator)

1、《案例》重构前述计算器

(1)终端启动创造器

(2)新建工程,选择Application->在选择Qt widgets Application,创建

(3)输入工程名称,指定创建路径,并且会在此路径下创建一个与工程名相同的目录

(4)设置开发套件,采用默认即可

(5)设置一个类名(这里设置为CalculatorDialog),并选择一个父窗口(基类)

  

注意:

  这一步骤完成后,会自动创建与输入类名对用的头文件,源文件和ui文件,项目文件及项目配置文件

(4)下一步,选择项目管理工具,这里没有,跳过。完成

注意:

  在右侧的影子构建勾选后,会将生成的中间文件存放到设置的文件夹下,如图:

1265794-20190808195509359-741330909.png

  如果比较简单的工程,可去掉该选项

(5)双击ui文件,进入设计。按前述计算机昨天的计算机设置组件属性

注意:

  ui设计时父窗口对象名不能修改

(6)全选组件 ,再水平布局

(7)右键=号,选择转到槽,可自动生成槽函数声明和定义,手动添加按键使能槽函数(由EditLine内容来使能),并完成连接,只需完成定义内容即可

转载于:https://www.cnblogs.com/ptfe/p/11318695.html

发表评论

表情:
评论列表 (有 0 条评论,524人围观)

还没有评论,来说两句吧...

相关阅读

    相关 Qt对象模型

    标准C++对象模型为对象范式提供了非常有效的运行时支持,但它的静态性质在某些问题领域是不灵活的。图像用户界面编程是一个既需要运行时效率又需要高度灵活性的领域。通过结合C++的速

    相关 QtQt Designer

    > [Qt Designer][] 是Qt Creator中的工具,用于为[Qt小部件][Qt]设计和构建图形用户界面(GUI)。您可以在视觉编辑器(s所见即所得)中撰写

    相关 QtQt Widgets

    [Qt Widgets][]提供了一组UI元素,以创建经典的桌面式用户界面,有关使用小部件的更多信息,见参阅[用户界面][Link 1]概叙 部件(Widgets) [

    相关 Qt学习笔记-Qt对象系统

    Qt元对象系统提供了对象间的通信机制(信号和槽)、运行时类型信息和动态属性系统的支持,是标准C++的一个扩展,它使Qt能够更好的实现GUI图形用户界面编程。Qt的元对象系统不支