QT学习笔记

QT学习笔记1 程序打包

  1. 打开Qt 5.14.2(MinGW 7.3.0 32-bit)Qt5.14.2(MinGW 7.3.0 32-bit)

  2. 进入程序文件夹, 然后输入

    E: // 进入程序存放的盘
    cd E:\QtProjects\build-FastOpenTest-Desktop_Qt_5_14_2_MinGW_32_bit-Debug\release // 进入程序exe文件存放的文件夹
    windeployqt FastOpenTest.exe // 生成程序所需依赖

    生成程序所需依赖

QT学习笔记2 设置程序开机启动

  1. Win+R然后输入 regedit打开注册表打开注册表

  2. 打开HKEY_CURRENT_USER\\Software\\Microsoft\\Windows\\CurrentVersion\\Run打开RUN

  3. 右键RUN, 然后新建,选择字符串值, 修改名称为QuicklyOpenApps新建字符串

  4. 双击QuicklyOpenApps, 在数值数据中添加应用程序路径,然后点击确定, 关闭注册表添加程序路径

  5. 打开任务管理器, 点击启动, 查看是否添加成功在任务管理器进行管理

  6. 可在任务管理器修改该程序的开机启动状态, 启用禁用开机启动


QT学习笔记3 系统托盘

  1. 头文件
    #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();
    
  2. 源文件
    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程序

  1. 头文件
    #include <QProcess>
    
  2. 源文件
    QString path = "***.exe"; // 程序路径
    QProcess::startDetached(path, QStringList()); // 通过cmd命令调用程序
    

QT学习笔记5 图片显示并添加点击事件

主要原理是利用QLabelsetPixmap将图片在QLabel中显示,并通过重写eventFilter函数为QLabel控件添加点击事件

  1. 头文件
    #include <QImage>
    #include <QMouseEvent>
    
    private:
        QImage addImage; // 新建图片对象
    
    protected:
        bool eventFilter(QObject *obj, QEvent * event); // 重写eventFilter函数,为QLabel添加点击事件
    
  2. 源文件
    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 应用程序快捷键

  1. 头文件
    private:
        QAction *mExit;
        
    private slots:
        void on_exit();
    
  2. 源文件
    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实现

  1. qxtglobalshortcut5文件夹放到项目目录
  2. 在项目.pro文件中添加
    include(qxtglobalshortcut5/qxt.pri)
    
  3. 头文件
    #include <QDebug>
    #include "qxtglobalshortcut.h"
    
  4. 源文件
    QxtGlobalShortcut *shortcut = new QxtGlobalShortcut(this); // 新建全局快捷键
    shortcut->setShortcut(QKeySequence("Shift+1")); // 设置全局快捷键
    connect(shortcut, &QxtGlobalShortcut::activated,
        [=]() {qDebug() << "shortcut activated";}); // 连接槽函数
    

QT学习笔记8 应用程序设置圆角并修改背景颜色

通过重写paintEvent函数修改应用程序形状和背景

  1. 头文件
    #include <QPainter>
    
    protected:
        void paintEvent(QPaintEvent *event);
    
  2. 源文件
    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函数实现拖动窗体空白处移动窗体

  1. 头文件
    #include <QMouseEvent>
    
    protected:
         bool eventFilter(QObject *obj, QEvent * event);
    
  2. 源文件
    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函数实现检测激活窗口

  1. 头文件
    protected:
        void changeEvent(QEvent *event);
    
  2. 源文件
    void Widget::changeEvent(QEvent *event)
    {
        if (QEvent::ActivationChange == event->type()) {
            if((QApplication::activeWindow() != this) and (QApplication::activeWindow() != (&dialog))) {
                this->hide();
            }
        }
    }
    
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值