qt--创建可隐藏的按钮
来源:互联网 发布:mac上炒股软件 编辑:程序博客网 时间:2024/05/21 17:16
本文的目的是创建一个widget,widget显示一张莱纳图,此外widget还有一个按钮。这个按钮平时隐藏,仅当光标悬停在其上超过1秒时,才会显示。当光标拿开,按钮又隐藏。
思路是1)用QImage载入莱纳图,重写虚函数paintEvent把莱娜图显示在widget上面。
2)用setVisibility来控制按钮的显示/隐藏。
3)启动定时器m_timer,每隔0.1秒触发一次OnTimeOut槽函数。每触发一次,程序就会检查光标是否处于按钮占据的空间内。假如是,成员m_iTick就增加一。假如m_iTick == 10,即光标累积停留在按钮区域内超过一秒,按钮就会浮现出来。假如光标离开了按钮区,按钮被隐藏,且m_iTick = 0.
下面是代码:
#ifndef MAINWINDOW_H#define MAINWINDOW_H#include <QMainWindow>#include <QImage>#include <QPushButton>#include <QPaintEvent>#include <QTimer>#include <QPainter>class MainWindow : public QMainWindow{ Q_OBJECTpublic: MainWindow(QWidget *parent = 0); ~MainWindow(); QImage m_imgBKG; QPushButton * m_pBtn; QTimer m_timer; int m_iTick; QPoint m_pntPrev; QPoint m_pntCurrent;public slots: void OnTimeOut(void);protected: void paintEvent(QPaintEvent *); void resizeEvent(QResizeEvent *);};#endif // MAINWINDOW_H
#include "mainwindow.h"#include <QDebug>#include <QCursor>#include <QMessageBox>#include <QTextStream>MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){ m_pntPrev = QPoint(-100,-100); m_iTick = 0; setGeometry(500, 100, 500, 300); m_pBtn = new QPushButton("yello",this); m_pBtn->setGeometry(100, 100, 50, 50); m_pBtn->setVisible(false); bool b = m_imgBKG.load("E:\\lena.jpg"); qDebug()<<(int)b; m_timer.setInterval(100); QObject::connect(&m_timer, SIGNAL(timeout()), this, SLOT(OnTimeOut())); m_timer.start();}MainWindow::~MainWindow(){ m_timer.stop(); delete m_pBtn;}void MainWindow::paintEvent(QPaintEvent *e){ QPainter qp; qp.begin(this); qp.setBrush(QBrush(m_imgBKG)); qp.drawRect(rect()); //qp.drawImage(e->rect(), m_imgBKG); qp.end();}void MainWindow::OnTimeOut(void){ m_pntCurrent = QCursor::pos(); m_pntCurrent = mapFromGlobal(m_pntCurrent); if(!m_pBtn->isVisible()) { if(m_pBtn->geometry().contains(m_pntCurrent)) { m_iTick++; if(10 == m_iTick) { m_pBtn->setVisible(true); } } else { m_iTick = 0; } } else { if(!m_pBtn->geometry().contains(m_pntCurrent)) { m_pBtn->setVisible(false); m_iTick = 0; } }}void MainWindow::resizeEvent(QResizeEvent *e){ m_imgBKG = m_imgBKG.scaled(width(), height());}
鼠标离开按钮区:
0 0
- qt--创建可隐藏的按钮
- Qt异形按钮的创建
- qt 可开关的toggle按钮
- VC创建可隐藏文件夹的方法
- 通过RevitAPI创建可下拉的按钮
- QT按钮显示和隐藏
- 2.5创建可重用的按钮的组
- C#创建可拖动按钮
- 使用WindowManager创建可拖动的悬浮按钮
- Qt 隐藏标题栏可移动升级版
- QT隐藏最大化和最小化按钮
- 提升方式创建自己的QT控件(弹出式菜单按钮)
- Qt---实现一组可拖动按钮
- 仿ios touch按钮创建可随意拖动的悬浮按钮
- Qt按钮的美化
- android 虚拟导航按钮(NavigationBar)可手动隐藏开发
- Jiathis按钮隐藏的功能
- 按钮的显示与隐藏
- 聊聊Java数据库开发的那点事儿
- 笔记(活动(activity)之间的通信)
- 树莓派&qt5交叉编译
- 【罗兰のJava学习笔记】第七天,预定义类
- 经典程序(二)
- qt--创建可隐藏的按钮
- hdu2196(求每一点在树上最远距离)
- python 入门学习之 python 特点分析
- C#实现自动完成功能(人生第一次造轮子)
- qmake: could not exec ‘/usr/lib/x86_64-linux-gnu/qt4/bin/qmake’: No such file or directory
- 微信 js接口 的调用
- 大数相加问题
- 求微软公司(MSFT)2015年每个月度股票收盘价的平均值。
- Java抽象类