C++系列三:QT初识
前言
开发环境,挺折腾人,一波三折。
参考链接:官方文档、C语言中文网、QT快速入门、书栈网
博主:qt技术开发老杰、Bibili
其他:Qt 使用vs2022开发、VS+QT程序打包发布1、打包2
常见配置问题:
- 解决Visual Studio下使用qDebug没有输出
项目属性->Linker->System->SubSystem设置为Console (/SUBSYSTEM:CONSOLE);output:选择Debug控制台; - QSqlDatabase 不存在:VSTools-Qt=>projiect settings=>Qt mudules,
- Qt6.5编译MySQL驱动最简单方法:https://www.cnblogs.com/isleeping/p/17287857.html
QT介绍
- 跨平台的GUI,于1995年5月发布
- 主要用于桌面程序开发和嵌入式开发。
- 目前 Qt 的开源授权有两种,一种是 GPL 授权,另一种是 LGPL 授权
GPLv2/GPLv3许可:使用了GLP许可的Qt代码允许销售,但必须开源。GPLv3还要求公开相关硬件信息。
LGPLv3许可:与GPL类似,但更宽松。若只是链接或调用GPL许可协议的Qt代码,可以不开源。 - QML 主要用于手机移动应用程序
- Windows 下的 GUI 解决方案比较多:
基于 C++ 的有 Qt、MFC、WTL、wxWidgets、DirectUI、Htmlayout;
//相关术语
//Qt Creator
Qt 的集成开发环境,本教程就使用它来创建和管理 Qt 项目。
//Assistant(Qt 助手)
用来查看帮助文档,已被集成在 Qt Creator 中。
//Designer(Qt 设计师)
图形界面可视化编辑工具,已被集成在 Qt Creator 中,在 Qt Creator 中编辑或创建界面文件时,就可以自动打开。
//Linguist(Qt 语言家)
多国语言翻译支持工具,可以用来编辑语言资源文件,在开发多语言界面的应用程序时会用到。
//Qt for Desktop
Qt 命令行工具,用来配置 Qt 开发环境(主要是设置 PATH 变量)。
//qmake
核心的项目构建工具,可以生成跨平台的 .pro 项目文件,并能依据不同操作系统和编译工具生成相应的 Makefile,用于构建可执行程序或链接库。
//Dynamic Link 和 Static Link:
动态链接库、静态链接库
Linux/Unix 系统里静态库扩展名一般是 .a,动态库扩展名一般是 .so 。Windows 系统里 VC 编译器用的静态库扩展名一般是 .lib,动态库扩展名一般是 .dll 。
//Explicit Linking 和 Implicit Linking:
Explicit Linking 即显式链接,Implicit Linking 即隐式链接,这两种都是动态链接库的使用方式。
项目类型:
//Qt Widgets Application
桌面平台的有图形用户界面GUI
//Qt Console Application
控制台应用程序
//Qt Quick Application
移动用户界面GUI
//Q_OBJECT
Q_OBJECT:本质是一个已定义好的宏,所有需要“信号和槽”功能的组件
//QT常用快捷键
工具->选项->环境->键盘,查看各默认快捷键;
F1 //帮助文档
F2/ctrl+鼠标左键 //追踪源,变量和函数的声明和定义相互切换
F3 //Ctrl+F查找,下一个
F4 //源文件与头文件相互切换
F5 //开始调试
F9 //设置断点相互切换
F10 //执行当前行程序语句
F11 //跟踪进入,即如果当前行有函数,就进入函数体
Ctrl+B //编译当前项目
Ctrl+R //运行程序(非调试)
Ctrl+H、L //水平布局、垂直布局
Ctrl + A=>(Ctrl + I) //自动对齐代码,要选中才有效
Ctrl+F //查找、替换
Ctrl+/ //注释相互切换
Ctrl+Shift+S //保存所有文件
Ctrl + 滚轮 //编辑界面放大/缩小
Alt + Enter //快捷创建函数
Ctrl + Alt + ↑↓ //当前/选中行向上/下复制
//Ui设计界面
F3 //编辑控件
F4 //编辑信号槽
小记
1. 编码格式
#include <QTextCodec> //添加头文件
QTextCodec::setCodecForTr(QTextCodec::codecForLocale()); //设置编码
QTextCodec::setCodecForTr(QTextCodec::codecForName("GB2312"));
2. tr()函数
随国际化变化。
ui->pushButton->setText(tr("新窗口"));
3. 两类窗口打开的方式,
一个是自身消失而后打开另一个窗口;
一个是打开另一个窗口而自身不消失。
- 在主窗体添加一个按钮=>添加一个插槽=>跳转页面
//QDialog *dlg=new QDialog(this);
//dlg->show();
LoginDlg dlg;
dlg.exec();
- 在跳转页面添加一个按钮=>添加一个插槽 clicked()信号和LoginDlg的accept()槽并按下确定按钮。=>main.cpp
MainWindow w;
LoginDlg dlg; // 建立自己新建的类的对象dlg
if(dlg.exec() == QDialog::Accepted) // 利用Accepted返回值判断按钮是否被按下
{
w.show(); // 如果被按下,显示主窗口
return a.exec(); // 程序一直执行,直到主窗口关闭
}
else return 0; //如果没被按下,则不会进入主窗口,整个程序结束运行
4. 常用控件属性设置:
if(ui->usrLineEdit->text().trimmed() == tr("admin")&& ui->pwdLineEdit->text() == tr("123456"))
QLabel *lab; //声明
this->lab=new QLabel("hello,world",this);
ui->firstBtn->setText("新窗口");
QMessageBox::warning(this, tr("Waring"),tr("error!"), QMessageBox::Yes);
// 清空内容并定位光标
//placeholderText、setEchoMode(QLineEdit::Password)
ui->usrLineEdit->clear();
ui->pwdLineEdit->clear();
ui->usrLineEdit->setFocus();
5. 菜单设置:
// 创建新的动作
QAction *openAction = new QAction(tr("&Open"), this);
// 添加图标
QIcon icon(":/myImages/images/close.png");
openAction->setIcon(icon);
// 设置快捷键
openAction->setShortcut(QKeySequence(tr("Ctrl+O")));
// 在文件菜单中设置新的打开动作
ui->menu_F->addAction(openAction);
6. 其他:
//记事本打开myResources.qrc
是一个XML文档
//文件(&F)
表明将菜单的快捷键设置为了Alt+ F
//添加资源文件=>/myImages=>images=>需要的图标文件粘贴进去=>可以别名
icon(":/myImages/close");
7. qDebug("111"+str);
qDebug()<<"111";
8.
//设置粗体,斜体,下划线
QFont font=ui->plainTextEdit->font();
font.setBold(checked);
//font.setItalic(checked);
//font.setUnderline(checked);
ui->plainTextEdit->setFont(font);
//设置字体颜色:
QPalette plet=ui->plainTextEdit->palette();
if(ui->radioButton_black->isChecked())
plet.setColor(QPalette::Text,Qt::black);
if(ui->radioButton_blue->isChecked())
plet.setColor(QPalette::Text,Qt::blue);
if(ui->radioButton_red->isChecked())
plet.setColor(QPalette::Text,Qt::red);
ui->plainTextEdit->setPalette(plet);
QPushButton btn("button");
QObject::connect(&btn,&QPushButton::clicked,&QApplication::quit);
QObject::connect(&btn,&QPushButton::clicked,[](bool) {
qDebug() << "You clicked me!";
});
btn.show();