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

Posted ptfe

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT-面向对象的QT编程,QT设计师相关的知识,希望对你有一定的参考价值。

一、面向对象的编程

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

//主函数文件

#include<QApplication>
#include"TimeDialog.h"
int main(int argc,char** argv)
    
    QApplication app(argc,argv);
    TimeDialog time;
    time.show();
    return app.exec();

 

 
//类声明文件
#ifndef __TIMEDIALOG__
#define __TIMEDIALOG__
#include<QDialog>
#include<QTime>
#include<QPushButton>
#include<QLabel>
#include<QVBoxLayout>//垂直布局器
class TimeDialog:public QDialog
    Q_OBJECT 
public:
    TimeDialog(void);
private slots:
    void timeClicked(void);//因为label组件设置文本槽函数需要一个参数,但是buttonClicked信号是无参的。无法匹配,所以自定义槽函数进行连接
private:
    
    QPushButton* m_btnTime;
    QLabel* m_labTime;
   
;

#endif

 

 
//类实现文件
#include "TimeDialog.h"
TimeDialog::TimeDialog()
    setWindowTitle("时间");
    //获取按钮对象
    m_btnTime=new QPushButton("获取时间",this);
    //获取标签对象
    m_labTime=new QLabel("00:00:00",this);
    m_labTime->setFrameStyle(QFrame::Panel||QFrame::Sunken);//设置边框风格
    m_labTime->setAlignment(Qt::AlignHCenter||
                Qt::AlignVCenter);//设置对齐方式
    //创建垂直布局器
    QVBoxLayout* layout=new QVBoxLayout(this);
    layout->addWidget(m_labTime);
    layout->addWidget(m_btnTime);
    
    //显示布局器
    setLayout(layout);

    //连接
    connect(m_btnTime,SIGNAL(clicked()),this,SLOT(timeClicked()));
   


void TimeDialog::timeClicked(void)
    //currentTime返回QTime类对象,他是一个静态静
    //态成员函数
    //toString讲时间转换为字符串
    m_labTime->setText(
            QTime::currentTime().
                toString("hh:mm:ss"));

 

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

 

 技术图片

 

 


 

 

 二、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、《案例》登录框
技术图片

 

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

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

(3)编写代码

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

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

实现主文件。

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

 //类声明文件
#ifndef __LOGINDIALOG__
#define __LOGINDIALOG__


#include<QDialog>
#include<QMessageBox>
#include "ui_LoginDialog.h"


class LoginDialog:public QDialog,public Ui::LoginDialog
  Q_OBJECT
public:
  LoginDialog();

private slots:
  void onAccepted();//单击组合按钮确定,发送的是accepted信号
  void onRejected();//单击组合按钮取消,发送的是rejected信号
;

#endif

 

 //类实现文件
#include "LoginDialog.h"
#include<QPushButton>
LoginDialog::LoginDialog()

  //初始化界面
  setupUi(this);
  m_btnBox->button(QDialogButtonBox::Ok)->setText("确定");
  m_btnBox->button(QDialogButtonBox::Cancel)->setText("取消");


  connect(m_btnBox,SIGNAL(accepted()),this,SLOT(onAccepted()));
  connect(m_btnBox,SIGNAL(rejected()),this,SLOT(onRejected()));


void LoginDialog::onAccepted()
  //如果输入正确用户名和密码,则登录成功,关闭父窗口
  //输入错误,弹出提示框
  if(m_editUsername->text()=="tarena"&&m_editPasswd->text()=="123456")
    qDebug("登陆成功");
    close();


else

  QMessageBox msgBox(QMessageBox::Critical,//提示框风格
    windowTitle(),//标题
    "用户名或密码错误",//提示消息
    QMessageBox::Ok,//选择按钮
    this);//父窗口指针

  msgBox.setButtonText(QMessageBox::Ok,"确定");
  msgBox.exec();






void LoginDialog::onRejected()
//创建消息提示狂
  QMessageBox msgBox(QMessageBox::Question,//提示框风格
    windowTitle(),//标题
    "确定取消登录吗?",//提示消息
    QMessageBox::No|QMessageBox::Yes,//选择按钮
    this);//父窗口指针
  msgBox.setButtonText(QMessageBox::Yes,"确定");
  msgBox.setButtonText(QMessageBox::No,"取消");
  //点击yes退出父窗口
  if(msgBox.exec()==QMessageBox::Yes)
    close();

 

 

//主文件

#include<QApplication>
#include "LoginDialog.h"

int main(int argc,char** argv)

  QApplication app(argc,argv);

  LoginDialog login;
  login.show();

  return app.exec();

 

三、创造器(qtcreator)

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

(1)终端启动创造器

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

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

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

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

  

注意:

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

 

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

注意:

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

技术图片

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

 

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

注意:

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

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

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

 

以上是关于QT-面向对象的QT编程,QT设计师的主要内容,如果未能解决你的问题,请参考以下文章

面向对象编程是啥意思

Qt简介

Qt简介

QT的信号和槽机制简介

QT中TextLabel如何显示变量值?

c++基础怎么快速学qt,推荐几本书,不要老的最近看的资料编程总是通不过,很多类在qt4 5都用不