码迷,mamicode.com
首页 > 其他好文 > 详细

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

时间:2019-08-08 23:02:28      阅读:164      评论:0      收藏:0      [点我收藏+]

标签:工具   函数   use   对象   span   目录   指针   turn   原来   

一、面向对象的编程

《案例》通过一个按钮更新时间显示,显示格式为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设计师

标签:工具   函数   use   对象   span   目录   指针   turn   原来   

原文地址:https://www.cnblogs.com/ptfe/p/11318695.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!