Qt学习day01 Qt的概述 第一个Qt程序 Qt字符串(QString)和字符编码 父窗口(容器窗口)

本文详细介绍Qt框架的历史发展,从1991年的初版到2013年Qt5.0的发布,再到2014年TheQtCompany的成立。涵盖了Qt5.4的安装配置过程,包括环境变量设置及依赖库安装。同时,文章深入讲解Qt助手的使用,从类的功能到成员函数,再到信号槽机制,帮助读者快速掌握Qt编程。此外,还介绍了第一个Qt程序的创建步骤,以及字符串处理和父窗口的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Qt(跨平台的C++ GUI应用程序开发框架)

一 Qt的概述
1 Qt的历史发展
1)1991年Haavard Nord和Eirik Chambe-Eng合作编写最初的Qt
2)1994年创立TrollTech(奇趣科技公司)
3)2005年Qt4.0发布
4)2008年诺基亚收购了奇趣科技
5)2009年源代码开放
6)2012年诺基亚将Qt业务出售给Digia公司
7)2013年Qt5.0发布
8)2014年Digia成立子公司The Qt Company
www.qt.io

2 Qt5.4安装和配置
1)下载Qt安装包
qt-opensource-linux-x64-5.4.1.run//64位
qt-opensource-linux-x86-5.4.1.run//32位

2)运行安装程序,根据提示默认安装在主目录
./qt-opensource-linux-x64-android-5.4.1.run

3)配置环境变量
思路:将QT相关可执行程序所在路径添加到PATH环境变量中
home/tarena/Qt5.4.1/5.4/gcc_64/bin
/home/tarena/Qt5.4.1/Tools/QtCreator/bin

sudo vi /etc/environment
PATH="/home/tarena/Qt5.4.1/Tools/QtCreator/bin:/home/tarena/Qt5.4.1/5.4/gcc_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games"

4)重启系统,测试
tarena@ubuntu:~$ qmake -v //可以看到Qt版本
tarena@ubuntu:~$ qtcreator //可以进入Qt的IDE

问题:QT运行时依赖libgstreamer和openGL,如果没有需要单独安装
在线安装:
sudo apt-get install libgstreamer0.10-0
sudo apt-get install libgstreamer-plugins-base0.10-0
sudo apt-get install libgl1-mesa-dev

练习:检查自己开发环境,有问题尽快解决;如果没有问题“assistant”进入qt帮助手册随便看看

3 Qt相关工具介绍
1)assistant(Qt助手)
2)qmake(Qt构建器)
3)designer(Qt设计师)
4)uic(Qt转换器)
5)moc(元对象编译器)
6)rcc(资源编译器)
7)qtcreator(Qt创造器)

4 Qt助手的使用
eg:QApplication/QLabel
1)先看第一句话,了解该类的主要功能,如果看不懂,可以点击“more”查看详细说明.
2)接着往下看,了解头文件,构建选项,继承关系
3)Properties(成员变量)
4)Public Functions(公有的成员函数)
5)Reimplemented Public Functions(公有的虚函数)
6)Public Slots(槽函数)//Qt中语法扩展
class QXX{
public slots:
void slot_func(…);//槽函数
};
7)Signals(信号函数)//Qt中语法扩展
class QXX{
signals:
void signal_func(…);//信号函数
};
8)Static Public Members(静态成员)
9)Reimplemented Protected Functions(保护的虚函数)
10)Detailed Description(详细描述)

二 第一个Qt程序
1 创建工程目录
mkdir Hello
2 进入工程目录,编写源程序(cpp)
cd Hello
vi main.cpp
3 执行“qmake -project”,生成"Hello.pro"的工程文件
vi Hello.pro
//表示将来要连接和widgets模块对应的头文件、库文件
QT += widgets
4 执行"qmake",根据工程文件生成编译链接脚本Makefile
5 执行“make”完成编译和链接
注:如果代码有错误,修改之后再次执行make即可,一般3、4两步不需要重复执行.
6 运行测试
./Hello

三 Qt字符串(QString)和字符编码
1 常见编码
1)linux中默认utf-8
2)window中默认GBK
3)qt内部默认unicode
注:Qt5中使用“const char*”表示的中文字符串构造QString对象时,默认会使用fromUtf8()转换为unicode编码,可以正常显示.

2 编码转换(QTextCodec)
//char buf[]
QByteArray encodedString = “中文的GBK编码字符串”;

//1)创建GBK编码对象
QTextCodec *codec = QTextCodec::codecForName(“GBK”);
//2)将GBK编码字符串转换为Unicode编码
QString string = codec->toUnicode(encodedString);

练习:创建Qt应用程序,里面包含一个标签(QLabel)和一个按钮(QPushButton),标签显示文本“我是标签”,按钮显示文本“我是按钮”
1)用vi编写程序,构建6步,结果可以正常显示
2)通过vi底行命令修改编码方式为"gbk",再次make,结果中文乱码
:set fileencoding=gbk
3)通过QTextCodec进行编码转换,再次make,结果又可以正确显示.

四 父窗口(容器窗口)
1 创建图形控件可以指定父窗口,让其停靠在父窗口上面;如果没有指定父窗口则飘在外面形成独立窗体。

2 常用表示父窗口的类
1)QWidget
2)QMainWindow(主窗口)
3)QDialog(对话框)
注:QWidget和它的所有子类都可以用于父窗口,但是常用的父窗口类只有上面三个。
注:当父窗口对象销毁时,上面停靠的控件(对象)将自动被销毁,如果new的控件(对象),不显式delete也不会内存泄漏。

3 QWidget中两个常用函数
1)调整大小
resize(int w,int h);
2)调整位置
move(int x,int y);

Qt框架中,若要将一个包含年月日时分秒的字符串分割,并将其各自的部分以单字节或双字节形式保存到一个64位的long long类型变量中,我们需要进行一些转换操作。由于一个字节有8位,而long long有64位,我们可以使用位操作来实现这一需求。 首先,我们需要将年月日时分秒的信息从字符串中提取出来。在Qt中,可以使用QString类的方法来实现这一点。然后,我们可以将每个时间单位的数值转换为二进制形式,并根据需要占用的字节数进行位移操作,最后将它们组合成一个long long类型的变量。 以下是一个简单的例子,展示了如何将年(4字节)、月(1字节)、日(1字节)、时(1字节)、分(1字节)、秒(1字节)的值合并到一个long long变量中: ```cpp #include <QString> #include <QStringRef> #include <QUuid> // 假设我们有一个包含年月日时分秒的字符串 "20230101123045" QString timeStr = "20230101123045"; // 使用QStringRef分割字符串并转换为整数 QStringRef yearRef(&timeStr, 0, 4); QStringRef monthRef(&timeStr, 4, 2); QStringRef dayRef(&timeStr, 6, 2); QStringRef hourRef(&timeStr, 8, 2); QStringRef minuteRef(&timeStr, 10, 2); QStringRef secondRef(&timeStr, 12, 2); int year = yearRef.toString().toInt(); int month = monthRef.toString().toInt(); int day = dayRef.toString().toInt(); int hour = hourRef.toString().toInt(); int minute = minuteRef.toString().toInt(); int second = secondRef.toString().toInt(); // 合并到一个long long变量中 // 注意:这里假设时间单位的顺序为年月日时分秒,并且按此顺序进行位移 long long dateTimeCombined = (year << 24) | (month << 16) | (day << 8) | hour | (minute << 8) | second; // 此时dateTimeCombined就包含了合并后的数据 ``` 请注意,上面的代码示例是按照特定的顺序位数要求来存储年月日时分秒的信息。在实际应用中,你可能需要根据实际需求调整位移的位置大小。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值