回顾:
1.构建一个QT工程步骤
(1)qmake -project
(2)qmake
(3)make
 
2.两个常用的组件
QLabel 标签
QPushButton 按钮
 
--------------------------------------
 
四 容器窗口(父窗口)
1.父窗口可以停靠其他组件,如果一个组件在创建时指定父窗口,那么就将停靠在父窗口上,如果不指定则飘在外面形成独立的窗体.
2.常用的父窗口类
QWidget ==>绝大多数图形相关组件都是它的子类
QMainWindow(用的比较多,是QWidget的子类)
QDialog(用的比较多,是QWidget的子类)
3.QWidget的两个常用成员函数
(1)调整大小
resize(int x,int y); //参数是分辨率
(2)移动位置
move(int x,int y);
 
五 信号和槽的其他用法
1.一般情况信号和槽参数纯虚类型要相同
eg:
QObject::connect(A,SIGNAL(sigFunc(int,string)),B,SLOT(slotFunc(int,string))); //ok
QObject::connect(A,SIGNAL(sigFunc(int,string)),B,SLOT(slotFunc(string,int))); //no
2.可以带有缺省参数
eg:
QObject::connect(A,SIGNAL(sigFunc(int)),B,SLOT(slotFunc(int,string=“"))); //ok
3.信号函数参数可以多于槽函数参数,多余的参数将被忽略
eg:
QObject::connect(A,SIGNAL(sigFunc(int,string)),B,SLOT(slotFunc(int))); //ok
QObject::connect(A,SIGNAL(sigFunc(int)),B,SLOT(slotFunc(int,string))); //no
4.一个信号可以被连接到多个槽函数
eg:
QObject::connect(A,SIGNAL(sigFunc(int)),B1,SLOT(slotFunc(int))); //ok
QObject::connect(A,SIGNAL(sigFunc(int)),B2,SLOT(slotFunc(int))); //ok
注: 当A发送信号sigFunc,B1/B2的槽函数都会被执行,执行的顺序不确定
5.多个信号可以连接到同一个槽函数
QObject::connect(A1,SIGNAL(sigFunc(int)),B,SLOT(slotFunc(int))); //ok
QObject::connect(A2,SIGNAL(sigFunc(int)),B,SLOT(slotFunc(int))); //ok
注: 无论A1还是A2发出信号,B的槽函数都会被执行
 
案例《事件同步》
1.QSilder    滑块类
QSlider(QWidget *parent = Q_NULLPTR)
QSlider(Qt::Orientation orientation, QWidget *parent = Q_NULLPTR)
Qt::Vertical 垂直的
Qt::Horizontal 水平
 
void setRange(int min,int max)[slots]; //设置滑动范围
void setValue(int)[slots];    //设置当前值
void valueChange(int value)[signal]; //值改变信号
void setPageStep(int);//设置页步距
 
2.QSpinBox 选值框类(微调框)
QSpinBox(QWidget *parent = Q_NULLPTR);
void setRange(int minimum, int maximum);//设置选值范围
void setValue(int val)[slots];//设置当前值
void valueChanged(int i)[signal];//值改变信号
 
六 面向对象的QT编程
1.基于对象的QT编程(不建议)
2.面向对象的QT编程
《案例》加法计算器
class CalculateDialog:public QDialog{
行为:
    构造函数:初始化界面 禁用等号按钮
public slots:
    当输入左右操作数,发送信号,检查是否为有效数字,如果都是有效的,是能等号按钮
    当点击等号按钮,发送信号 计算结果并显示
属性:
    QLineEdit QLabel QPushButton
}
 案例代码如下:

#ifndef        __CALCULATORDIALOG_H
#define        __CALCULATORDIALOG_H

#include <QDialog>
#include <QLabel>
#include <QPushButton>
#include <QLineEdit>        //输入文本的组件
#include <QDoubleValidator>    //双精度的校验器
#include <QHBoxLayout>        //水平布局器

class CalculatorDialog:public QDialog{
    //MOC编译器,把不符合标准的语法变成标准的C++语法
    Q_OBJECT
public:
    CalculatorDialog(void);
private:
    QLineEdit *m_editX;        //左操作数
    QLineEdit *m_editY;        //右操作数
    QPushButton *m_btnCalc;    //等号按钮
    QLineEdit *m_editZ;        //保存结果,只读属性
private slots:
    void enableCalcButton(void);    //使能等号按钮
    void calcClicked(void);            //计算结果
};

#endif    //    __CALCULATORDIALOG_H

CalculatorDialog.h

#include "CalculatorDialog.h"

//构造函数中初始化UI界面
CalculatorDialog::CalculatorDialog(void){
    //设置对话框的标题 (继承过来的成员函数)
    setWindowTitle("加法计算器");

    m_editX = new QLineEdit(this);
    //设置文本右对齐
    m_editX->setAlignment(Qt::AlignRight);
    //设置验证器,只能输入数字
    m_editX->setValidator(new QDoubleValidator(this));

    m_editY = new QLineEdit(this);
    //设置文本右对齐
    m_editY->setAlignment(Qt::AlignRight);
    //设置验证器,只能输入数字
    m_editY->setValidator(new QDoubleValidator(this));

    m_editZ = new QLineEdit(this);
    m_editZ->setAlignment(Qt::AlignRight);    //设置右对齐
    m_editZ->setReadOnly(true);                //设置只读

    m_btnCalc = new QPushButton("=",this);
    m_btnCalc->setEnabled(false);//设置禁用

    //使用水平布局器,自动调整每个组件的大小和位置
    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(m_editX);
    layout->addWidget(new QLabel("+"));
    layout->addWidget(m_editY);
    layout->addWidget(m_btnCalc);
    layout->addWidget(m_editZ);
    //设置布局器
    setLayout(layout);

    //编辑框内容改变时发出信号,尝试使能等号按钮
    connect(m_editX,SIGNAL(textChanged(const QString &)),this,SLOT(enableCalcButton()));
    connect(m_editY,SIGNAL(textChanged(const QString &)),this,SLOT(enableCalcButton()));
    //点击等号按钮,计算结果并显示
    connect(m_btnCalc,SIGNAL(clicked()),this,SLOT(calcClicked()));
}

void CalculatorDialog::enableCalcButton(void){
    bool bXOk;
    bool bYOk;
    //获取左右操作数的数据(QString),转换成浮点数
    m_editX->text().toDouble(&bXOk);
    m_editY->text().toDouble(&bYOk);
    //如果左右操作数都是有效的数字,使能等号按钮
    if(bXOk && bYOk){
        m_btnCalc->setEnabled(true);
    }
    else{
        m_btnCalc->setEnabled(false);
    }
}

void CalculatorDialog::calcClicked(void){
    //计算结果
    double res = m_editX->text().toDouble() + m_editY->text().toDouble();
    //将结果转换成字符串
    QString str = QString::number(res,);
    //显示结果到m_editZ
    m_editZ->setText(str);
}

CalculatorDialog.cpp

#include "CalculatorDialog.h"
#include <QApplication>
int main(int argc, char **argv){
    QApplication app(argc,argv);
    CalculatorDialog dialog;
    dialog.show();
    return app.exec();
}

Calculator.cpp

QT学习第2天的更多相关文章

  1. QT学习第1天

    QT学习第一天  坚持住!! 一 Qt概述 1.Qt发展历史 (1)1991年诞生(Haavard Nord/Eirik Chambe-Eng), (2)1994年创立Troll Tech(奇趣科技) ...

  2. 【转载】分享一些Qt学习资源,欢迎下载

    资源来源:http://bbs.csdn.net/topics/390358737 经过我一翻整理,把一些我收集到的Qt学习资源分享给大家,主要适合新手,老鸟可以直接忽略我.要说明一下,很多资源都是在 ...

  3. QT学习之路--创建一个对话框

    Q_OBJECT:这是一个宏,凡是定义信号槽的类都必须声明这个宏. 函数tr()全名是QObject::tr(),被他处理过的字符串可以使用工具提取出来翻译成其他语言,也就是做国际化使用. 对于QT学 ...

  4. 转载: Qt 学习之路 2归档

    Qt 学习之路 2归档 http://www.devbean.net/2012/08/qt-study-road-2-catelog/

  5. Qt 学习资料

    Qter开源社区http://www.qter.org/ [Qt教程], 作者yafeilinux [视频] QT学习之路:从入门到精通 <C++ Qt 编程视频教程>

  6. qt学习笔记(五) QGraphicsPixmapItem与QGraphicsScene的编程实例 图标拖动渐变效果

    应大家的要求,还是把完整的project文件贴出来,大家省点事:http://www.kuaipan.cn/file/id_48923272389086450.htm 先看看执行效果,我用的群创7寸屏 ...

  7. Qt学习博客推荐

    附录C Qt资源 C.1 Qt 官方资源 全 球各大公司以及独立开发人员每天都在加入 Qt 的开发社区.他们已经认识到了Qt 的架构本身便可加快应用程序开发进度.这些开发人员,无论是想开发单平台软件. ...

  8. qt学习教程1.qt开发环境搭建

    qt学习教程1.qt开发环境搭建 首先下载qt 下载地址:http://download.qt.io/archive/qt/ 此教程使用的版本为5.1.1 下载好后,打开安装包,然后点下一步 选择一个 ...

  9. QT学习教程

    原地址:http://www.devbean.NET/2012/08/qt-study-road-2-catelog/ 网上看到的不错的教程 本教程以qt5为主,部分地方会涉及qt4.据说非常适合qt ...

  10. Qt学习之路

      Qt学习之路_14(简易音乐播放器)   Qt学习之路_13(简易俄罗斯方块)   Qt学习之路_12(简易数据管理系统)   Qt学习之路_11(简易多文档编辑器)   Qt学习之路_10(Qt ...

随机推荐

  1. Java基础学习 -- Java(OOP)程序的设计原则

    避免代码复制.解决方案:函数.父类: 封装.尽量private每个类的成员变量,用操作封装数据,减少类与类之间成员变量的直接调用,而是调用method,降低耦合: 可扩展性最大化.尽量使用框架+数据的 ...

  2. angular学习的一些小笔记(中)之ng-disabled轻松实现按钮是否可点击状态

    哇,这个可以轻松实现输入值就按钮可点击,输入框没有值则不可点击的状态呀 看代码 <!doctype html> <html ng-app=""> <h ...

  3. MasonJS – 创建完美的砌体结构网页布局

    MasonJS 插件用来解决目前大多数的网格系统使用中的问题——间距.当使用 Masonry,Isotope 或任何其他网格插件时,布局中会出现空白或边缘参差不齐的情况.MasonJS 可以帮助你填补 ...

  4. L20n – Mozilla 推出的 Web 本地化框架

    L20n是 Mozilla 开发的用于 Web 开发的本地化框架.它允许本地化开发者把逻辑细分为本地化的资源. L20n 的框架不再需要开发人员深入理解自然语言的具体细节,并提供了机会为本地化创造更好 ...

  5. Web前端面试题目汇总

    以下是收集一些面试中经常会遇到的经典面试题以及自己面试过程中有一些未解决的问题,通过对知识的整理以及经验的总结,重新巩固自身的前端基础知识,如有错误或更好的答案,欢迎指正,水平有限,望各位不吝指教.: ...

  6. Sharepoint学习笔记—习题系列--70-576习题解析 -(Q49-Q51)

    Question 49You are designing a SharePoint 2010 intranet site for a corporation. Your design must mee ...

  7. 什么时候用Application的Context,什么时候用Activity的Context

    单例模式用application的context 如果我们在Activity A中或者其他地方使用Foo.getInstance()时,我们总是会顺手写一个『this』或者『mContext』(这个变 ...

  8. Java虚拟机JVM学习04 类的初始化

    Java虚拟机JVM学习04 类的初始化 类的初始化 在初始化阶段,Java虚拟机执行类的初始化语句,为类的静态变量赋予初始值. 在程序中,静态变量的初始化有两种途径: 1.在静态变量的声明处进行初始 ...

  9. Android 常见对话框

    1.对话框通知(Dialog Notification) 当你的应用需要显示一个进度条或需要用户对信息进行确认时,可以使用对话框来完成. 下面代码将打开一个如图所示的对话框: public void ...

  10. jax-rs中的一些参数标注简介(@PathParam,@QueryParam,@MatrixParam,@HeaderParam,@FormParam,@CookieParam)

    先复习一下url的组成: scheme:[//[user:password@]host[:port]][/]path[?query][#fragment] jax-rs anotation @Path ...