Qt知识点汇总

龙志勇
2023-12-01

长期补充更新……

1.Qt Creator常用快捷键

快捷键说明
F1帮助文档
F4头文件和cpp文件切换
F5开始调试
Alt+shift+RUI界面预览
Crtl+R运行
Ctrl+I缩进
Ctrl+/添加或取消注释

2.Qt Creator使用技巧

  • 属性生成
    QtCreator可以自动生成get、set函数以及change信号的。只要写上Q_PROPERTY那一行,光标放在Q_PROPERTY上, 用右键菜单 -> Refactor -> Generate Missing Q_PROPERTY Memory 即可生成。也可以使用快捷键,光标放在Q_PROPERTY上,按Alt + Enter。
  • 类的成员函数模板生成
    光标放在头文件类函数声明处, 用右键菜单 -> Refactor -> (选择相应选项)即可按需生成。
  • 代码格式化
    QtCreator提供了Beautifier插件,用于加载外部工具(Artistic Style、ClangFormat、Uncrustify)对代码进行格式化。

3.StyleSheet:样式表

  • 程序运行时属性值变化后 QSS 不会自动生效,需要调用
    widget->setStyleSheet("/**/") 或者 widget->style()->polish(widget) 强制刷新 QSS 。

4.Layout:布局

  • 部件大小设为固定值,布局变化控件大小不变
  • 希望部件随布局变化,调整sizePolicy,minimumSize,maximumSize

5.Qt获取CPU编号和硬盘序列号

getWMIC(const QString &cmd){  
  //获取cpu名称:wmic cpu get Name    
  //获取cpu核心数:wmic cpu get NumberOfCores   
  //获取cpu线程数:wmic cpu get NumberOfLogicalProcessors    
  //查询cpu序列号:wmic cpu get processorid   
  //查询主板序列号:wmic baseboard get serialnumber   
   //查询BIOS序列号:wmic bios get serialnumber   
   //查看硬盘:wmic diskdrive [where index=0] get serialnumber   
QProcess p;    
p.start(cmd);   
p.waitForFinished();  
QString result = QString::fromLocal8Bit(p.readAllStandardOutput());
return result;
} 

6. 鼠标拖动窗体代码

void Widget::mousePressEvent(QMouseEvent *e)
{
    if(e->button() == Qt::LeftButton  )
        offset=e->globalPos()-this->pos();
    e->accept();
}

void Widget::mouseMoveEvent(QMouseEvent *e)
{
    if(e->buttons() & Qt::LeftButton  )
        this->move(e->globalPos()-offset);
     e->accept();       
}

7.不规则窗体

QPixmap pix;
pix.load(":/image/pix.png");
resize(pix.size());
setMask(pix.mask()); //为窗口设置遮罩

void Widget::paintEvent(QPaintEvent*)
{
	QPainter painter(this);
	painter.drawPixmap(0,0,QPixmap(":/image/pix.png");
}

8.透明窗体

  • 部件透明效果,只需设置背景色alpha值。
    如:
QPushButton
{
background-color:rgba(255,255,255,100);
}
  • 窗口以及部件透明
setWindowOpacity(0.5);
  • 窗口背景透明,其中部件不受影响
//设置无边框
setWindowFlags(Qt::FramelessWindowHint);
//设置背景透明
setAttribute(Qt::WA_TranslucentBackground);

9.利用外部程序打开网址或文件

QDesktopServices::openUrl(QUrl("http://www.baidu.com"));
QDesktopServices::openUrl(QUrl("file:///C:/文件路径"));
//或者
QUrl url("C:/文件路径");
url.setScheme("file");
QDesktopServices::openUrl(url);

10.程序启动画面

#include "widget.h"
#include <QApplication>
#include <QSplashScreen>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QPixmap pixmap(":/splash.png");
    QSplashScreen splash(pixmap);
    splash.show();
    a.processEvents();

    Widget w;
    w.show();

    splash.finish(&w);

    return a.exec();
}

11.测量文字占据的空间大小的类

  • QFontMetrics
    QFontMetrics QWidget::fontMetrics() const
    Returns the font metrics for the widget’s current font. Equivalent to QFontMetrics(widget->font()).

12.qApp

引用唯一应用程序对象的全局指针。它等价QCoreApplication::instance()函数返回的指针,在GUI应用程序中,它是指向QApplication实例的指针。

13.Qt内置图标的使用

 QApplication::style()->standardIcon(QStyle::SP_ComputerIcon);

14.程序发布

14.1设置程序版本和图标

将准备好的ico图标文件放置在项目文件夹下,
然后在.pro文件中添加:


VERSION   	= 1.0.0
RC_ICONS    = app.ico

14.2文件打包

1.Qt Widget Application
将release模式编译生成的exe文件复制到一个空文件夹,如E:/hello,
然后从开始菜单打开 Qt 命令行,输入命令:cd /d E:\hello
然后使用 windeployqt 工具命令:windeployqt hello.exe
最后可以在E:\hello 文件夹里看到 windeployqt 工具自动复制的插件文件夹和 dll文件。这时候得到的就完整的 exe 程序发布集合。
2.QML Application
……
使用 windeployqt 工具命令:windeployqt helloqml.exe --qmldir D:\Qt\Qt5.5.1\5.5\mingw492_32\qml

–qmldir 是 Qt 安装文件里面的 qml 文件夹目录
……

15.Qt自带的加密方法

  • QCryptographicHash类
    QCryptographicHash类提供了生成密码散列的方法。该类可以用于生成二进制或文本数据的加密散列值。目前支持MD4、MD5、SHA-1、SHA-224、SHA-256、SHA-384和SHA-512。
  • QByteArray类
    QByteArray QByteArray::toBase64() const
    QByteArray QByteArray::fromBase64(const QByteArray & base64) [static]

16.耗时操作

除了使用多线程技术外,如果是循环等操作可以插入QCoreApplication::processEvents()函数

17.截屏功能

  • 常用的类和函数
	//推荐使用,rectangle取默认值只截取屏幕显示范围之内,需要截取屏幕显示之外内容需设置实际大小
	QPixmap QWidget::grab(const QRect &rectangle = QRect(QPoint(0, 0), QSize(-1, -1)))
	QPixmap QScreen::grabWindow(WId window, int x = 0, int y = 0, int width = -1, int height = -1)
	//过时,废弃
	[static] QPixmap QPixmap::grabWidget(QObject *widget, const QRect &rectangle)
	[static] QPixmap QPixmap::grabWindow(WId window, int x = 0, int y = 0, int width = -1, int height = -1)

18.输出PDF文件

常用的两种方法
1.使用QPdfWriter类
2.使用QPrinter类(即可输出到打印机,又可以输出为磁盘PDF格式文件)

19.JS Files in Qt Resource Files

使用Qt Webengine 和 JS 交互时,有时debug时正常,而release时报错。
尝试在pro文件中添加:

QTQUICK_COMPILER_SKIPPED_RESOURCES += resources/my_resource.qrc

这可以阻止Qt Quick编译器尝试为相应的JavaScript代码生成c++代码,以及从Qt资源文件中删除原始的JavaScript代码。

20.Qt+VS控件设置中文时出现乱码

  1. 使用QStringLiteral(“中文”)或Qstring::fromLocal8Bit(“中文”)进行修饰
  2. 在头文件声明中加上
#pragma execution_character_set("utf-8")

21.标准对话框按钮等控件文字英文改中文

  1. 拷贝Qt安装目录下的qt_zh_CN.qm和qt_zh_CN.ts文件到工程目录中
  2. 加载标准对话框的中文翻译文件
int main(int argc,char*argv[])
{
    QApplication a(argc,argv);
    QTranslator trans;
    trans.load("qt_zh_CN.qm",路径);
    a.installTranslator(&trans);
    return a.exec();
}

22.通过字体文件设置字体

bool setFont(const QString &strPath)  //strPath字体文件路径
{
    int fontId = QFontDatabase::addApplicationFont(strPath);
    if(fontId == -1)
    {
        //说明加载字体文件失败了,该字体不可用
        return false;
    }

    QStringList fontFamily = QFontDatabase::applicationFontFamilies(fontId);
    if(fontFamily.empty())
    {
        //说明从字体中获取字体簇失败了
        return false;
    }

    QFont font(fontFamily.at(0));
    qApp->setFont(font);
    return true;
}

23.程序添加版本信息

  • 配置图标(仅Windows有效)
    RC_ICONS = app.ico
  • 版本号
    VERSION = 1.0.0
  • 语言
    0x0004 表示 简体中文
    详见 https://docs.microsoft.com/zh-cn/windows/desktop/Intl/language-identifier-constants-and-strings
    RC_LANG = 0x0004
  • 公司名
    QMAKE_TARGET_COMPANY = XXX公司
  • 产品名称
    QMAKE_TARGET_PRODUCT = 测试
    -详细描述
    QMAKE_TARGET_DESCRIPTION = XXXXXX
  • 版权
    QMAKE_TARGET_COPYRIGHT = Copyright© 2018 XXXXX
 类似资料: