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();  
}  

 

posted on 2016-08-16 14:40  Satchmo丶  阅读(484)  评论(0编辑  收藏  举报