zoukankan      html  css  js  c++  java
  • qt小技巧

    QT CREATER中

    Ctrl+Shift+<         折叠代码块
    Ctrl+Shift+>         展开代码块

    但是只能对单个函数操作

    先按Ctrl + e后松开再按2添加上下布局的分栏

    先按Ctrl + e后松开再按3添加左右布局的分栏

    先按Ctrl + e后松开再按1删除所有的分栏

    将光标移动到需要更改的变量上,按Ctrl + Shift + R,当前变量名称外框为红色时,表示已经已激活全局修改功能,当修改此处变量名称时将一同修改代码中所有使用该变量的变量名。

    Qt中对于一些比较耗时的工作,如下载数据的同步操作,可能会使主线程处于等待状态,导致界面假死,针对此种情况,我们可以使用一个定时器和人工进行事件循环代码如下:

    m_nTimerID = startTimer(500);

     while (!m_bFileDownloaded)      
     {         
      QCoreApplication::processEvents(QEventLoop::ExcludeUserInputEvents);
     }    

    使用Timer进行一个超时处理,如果超过0.5S则算作超时退出

    托盘功能

    1 添加两个成员变量

    QSystemTrayIcon *trayicon;

    QMenu *trayiconMenu;

    2 添加一个槽函数用于响应在托盘图标及托盘菜单上的鼠标点击操作

    void onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason reason);

    3 在构造函数中对添加的两个变量进行初始化

     trayicon = new QSystemTrayIcon(this);

      //创建QIcon对象,参数是图标资源,值为项目的资源文件中图标的地址

      QIcon icon("F:/Windows QT/TrayIcon/bottom.png");

      trayiconMenu = new QMenu(this);

      //为托盘菜单添加菜单项

      trayiconMenu->addAction(ui->action_quit);

      //为托盘菜单添加分隔符

      trayiconMenu->addSeparator();

      

      //将创建的QIcon对象作为系统托盘图标

      trayicon->setIcon(icon);

      //显示托盘图标

      trayicon->show();

      //设置系统托盘提示

      trayicon->setToolTip(tr("托盘测试"));

      //将创建菜单作为系统托盘菜单   

      trayicon->setContextMenu(trayiconMenu);

      

      //在系统托盘显示气泡消息提示

      trayicon->showMessage(tr("hahaya"), tr("托盘测试"), QSystemTrayIcon::Information, 5000);

      //为系统托盘绑定单击信号的槽 即图标激活时

      connect(trayicon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason)));

    4 实现槽函数onSystemTrayIconClicked

    void MainWindow::onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason reason)

    {

      switch(reason)

      {

      //单击

      case QSystemTrayIcon::Trigger:

      //双击

      case QSystemTrayIcon::DoubleClick:

          //恢复窗口显示

          this->setWindowState(Qt::WindowActive);

          this->show();

          break;

      default:

          break;

      }

    }

    5  当点击窗口的关闭按钮时,将程序托盘,则重写类的closeEvent函数

    void MainWindow::closeEvent(QCloseEvent *event)

    {

      if(trayicon->isVisible())

      {

          hide();

          event->ignore();

      }

    }

    6 点击“退出”菜单的槽函数,点击退出时托盘

    void MainWindow::on_action_quit_triggered()

    {

      this->hide();

      this->close();

    }

    //mainwindow.h  
    #ifndef MAINWINDOW_H  
    #define MAINWINDOW_H  
    #include <QMainWindow>  
    #include <QSystemTrayIcon>  
    #include <QMenu>  
    #include <QCloseEvent>  
    namespace Ui {  
      class MainWindow;  
    }  
    class MainWindow : public QMainWindow  
    {  
      Q_OBJECT  
    public:  
      explicit MainWindow(QWidget *parent = 0);  
      ~MainWindow();  
    private:  
      
      Ui::MainWindow *ui;  
    private slots:  
      void on_action_quit_triggered();  
      void onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason reason);  
    protected:  
      void closeEvent(QCloseEvent *event);  
    private:  
      QSystemTrayIcon *trayicon;  
      QMenu *trayiconMenu;  
    };  
    #endif // MAINWINDOW_H  
    //mainwindow.cpp  
    #include <QtGui>  
    #include "mainwindow.h"  
    #include "ui_mainwindow.h"  
    MainWindow::MainWindow(QWidget *parent) :  
      QMainWindow(parent),  
      ui(new Ui::MainWindow)  
    {  
      ui->setupUi(this);  
      trayicon = new QSystemTrayIcon(this);  
      //创建QIcon对象,参数是图标资源,值为项目的资源文件中图标的地址  
      QIcon icon("F:/Windows QT/TrayIcon/bottom.png");  
      trayiconMenu = new QMenu(this);  
      //为托盘菜单添加菜单项  
      trayiconMenu->addAction(ui->action_quit);  
      //为托盘菜单添加分隔符  
      trayiconMenu->addSeparator();  
      //将创建的QIcon对象作为系统托盘图标  
      trayicon->setIcon(icon);  
      //显示托盘图标  
      trayicon->show();  
      //设置系统托盘提示  
      trayicon->setToolTip(tr("托盘测试"));  
      //将创建菜单作为系统托盘菜单  
      trayicon->setContextMenu(trayiconMenu);  
      //在系统托盘显示气泡消息提示  
      trayicon->showMessage(tr("hahaya"), tr("托盘测试"), QSystemTrayIcon::Information, 5000);  
      //为系统托盘绑定单击信号的槽 即图标激活时  
      connect(trayicon, SIGNAL(activated(QSystemTrayIcon::ActivationReason)), this, SLOT(onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason)));  
    }  
    MainWindow::~MainWindow()  
    {  
      delete ui;  
    }  
    void MainWindow::onSystemTrayIconClicked(QSystemTrayIcon::ActivationReason reason)  
    {  
      switch(reason)  
      {  
      //单击  
      case QSystemTrayIcon::Trigger:  
      //双击  
      case QSystemTrayIcon::DoubleClick:  
          //恢复窗口显示  
          this->setWindowState(Qt::WindowActive);  
          this->show();  
          break;  
      default:  
          break;  
      }  
    }  
    void MainWindow::closeEvent(QCloseEvent *event)  
    {  
      if(trayicon->isVisible())  
      {  
          hide();  
          event->ignore();  
      }  
    }  
    void MainWindow::on_action_quit_triggered()  
    {  
      this->hide();  
      this->close();  
    }  
    //main.cpp  
    #include <QtGui/QApplication>  
    #include <QTextCodec>  
    #include "mainwindow.h"  
    int main(int argc, char *argv[])  
    {  
      QTextCodec::setCodecForTr(QTextCodec::codecForLocale());  
      QApplication a(argc, argv);  
      MainWindow w;  
      w.show();  
      return a.exec();  
    }  
  • 相关阅读:
    Python re 模块中,如何使用反斜杠 ""分割字符串?
    VisualVM使用:Local Applications Cannot Be Detected
    九、Delphi10.3通过Json.Serializers实现反序列号,将JSON转换成数组
    vue项目 通过配置webpack插件DllPlugin进行打包速度优化,以及本地运行编译速度优化
    企业微信小程序 导购快捷联系用户 wx.qy.openUserProfile 的使用示例
    微信 支付即服务 服务人员注册 和 AEAD_AES_256_GCM 的使用 (sodium_crypto_aead_aes256gcm_decrypt 或者 sodium_crypto_aead_aes256gcm_is_available() )无法使用 的解决方案
    git仓库服务搭建
    配置中心 ------- Nacos
    Feign的介绍和使用
    Ribbon + Nacos 自定义负载均衡算法
  • 原文地址:https://www.cnblogs.com/dmyu/p/5776320.html
Copyright © 2011-2022 走看看