QT学习笔记
QT学习笔记1 程序打包
-
打开Qt 5.14.2(MinGW 7.3.0 32-bit)
-
进入程序文件夹, 然后输入
E:
// 进入程序存放的盘
cd E:\QtProjects\build-FastOpenTest-Desktop_Qt_5_14_2_MinGW_32_bit-Debug\release
// 进入程序exe文件存放的文件夹
windeployqt FastOpenTest.exe
// 生成程序所需依赖
QT学习笔记2 设置程序开机启动
-
Win+R
然后输入regedit
打开注册表
-
打开
HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run
-
右键
RUN
, 然后新建
,选择字符串值
, 修改名称为QuicklyOpenApps
-
双击
QuicklyOpenApps
, 在数值数据
中添加应用程序路径,然后点击确定
, 关闭注册表
-
打开
任务管理器
, 点击启动
, 查看是否添加成功 -
可在
任务管理器
修改该程序的开机启动状态,启用
或禁用
开机启动
QT学习笔记3 系统托盘
- 头文件
#include <QSystemTrayIcon> #include <QMenu> private: QSystemTrayIcon *myTrayIcon; // 系统托盘 QMenu *mMenu; // 托盘菜单 QAction *mShowMainAction; // 托盘菜单项 QAction *mExitAppAction; // 托盘菜单项 void createActions(); void createMenu(); void iniTray(); private slots: void on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason); void on_showMainAction(); void on_exitAppAction();
- 源文件
void Widget::createActions() { mShowMainAction = new QAction("显示界面", this); // 新加事件 mExitAppAction = new QAction("退出", this); } void Widget::createMenu() { mMenu = new QMenu(this); // 菜单实例化 mMenu->addAction(mShowMainAction); // 菜单添加项 mMenu->addSeparator(); // 菜单添加分割线 mMenu->addAction(mExitAppAction); myTrayIcon->setContextMenu(mMenu); // 托盘设置菜单 } void Widget::iniTray() { myTrayIcon = new QSystemTrayIcon(this); // 托盘实例化 QIcon icon = QIcon(QCoreApplication::applicationDirPath() + "/bin/quick.ico"); // 托盘图标 myTrayIcon->setIcon(icon); // 设置托盘图标 myTrayIcon->setToolTip(QString("QuicklyOpenApps")); // 设置托盘提示 createActions(); createMenu(); myTrayIcon->show(); // 显示托盘 // 事件触发 connect(myTrayIcon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason))); connect(mShowMainAction, SIGNAL(triggered()), this, SLOT(on_showMainAction())); connect(mExitAppAction, SIGNAL(triggered()), this, SLOT(on_exitAppAction())); } Widget::Widget(QWidget *parent) : QWidget(parent) , ui(new Ui::Widget) { ui->setupUi(this); iniTray(); } void Widget::on_activatedSysTrayIcon(QSystemTrayIcon::ActivationReason reason) { switch (reason) { case QSystemTrayIcon::Trigger: break; // 单点事件 case QSystemTrayIcon::DoubleClick: this->show(); break; // 双击事件 default: break; } } void Widget::on_showMainAction() { this->show(); } void Widget::on_exitAppAction() { exit(0); }
QT学习笔记4 打开外部exe程序
- 头文件
#include <QProcess>
- 源文件
QString path = "***.exe"; // 程序路径 QProcess::startDetached(path, QStringList()); // 通过cmd命令调用程序
QT学习笔记5 图片显示并添加点击事件
主要原理是利用
QLabel
的setPixmap
将图片在QLabel
中显示,并通过重写eventFilter
函数为QLabel
控件添加点击事件
- 头文件
#include <QImage> #include <QMouseEvent> private: QImage addImage; // 新建图片对象 protected: bool eventFilter(QObject *obj, QEvent * event); // 重写eventFilter函数,为QLabel添加点击事件
- 源文件
QString addPng = QCoreApplication::applicationDirPath() + "/bin/add.png"; // 图片路径 if (addImage.load(addPng)) { ui->addApp->setPixmap(QPixmap::fromImage(addImage.scaled(ui->addApp->size()))); // 将图片缩放到QLabel大小并显示 ui->addApp->installEventFilter(this); // 添加事件 } bool Widget::eventFilter(QObject *obj, QEvent *event) { if (obj == ui->addApp) { // 判断是否点击控件 if (event->type() == QEvent::MouseButtonPress) { // 判断是否点击鼠标 QMouseEvent *mouseEvent = static_cast<QMouseEvent*>(event); // 定义鼠标事件 if (mouseEvent->button() == Qt::LeftButton) { // 判断是否点击鼠标左键 // do something; } else if (mouseEvent->button() == Qt::RightButton) { // 判断是否点击鼠标右键 // do something; } } } return QWidget::eventFilter(obj, event); }
QT学习笔记6 应用程序快捷键
- 头文件
private: QAction *mExit; private slots: void on_exit();
- 源文件
mExit->setShortcut(QKeySequence("Ctrl+Q")); this->addAction(mExit); connect(mExit, SIGNAL(triggered()), this, SLOT(on_exit())); void Widget::on_exit() { this->close(); }
QT学习笔记7 全局快捷键
本功能的实现主要使用第三方库
qxtglobalshortcut5
实现
- 将
qxtglobalshortcut5
文件夹放到项目目录 - 在项目
.pro
文件中添加include(qxtglobalshortcut5/qxt.pri)
- 头文件
#include <QDebug> #include "qxtglobalshortcut.h"
- 源文件
QxtGlobalShortcut *shortcut = new QxtGlobalShortcut(this); // 新建全局快捷键 shortcut->setShortcut(QKeySequence("Shift+1")); // 设置全局快捷键 connect(shortcut, &QxtGlobalShortcut::activated, [=]() {qDebug() << "shortcut activated";}); // 连接槽函数
QT学习笔记8 应用程序设置圆角并修改背景颜色
通过重写
paintEvent
函数修改应用程序形状和背景
- 头文件
#include <QPainter> protected: void paintEvent(QPaintEvent *event);
- 源文件
void Widget::paintEvent(QPaintEvent *event) { Q_UNUSED(event); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); // 设置抗锯齿,不然边框会有明显锯齿 painter.setBrush(QBrush(QColor(80, 80, 80, 234))); // 设置窗体颜色, 参数分别为r, g, b , alpha,范围都是0~255 QRect rect = this->rect(); painter.drawRoundedRect(rect,20,20); // 设置圆角大小 }
QT学习笔记9 拖动窗体空白处移动窗体
通过重写
eventFilter
函数实现拖动窗体空白处移动窗体
- 头文件
#include <QMouseEvent> protected: bool eventFilter(QObject *obj, QEvent * event);
- 源文件
bool Widget::eventFilter(QObject *obj, QEvent *event) { static bool isMousePressed = false; //鼠标是否按下 static QPoint mousePos; //鼠标按下位置在窗体中的坐标 QMouseEvent *ev = static_cast<QMouseEvent *>(event); if (ev->type()==QEvent::MouseButtonPress) { // 鼠标按下 if (ev->button()==Qt::LeftButton) { // 鼠标左键按下 isMousePressed = true; mousePos = ev->globalPos() - pos(); //鼠标全局坐标-窗体左上顶点坐标 } } else if (ev->type() == QEvent::MouseButtonRelease) { // 鼠标释放 isMousePressed = false; } else if (ev->type() == QEvent::MouseMove) { // 鼠标移动 if (isMousePressed && (ev->buttons() & Qt::LeftButton)) { this->move(ev->globalPos() - mousePos); // 移动窗体 } } }
QT学习笔记10 窗口失去焦点时隐藏窗口
通过重写
changeEvent
函数实现检测激活窗口
- 头文件
protected: void changeEvent(QEvent *event);
- 源文件
void Widget::changeEvent(QEvent *event) { if (QEvent::ActivationChange == event->type()) { if((QApplication::activeWindow() != this) and (QApplication::activeWindow() != (&dialog))) { this->hide(); } } }