• 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();  
    }  
  • 相关阅读:
    C# 判断中文字符的8种方法
    C# GridView页脚汇总
    .NET开发人员十大必备下载工具
    参数修饰符ref,out ,params的区别
    C#一行代码登陆QQ居然碰到这么多麻烦(有意思)
    IIS5IIS6IIS7的ASP.net 请求处理过程比较
    以下放在作业里做调度,每天自动备份和自动删除三天前的备份
    ASP.NET行变色,及禁用编辑,删除按钮
    按钮点击连续触发
    Excel文件的读写实现
  • 原文地址:https://www.cnblogs.com/dmyu/p/5776320.html
Copyright © 2020-2023  润新知