QT高级编程之基本函数用法

1.QString类函数介绍

  • toInt()函数,可以将整型按照不同进制转换为QString对象;
  • number()函数,可以将QString对象转换为不同进制的数字;

2.文档查询方法:通过Qt Creator编辑器通过帮助->索引->QString查看QString类的相关文档,里面包含了QString类的成员函数,静态方法,宏以及继承而来的方法等相关信息。
在这里插入图片描述
3.工程中的Q_OBJECT宏

  • Qt提供了元对象系统的机制,其中包含了信号与槽的内部机制,能够访问QObject子类的元对象信息的功能;
  • QOBJECT宏声明了在每个QObject子类中必须的内省函数,如metaObject()、tr()、qt_metacall();
  • Qt的MOC工具生成了Q_OBJECT声明的所有函数和所有信息的实现;
  • connect(),disconnect()可以建立信号与槽的连接与释放;

对于自己写的类,想要具备信号与槽机制,在类中添加Q_OBJECT宏即可;

4.QComboBox,QListWidget、QTableWidget、QTreeWidget控件中都有item,可以通过右键->编辑项来添加可选项;

  • QComboBox:currentIndex()函数可以判断下拉框选中的项的索引

5.QMessageBox:提供一个模态对话框显示消息;

  • 模态对话框:只能操作当前的模态对话框,其他对话框不能操作;
  • 非模态对话框:多个对话框之家可以切换操作;

6.UIC的使用
UIC可以编译.ui文件,把它编译为源文件.进入QT的命令行模式,通过过下面命令可以编译.ui文件.

uic mainwindow.ui >>ui_mainwindow.h

7.通过创建从QMainWindow继承的项目,在菜单栏输入文件(&F),即在程序中创建了一个文件菜单选项,并且指定了快捷键为Ctrl + F.

8.属于QtGui模块的类,可以自动释放资源,而对于QtCore核心模块的资源需要手动释放资源.

9.相关函数介绍:

  • QTextStream : readAll():读取所有文本信息;
  • QFileDialog:getOpenFileName():获取打开文件对话框选择的文件名;
  • QMessageBox:information():显示信息;
  • QFile file:
    • errorString():显示错误信息;
    • open(QIODevice::ReadOnly):打开文件并指定打开模式;
//保存
QString filename = QFileDialog::getSaveFileName(this,"保存",QDir::currentPath());QFile *file = new QFile();
file->setFileName(filename);
bool success = file->open(QIODevice::WriteOnly);QTextStream os(file);
//将文本框中的文本转化为纯文本并写入文件;
os<<ui->textEdit->toPlainText();
file->close();
delete file;

10.QTextEdit类用法

  • 槽函数:具有清除,拷贝,剪切等槽函数,QTextEdit支持这些操作.

11.QFontDialog,获取字体对话框;

bool success;
QFont font = QFontDialog::getFont(&success,this);

12.QColorDialog类用法

QColor color = QColorDialog::getColor(Qt::red,this);
//如果颜色可用
if(color.isValid())
{
}
else
{}

13.QDateTime显示当前时间

QDateTime current = QDateTime::currentDataTime();
//设置时间显示格式,yyyy表示年份,M月份,dd日期,hh小时,mm分钟,mm秒,2021-7-25 20:21:00
QString time = current.toString("yyyy-M-dd hh:mm:ss");

14.QMenu::triggered信号:
菜单项被点击将触发该信号,将该信号连接到相应的槽即可实现相应的操作.

15.资源文件的添加和使用

  • 将资源拷贝到工程目录下,通过添加资源来添加,创建资源文件.qrc后,通过Add->Add Prefix,Add->Add->File来添加项目目录下的资源.然后Save all保存.
  • 切换到ui界面,通过Action Editor来为每个菜单项添加图标,Edit->Icon->选择资源,进入到资源选择界面,将添加的资源刷新,即可在界面显示添加的资源,然后选择需要添加的icon即可.
  • 可以直接将Action Editor中的选项拖拽到工具栏即可实现工具栏图标的添加.并且与与功能关联在一起.
  • 通过右键->改变样式表->Add Resource->border-image,可以为ui界面添加背景图片,背景随着窗口大小自动调整.

16.设置编辑框为密码框

ui->lineEdit->setEchoModel(QLineEdit::Password);

17.Ollydbg可以对一个程序进行分析,通过将程序拖拽进Ollydbg,可以对其进行分析.

18.QDesktopServices类
可以对桌面程序进行服务,如打开一个网页,可以通过如下方法来实现.

QDesktopServices::openUrl(QUrl("www.baidu.com"));

19.QMovie类用法
同Label对象显示gif动画,主要通过QMovie类来实现.

QMovie *movie = new QMovie("movie.gif");
ui->movielabel->setMovie(movie);
movie->start();...movie->stop();...//获取gif的帧数
movie->frameCount();

20.程序启动画面
使用QSplashScreen类来实现.

QPixmap pixmap("start.png");
QSplashScreen splash(pixmap);
//显示
splash.show();//程序初始化操作,时间长时,将可以看到启动画面,
MainWindow w;
...//关闭
splash.finish(&w);

21.关闭事件
主要使用QCloseEvent类实现,所有的事件都是受保护的成员函数.根据需要处理关闭事件.
QClostEvent* event;

  • enent->accept();
  • event->ignore();

22.打包编码乱码问题

  • 可以通过将所使用的Qt版本下plugins下的codecs文件夹拷贝到项目目录下一起进行打包.
  • 设置中文
//设置中文
#include<QTextCodec>
QTextCodec::setCodecForLocale(QTextCodec::codecForName("gb2312"));
QTextCodec::setCodecForCString(QTextCodec::codecForName("gb2312"));
QTextCodec::setCodecForTr(QTextCodec::codecForName("gb2312"));

23.临时文件和临时目录
主要通过QTemporaryFile来操作临时文件,临时目录是用来存放临时文件的,不同平台具有不同的临时目录,可以通过 QDir::tempPath() 来获取临时目录.

//打印目录
QDir::homePath();//管理员用户目录
QDir::rootPath();//根目录
QDir::tempPath();//临时目录

24.文件属性类QFileInfo

QDateTime time = QFileInfo::created();  //创建时间
QDateTime time = QFileInfo::lastRead(); //最后访问时间
qint64 size  = QFileInfo::size();       //文件大小
QDateTime time = QFileInfo::isDir();    //是否是文件夹

25.QListWidget用法

  • 项的概念,添加项Item,通过QListWidgetItem来构造项,并添加.也可以添加图标资源.
//添加项
QListWidgetItem *item = new QListWidgetItem();
item->setText("北京");
listWidget->addItem(item);//删除项
int count = listWidget->count();//获取项数量//注意:通过循环来删除所有项时,需要注意每删除一个后面的项会往前移,导致原来的删除逻辑容易出错,因此可以一直删除第一个就可以全部删除;
listWidget->takeItem(i);//删除第i项;//全部删除
for(int i = 0;i<count;++i)
{listWidget->takeItem(0);
}
  • 通过setViewMode() 函数可以设置控件的显示模式,是列表模式还是图标模式.
//图标模式
listWidget->setViewMode(QListWidget::IconMode);
  • 项的点击信号:QListWidget中的项相应点击信号,查阅QlistWiget可以发现,具有itemDoubleClicked(QListWidgetItem* item)和itemClicked(QListWidgetItem* item)信号,因此可以编写两个槽函数来响应信号.

26.QStringList字符串列表
继承QList< QString>而来.

//获取所有文件夹和文件的名称
QDir dir = QDir::current();
QStringList filenames = dir.entryList();
//QFileDialog::getOpenFileNames(this,"Get All File Name.",QDir::currentPath());for(int i = 0;i<filenames.size();++i)
{QString name = filenames.at(i);//获取值
}

28.截图操作相关知识介绍
获取图片时,需要把截图程序窗口最小化或隐藏,在执行截图操作.

  • 通过QPixmap::grapWindow(winID)来获取winID标识的窗口图片;
  • QDesktopWidget:可以获取当前程序所在的窗口ID;
  • WId id = winId();

在IDE中,将鼠标放到一个函数上,可以显示该函数的参数,在显示参数的时候按下F1,可以跳转到该函数的说明文档界面.

//隐藏
this->hide();//获取当前程序所在屏幕的id;
QPixmap::grapWindow(QApplication::desktop()->winId());//按比例缩放图片到指定大小,scaled函数
ui->screenLabel->setPixmap(this->pixmap.scaled(ui->screenLabel->size()));//QTimer 定时器类用法,具有timout信号,可以处理超时信号
QTimer timer->start(5000);//计时5秒,timer->stop();//停止计时
//发出声音;
qApp->beep();
  • 保存截图:通过QDesktopServices类中的storageLocation()函数来保存信息,可以设置保存到“我的文档”,“图片”等系统默认的文件夹中。
//保存到图片文件夹
QDesktopServices::storageLocation(QDesktopServices::PicturesLocation);
QString fileName = QFileDialog::getSaveFileName(this,"Save File",QDesktopServices::storageLocation(QDesktopServices::PicturesLocation));//保存截图
pixmap->save(fileName);

29.系统剪切板QClipboard

  • 数据保存到剪切板,可以用于进程间通信。
QClipboard *clip = QApplication::clipboard();//获取剪切板文本
Qstring s = clip -> text();//向剪切板中添加图片
clip->setPixmap(pixmap);

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/484010.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux命令整理 —— vi 和 vim 编辑器

一、目录结构 二 、vim 和 vim 编辑器 2.1【基本介绍】 所有的 Linux 系统都会内建 vi 文本编辑器。 vim 具有程序编辑的能力&#xff0c;可以看做是 vi 的增强版本&#xff0c;可以主动的以字体颜色辨别语法的正确性&#xff0c;方便程序设计。代码补完、编译及错误跳转等方…

网络版ATM项目的实现——客户端

网络版的ATM实现思路 客户端 1 #include "customer.h"2 3 static int sockfd;4 5 /*int create_msg_queue_c(int key)6 {7 //创建消息队列8 int msgid msgget(key,IPC_CREAT|0644);9 if(0 > msgid)10 {11 perror("msgget");12…

为什么航空发动机那么难造?看看3D工作原理

来源&#xff1a;网络目前大部分航空发动机都是属于燃气涡轮型&#xff0c;民用客机的发动机突出的安全性和可靠性&#xff0c;而军用发动机在这个基础上还追求更大的推力&#xff0c;以及开加力时的最大推力。由此可见&#xff0c;航空发动机领域中最强者必然是军用航发&#…

OSGB格式解析

主要介绍倾斜摄影数据OSGB二进制数据的解析&#xff0c;首先简单介绍一下OpenSceneGraph相关技术&#xff0c;并介绍倾斜摄影数据的组织结构&#xff0c;着重分析OSGB格式的相关字段&#xff0c;最后逐字节对OSGB数据进行解析并通过OpenSceneGraph对数据进行可视化&#xff0c;…

《动手学深度学习》 第二天 (自动求梯度)

2.3、自动求梯度 MXNet提供的autograd模块可以用来自动求梯度。 2.3.1 一个简单的栗子 这里我们要求对函数 y 2xTx &#xff08;2乘以x的转秩乘以X&#xff09;求关于列向量 x 的梯度。(使用jupyter notebook) 1、 创建变量x,并赋初值 x nd.arange(4).reshape((4,1)) #…

Gartner发布2021年新兴技术成熟度曲线

来源&#xff1a;Gartner中国8月24日&#xff0c;Gartner 公司最新发布了“2021年新兴技术成熟度曲线”&#xff08;Hype Cycle for Emerging Technologies&#xff0c;2021&#xff09;。其中&#xff0c;建立信任&#xff0c;加速增长以及塑造变革将是三大主要趋势&#xff0…

Vue语法学习第一课——插值

学习关于Vue的插值语法 ① 文本值 &#xff1a; "Mustache"语法&#xff0c;即双大括号 1 <span>Message:{{msg}}</span> 注&#xff1a;双大括号中的msg值改变&#xff0c;插入的内容也会随之改变&#xff0c;可通过v-once指令限制&#xff0c;但会影响…

人工智能“上位”会让程序员消失吗?

大脑以及二进制代码&#xff08;图&#xff1a;Canva&#xff09;来源&#xff1a;Forbes作者&#xff1a;Nisha Talagala编译整理&#xff1a;科技行者写代码已经成了许多工作的一项关键技能。一些国家和学校甚至认为&#xff0c;编程语言是一种可以接受的外语。而在各种熙熙攘…

分类的IP地址

现有物理地址再有IP地址IP地址的表示方法为点分十进制法IP地址的设计思想&#xff1a;网络部分 主机部分 分类的IP地址 特征&#xff1a;根据不同特征的IP地址&#xff0c;事先约定好网络号所占的位数和主机号所占的位数。 A类地址 全球一共有27-2 个A类网络&#xff0c;每…

卫星对于物联网来说是一个非常好的选择

ALAMY来源&#xff1a;IEEE电气电子工程师对许多人来说&#xff0c;“物联网”一词可能会让人想起智能城市的努力&#xff0c;比如配备交通摄像头和空气质量传感器的路灯&#xff0c;或者在自己家里连接设备。一个很自然的问题是&#xff0c;为什么你从没想使用卫星连接任何这些…

利用子网掩码划分子网

分类IP地址的弊端 一个物理网络不能过大&#xff0c;否则网络性能很差&#xff0c;某个B类或A类IP网络无法全部用于单个物理网络分类IP地址分配不合理&#xff0c;利用率低分类IP地址设计的弊端 —— 不灵活&#xff0c;IP地址利用率不高 划分子网的思路 网络管理员将本应属于…

springcloud流程图

自己画的&#xff1a; 别人画的 别人画的2 转载于:https://www.cnblogs.com/dzhou/p/10504215.html

java 搭建 web服务器 socket实现

【写在前面】 云计算的第n个java作业&#xff0c;开始一直不懂为什么老师一直让我们写java web的小demo&#xff0c;不应该是hadoop啥的直接上框架嘛。后来慢慢了解到&#xff0c;其实java web 的一些内容确实是云计算的基础。这个demo是用java socket 来搭建一个web服务器&…

【趋势】未来十年计算机体系结构的历史和趋势

来源&#xff1a;机器之心先分享我对这篇文章的总结&#xff0c;或者我得到的启发&#xff1a;1、DSA&#xff08;Domain-Specific Architectures&#xff0c;特定领域的体系结构&#xff09;将成为未来十年甚至更长时间&#xff0c;计算机体系结构的趋势。登纳德缩放定律结束、…

java socket 实现增删改查 + 在线答题小案例

实现效果 &#xff08;1&#xff09; 在client端可以实现对数据库的操作&#xff08;Select&#xff0c;Insert&#xff0c;Update&#xff0c;Delete&#xff09; &#xff08;2&#xff09;数据库中创建一个考试表和学生表&#xff0c;考试表中问题是四项选择题&#xff08;…

90后斯坦福博士论文登Science封面!AI算法准确预测RNA三维结构

来源&#xff1a;Science编辑&#xff1a;yaxin、su「我们对大部分RNA的结构几乎一无所知。」半个世纪以来&#xff0c;确定生物分子的三维结构一直困惑着科学家&#xff0c;也是生物学的重大挑战之一。难就难在&#xff0c;RNA折叠成复杂三维结构的形状很难通过实验或计算来确…

Event Recommendation Engine Challenge分步解析第五步

一、请知晓 本文是基于&#xff1a; Event Recommendation Engine Challenge分步解析第一步 Event Recommendation Engine Challenge分步解析第二步 Event Recommendation Engine Challenge分步解析第三步 Event Recommendation Engine Challenge分步解析第四步 需要读者先阅读…

计算机网络之RIP协议与OSPF协议模拟、UDP与TCP编程,Wireshark抓包分析

通过Python模拟RIP协议,OSPF协议,并模拟UDP和TCP编程,并通过Wireshark抓包工具,对所发送的报文进行捕获分析。 文章目录 一、RIP协议的模拟与编程二、OSPF协议的模拟与编程三、UDP编程四、TCP套接字编程五、Wireshark 数据分析六、总结一、RIP协议的模拟与编程 1.1 题目 …

虚拟机 NAT模式与桥接模式的区别

同个人网站 https://www.serendipper-x.cn/&#xff0c;欢迎访问 &#xff01; NAT模式&#xff1a;相当于宿主机再构建一个局域网&#xff0c;虚拟机无法和本局域网中的其他真实主机进行通讯。只需要宿主机器能访问互联网&#xff0c;那么虚拟机就能上网&#xff0c;不需要再…

基础研究和前沿技术领域校企融合协同创新的国际经验及启示

来源&#xff1a;中国科学技术发展战略研究院作者&#xff1a;薛姝、何光喜、张文霞原载于《全球科技经济瞭望》2021年5月第5期摘要&#xff1a;促进大学与企业的合作是各个国家科技创新政策和创新体系建设的重点任务&#xff0c;近年来也出现了加强在基础研究和前沿技术领域加…