QT学习总结

1.在进行QT程序的打包:

改图标(图标格式必须是.ico格式),不能为了图方便,直接将图片后缀名改成.ico

2.qt用同一个按钮实现开机和关机的切换

发现怎么样都切换不了,之后通过打印调试时发现它的触发槽函数中void Widget::on_btnCloseOrOpen_clicked(bool checked);的checke默认为false,并且无法切换为true,所以最后通过在构造函数中添加ui->btnCloseOrOpen->setCheckable(true);来将checke设置为true就能正常切换了

3.cpp中出现引用名不存在

控件名有时候没有修改成功就会造成在.cpp中出现引用名不存在。解决方法:这时候在ui界面(关键),需要当前处于ui界面,点击左下方的锤子图标,构建项目,然后点击三角加虫子图标(start debug),应该就解决了。注意:重构ui文件,会使一些控件的名字恢复,所以需要手动重新修改。

4.获取系统根目录

要包含#include <QStandardPaths>该头文件。

QString fileName = QFileDialog::getSaveFileName(this, tr("Save as ..."),                (QStandardPaths::writableLocation(QStandardPaths::DesktopLocation)), tr("Text files (*.txt);;All File (*.*)"));

5.QByteArrayQString的区别

1)QByteArray QString::toutf8() const是QString类的成员函数,可以将其utf8格式的QByteArray,这是最常用的QString转换程QByteArray的方法,也最好用这个,不建议用下面的toLocal8bit()函数。

2)QString QString::fromUtf8(const QByteArray &str)是QString类的静态函数,可以将QByteArray 转换为QString 。

3)QString QString::fromLocal8Bit(const QByteArray &str)是QString类的静态函数,可以将本地编码的QByteArray 转换为QString,一般windows系统的本地编码格式是ANSI码(也叫本地编码页编码),MSVC默认的就是ANSI格式。

4)QByteArray QString::toLocal8Bit() const是QString类的成员函数,可以将QString类对象转换为本地编码的QByteArray对象。

5)QString类做不到一步转换到char*,只有先通过QString调用QString的成员函数toutf8转换到QByteArray,再调用QByteArray的成员函数data才能转换程char*。

6)QString与QByteArray类的区别:①同样的字符串串对象,其length有可能是不一样的,QString算的length是字符长度,一个汉字字符或其他特殊字符都算1个,而QByteArray算的是字符串占用的字节数,一个汉字占3个字节,一个英文占1个字节,1个特殊字符占1个;②QByteArray就是对char*的浅层次包装,QString是内部做了深层次包装,重新对其做了utf8编码。

6.Qt的网络编程:

Qt网络模块提供了一些类实现OSI 7层网络模型中高层的网络协议,如HTTP、FTP、SNMP等

这些类主要为:

QNetworkRequest类:通过一个URL地址发起网络协议请求,也保存网络请求的信息,目前支持HTTP、FTP和局部文件URLs的下载或上传

NetworkAccessManager类:用于协调网络操作。在QNetworkRequest发起一个网络请求后,NetworkAccessManager负责发送网络请求,创建网络响应

QNetworkReply类:表示网络请求的响应。由NetworkAccessManager在发送一个网络请求后创建一个网络响应。QNetworkReply提供finished()、readyRead()、downloadProgress()可以监测网络响应的执行情况,执行相应的操作

QNetworkReply是QIODevice的子类,所以QNetworkReply支持流读写功能,也支持异步或同步工作

想要使用那个类就添加相应的头文件,头文件名与类型

7.QVector基本用法

使用vector容器,并加入以下代码:

include <vector>

可以使用append函数或者<<操作符来在数组最后端添加元素而不用担心溢出问题

添加元素:

QVector<QString> strArray;         

strArray.append("Hello"); //可以这样       

strArray<<"World!"; //也可以这样        

strArray<<"MyName"<<"is"<<"LEO";//也可以这样加上个元素        

//现在strArray总共有5个字符串元素,strArray.count()==5     

遍历:

QVector<QString>::iterator iter;  

for (iter=strArray.begin();iter!=strArray.end();iter++)  

{  

    qDebug() <<  *iter << "\0";

}  

删除元素

strArray.remove(0); //删除第0个元素,从0开始

strArray.remove(1,2); //从第1个元素开始,删除2个元素

strArray.replace(2,11); //用11替换第2个元素,从0开始

除了append()和replace()这两个函数外,其它函数会比较慢,因为在内存中移动一个位置时,这些函数会使向量容器内的对象要移动许多次!如果想要一个能够在中部快速插入和删除的容器时,可以使用QList或者QLinkedList。

8.将光标移动到文本末尾

通过调用如下语句,可以将光标移动到文本末尾。其他类型的文本控件也是同理。

ui->QTextEdit_rx->moveCursor(QTextCursor::End,QTextCursor::MoveAnchor);

9.QTextCodec


Qt提供了一组QTextCodec类来帮助将非Unicode格式转换为Unicode或从Unicode转换为非Unicode格式。还可以创建自己的编解码器类。

//关于QTextCodec对象:

//该对象主要用于非Unicode编码数据与Unicode编码数据之间的转换,例如:

//假设现在有一个采用俄国的KOI8-R编码格式的字符串encodedString,现在将它转换成Unicode

QByteArray encodedString = "Hello";

QTextCodec *codec = QTextCodec::codecForName("KOI8-R");

QString string = codec->toUnicode(encodedString);

//上述操作完成后,string里存储的就是Unicode编码的字符串了

//相反的过程:

QTextCodec *codec = QTextCodec::codecForName("UTF-8");

QByteArray encodedString = codec->fromUnicode(string); //UTF-8是中文编码

//操作完成后,encodedStirng里存储的就是从Unicode转换来的UTF-8编码的字符串了

//上述代码也实现了从KIO8-R到UTF-8的转换

10.Unicode、UTF-8编码详解

Unicode是国际标准字符集,它将世界各种语言的每个字符定义一个唯一的编码,Unicode字符集的编码范围是 0x0000 - 0x10FFFF(因此需要 1 到 3 个字节来表示),每个字符都有一个二进制数值和它对应,这里的二进制数值也叫 码点。

字符集是很多个字符的集合,字符编码是字符集的一种实现方式,把字符集中的字符映射为特定的字节或字节序列,它是一种规则。

Unicode 只是字符集(它只规定了每个符号的二进制值,但是符号具体如何存储它并没有规定),UTF-8、UTF-16、UTF-32 才是真正的字符编码规则,"UTF" 意思是"Unicode 转换格式",后面的数字表明至少使用多少个比特位来存储字符, 比如:UTF-8 最少需要8个比特位也就是一个字节来存储

具体看:Unicode、UTF-8编码详解_unicode编码和utf-8-CSDN博客

11.for (char c : s)

对数组(或容器类,如vector和array)的每个元素执行相同的操作,此外string类也支持这种对字符的遍历循环操作。
如:

double prices[5] = {4.99,5.99,6.99,7.99,8.99};
for(double x:prices)
cout << x << endl;


其中,x最初表示数组prices的第一个元素,显示第一个元素后,不断执行循环,而x依次表示数组的其他元素

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值