一 .  QT4和QT5的区别(信号和槽):
1.  QT4:
connect(button,SIGNAL(pressed()),this,SLOT(close()));
/**
* 优点 :写法简单
* 缺点: SIGNAL(), SLOT()是两个宏,将函数转换为字符串
* 编译时不做错误检查,影响程序的健壮性
*/

2.  QT5
connect(button,&QPushButton::clicked,this,&Widget::close);
/**
* sender: 信号发出者
* signal: 触发的信号(标准,自定义)
* receiver: 接受者
* slot: 处理的槽函数(标准,自定义)
*/

3.  信号与槽,信号类比于短信,槽类比于接收短信的手机
/**
* 1. 信号:普通函数(signal:),只需要声明不需要实现
* 2. 槽函数:QT5类中的任意成员函数,静态函数,全局函数,lambda表达式
* 3. 信号和槽可以使用QT内部定义好的,也可以自定义
* 4. 信号和槽是没有返回值的,但是可以有参数
* 5. 信号和槽的参数列表顺序必须一致
* void signal(int, double, char);
* void slot(int, double, char);
* 6. 信号和槽的参数个数可以不一样
* 信号的参数个数可以大于槽函数参数的个数
* 槽函数个数不可以大于信号参数个数
*/

4.  信号槽的扩展
/**
* 1. 一个信号可以连接多个槽函数
* 2. 槽函数执行的顺序是随机的,不能控制
* 3. 信号可以连接信号
* 4. 信号草连接成功后,可以断开连接disconnect()
* 5. 槽函数可以是Lambl表达式
*/

 二 .   常用控件

1.  常用控件
Qt ui
ui->
ui_xxx.h

1) 按钮类
QPushButton
QToolButoon
QRadioButton
2) item
QListWidget
3) 容器类
QStackWidget
QWidget
QFrame
4) 编辑类
QComboBox
QLineEdit
QTextEdit
5) 显示类
QLable
QLcdNumber
QProgressBar

2) 布局
水平
垂直
网格
布局属性
大小策略
最小大小
最大大小
容器(分类)
弹簧

3) 自定义控件(提升)
a) ui的控件和自定义控件的父类(基类)要一样
b) 选中ui控件->提升

4) 常用事件处理
事件处理器
1) 都是虚函数(基类中定义QWiget QObiect)
2) 我们派生类(子类)只是重写这些虚函数(虚函数必须和基类中的虚函数一致)

QString s = "";
switch(e->modifies())
{
case Qt::ControlModifier:
s = "Ctrl+";
break;
case Qt::AltModifier:
s = "Alt+";
break;
}

switch(e->key)
{
case Qt::Key_Left:
s += "left_Key Press";
break;
}

三.   绘图

1. 在窗口中绘图,重写绘图事件,虚函数
void paintEvent(QPaintEvent *event) //绘图不一定要放在这个函数里,但是在窗口里面,必须放在这里
{
QPaintEvent p(this); //创建画家,下窗口上绘图
p.drawXXX();

p.drawPixmap(0, 0, width(), height(), QPixmap());
p.drawPixmap(x, 0, 80, 80, QPixmap);
p.drawImage(); //QImage
p.drawPicture(); //QPicture
p.drawLine();
p.drawPixmap(); //QBitmap: 黑白: 光标
}

x += 20;
if(x > width)
{
x = 0;
}

update(); //间接调用paintEvent()

2. QBitmap -> QPixmap

QBitmap 黑白色
QPixmap 彩色的

3. 绘图设备
QPixmap: 针对屏幕进行了优化,和平台相关,不能对图片进行修改(保存内容为图片)
QImage : 和平台无关,可以对图片进行修改,在线程中绘图(保存内容为图片)
QPicture : 保存绘图的状态(二进制文件) //QImage 和QPicture的操作是一样的

4. QPixmap -> QImage
QPixmap a;
a.toImage();

5. QImage -> QPixmap
QImage b;
QPixmap::fromImag(b);

6. 例子 

QPainter p;
QPicture pic;
p.begin(&pic);//指定绘图设备
//绘图动作
p.end();
pic.save("demo.aa");

QPicture temp;
temp.load("demo.aa");

7. 不规则窗口
1) 给窗口画一张背景图
2) 去边框
3) 设定属性(背景透明)
4) 移动坐标是相对屏幕而言

四.  文件操作

1. 基本操作

QFile file;
file.setFileName();
file.open();
file.write();
file.read();
file.close();

QFileInfo info;
info.size();
info.fileName();

QDataStream: //通过二进制的方法操作
QTxetStream: //通过文本方式操作(指定编码)
QBuffer: //内存文件

2.  文件读操作

void Widget::on_Button_read_clicked()
{
QString path = QFileDialog::getOpenFileName(this, "open", "../", "TXT(*.txt)");

if(path.isEmpty() == false)
{
//文件对象
QFile file(path);

//打开文件: 只读的方式
bool isOK = file.open(QIODevice::ReadOnly);
if(isOK == true)
{
#if 0
//读文件: 默认只识别utf8编码
QByteArray array = file.readAll();

//显示到编辑区
ui->textEdit->setText(QString(array));
#endif

QByteArray array;
while(file.atEnd() == false)
{
//读一行
array += file.readLine();
}
ui->textEdit->setText(array);
}

//关闭文件
file.close();

}
}

3. 文件写操作

void Widget::on_Button_write_clicked()
{
QString path = QFileDialog::getSaveFileName(this, "save", "../", "TXT(*.txt)");
if(path.isEmpty() == false)
{
QFile file;//创建文件对象
file.setFileName(path);

//打开方式: 只写方式
bool isOK = file.open(QIODevice::WriteOnly);
if(isOK == true)
{
//获取编辑区内容
QString str = ui->textEdit->toPlainText();

/**
写文件
*/

//第一种
//QString -> QByteArray
file.write(str.toUtf8());

// //第二种
// //QString -> c++ string -> char*
// file.write(str.toStdString().data());

// //转换为本地平台编码
// file.write(str.toLocal8Bit());

// //第三种
// //QString -> QByteArray
// QString buf = "123";
// QByteArray a = buf.toUtf8();//中文
// a = buf.toLocal8Bit();//本地编码

// //QByteArray -> char *
// char *b = a.data();

// //网络转换
// char *p = "abc";
// QString c = QString(p);

}

//关闭文件
file.close();
}
}

tips: 

设置整个文件的编码格式为utf-8
#pragma execution_character_set("utf-8")

QT中的小细节的更多相关文章

  1. 手摸手教你如何在 Python 编码中做到小细节大优化

    手摸手教你如何在 Python 编码中做到小细节大优化 在列表里计数 """ 在列表里计数,使用 Python 原生函数计数要快很多,所以尽量使用原生函数来计算. &qu ...

  2. javaScript中的小细节-script标签中的预解析

    首先介绍预解析,虽然预解析字面意思很好理解,但是却是出坑出的最多的地方,也是bug经常会有的地方,利用好预解析的特性可以解决很多问题,并且提高代码的质量及数量,浏览器在解析代码前会把变量的声明和函数( ...

  3. 关于 JavaScript 中一个小细节问题 (在控制台中直接 {Name:'王尼玛',Age:20} 对象报错问题)

    在 Chrome 浏览器,大家可能遇到这样一个小问题. 随便输入一个 Object 对象  ,比如 {Name:'王尼玛',Age:20} ,将会报错.之前,也从来没去考虑过到底是为啥原因. 今天,刚 ...

  4. javaScript中的小细节-局部作用域中的var

    javaScript中var是很神奇的,在局部作用域中,var a = b = c = 1;是不一样的,a为使用var声明的变量,而b和c则是全局下的,此类变量被称为隐式全局变量:var a = 1; ...

  5. sql中的小细节

    1.SUM与COUNT的区别 SUM是对符合条件的记录的数值列求和 COUNT 是对查询中符合条件的结果(或记录)的个数 2 select name as 姓名,tel  from...where.. ...

  6. Python正则表达式使用过程中的小细节

    今天用Python写了个简单的爬虫程序,抓取虎扑篮球(nba.hupu.com)的首页内容,代码如下: #coding:gb2312 import urllib2, re webpage = urll ...

  7. C++11中的小细节--字符串的原始字面量

    原始字面量很容易理解,即不进行转义的完整字符串. 最近看了看Python,其中讲到了原始字符串. Both string and bytes literals may optionally be pr ...

  8. 不要忽视Web编程中的小细节

    概述:长时间以来,我们创造了某些在构造和范围内用以提升网站易用性的约定和实践.然后在我们进行web编程的时候总有一些疏忽和纰漏.这里总结了一些web编程时容易出现的小错误,并给出了相应的补救方法,希望 ...

  9. apache配置中的小细节

    configuration error: couldn’t perform authentication错误的解决办法 configuration error: couldn’t perform au ...

随机推荐

  1. PHP中对用户身份认证实现两种方法

    用户在设计和维护站点的时候,经常需要限制对某些重要文件或信息的访问.通常,我们可以采用内置于WEB服务器的基于HTTP协议的用户身份验证机制.     当访问者浏览受保护页面时,客户端浏览器会弹出对话 ...

  2. Hadoop学习之路(五)Hadoop集群搭建模式和各模式问题

    分布式集群的通用问题 当前的HDFS和YARN都是一主多从的分布式架构,主从节点---管理者和工作者 问题:如果主节点或是管理者宕机了.会出现什么问题? 群龙无首,整个集群不可用.所以在一主多从的架构 ...

  3. 初识Qt窗口界面

    1.新建一个新的Qt Gui应用,项目名称随意,例如MyMainWindow,基类选择QMainWindow,类名为MainWindow. 2.项目建立后,双击mainwindow.ui文件,在界面的 ...

  4. ddt 接口框架数据处理调用excel 处理

    之前在csdn写过这里就不赘述了: https://blog.csdn.net/chen498858336/article/details/84351146

  5. python logging模块日志回滚TimedRotatingFileHandler

    # coding=utf-8 import logging import time import os import logging.handlers import re def logger(app ...

  6. linux如何查看进程OOM killer

    基本概念: Linux 内核有个机制叫OOM killer(Out-Of-Memory killer),该机制会监控那些占用内存过大,尤其是瞬间很快消耗大量内存的进程,为了防止内存耗尽而内核会把该进程 ...

  7. POJ 2250 (LCS,经典输出LCS序列 dfs)

    题目链接: http://poj.org/problem?id=2250 Compromise Time Limit: 1000MS   Memory Limit: 65536K Total Subm ...

  8. 火狐下不能使用非行间样式currentStyle用getComputedStyle获取

    用js的style属性可以获得html标签的样式,但是不能获取非行间样式.那么怎么用js获取css的非行间样式呢?在IE下可以用currentStyle,而在火狐下面我们需要用到getComputed ...

  9. 卸载JLink驱动弹出“could not open INSTALL.LOG file”的解决方法

    我的操作环境是Windows 10 64位,JLink驱动的版本是V4.96. 最近好久不用STM32了,打算把JLink驱动卸载掉,但是无论是用JLink驱动自带的卸载程序还是控制面板来卸载,都会弹 ...

  10. JavaWeb基础—上传与下载

    1.上传(不能使用BaseServlet): 上传的作用,略 上传的要求(对表单和Servlet都有要求): 1.必须使用表单,而不能是超链接,method="post" 文件明显 ...