设为首页 加入收藏

TOP

用QT实现类似QQ截图的工具(一)
2014-11-24 07:54:04 来源: 作者: 【 】 浏览:0
Tags:实现 类似 截图 工具

widget.cpp


#include "widget.h"
#include "ui_widget.h"
#include


Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
createWidgets();
createConnects();
createEventFilter();
}


Widget::~Widget()
{
delete ui;


delete quit;
delete mini;
delete restore;
delete menu;
delete trayIcon;


delete fullScreenLabel;
delete shotScreenLabel;
}


bool Widget::eventFilter(QObject *o, QEvent *e)
{
if (o != fullScreenLabel)
{
return Widget::eventFilter(o, e);
}


QMouseEvent *mouseEvent = static_cast (e);


//true 鼠标左键按下且按键还未弹起
if ((mouseEvent->button() == Qt::LeftButton)
&& (mouseEvent->type() == QEvent::MouseButtonPress))
{
//鼠标左键标志位按下
leftMousePress = true;


//获取鼠标点
origin = mouseEvent->pos();


if (!rubberBand)
{
rubberBand = new QRubberBand(QRubberBand::Rectangle, fullScreenLabel);
}


rubberBand->setGeometry(QRect(origin,QSize()));
rubberBand->show();


return true;
}


//true 鼠标左键按下并拖动
if ((mouseEvent->type() == QEvent::MouseMove)
&& (leftMousePress))
{
if (rubberBand)
{
rubberBand->setGeometry(QRect(origin, mouseEvent->pos()).normalized());
}


return true;
}


//鼠标左键松开
if ((mouseEvent->button() == Qt::LeftButton)
&& (mouseEvent->type() == QEvent::MouseButtonRelease))
{
//鼠标标志位弹起
leftMousePress = false;


if (rubberBand)
{
//获取橡皮筋框的终止坐标
termination = mouseEvent->pos();
QRect rect = QRect(origin, termination);


//根据橡皮筋框截取全屏上的信息,并将其放入shotScreenLabel
shotScreenLabel->setPixmap(fullScreenPixmap.grabWidget(fullScreenLabel,
rect.x(),
rect.y(),
rect.width(),
rect.height()));


//将shotScreenLabel的用户区大小固定为所截图片大小
shotScreenLabel->setFixedSize(rect.width(), rect.height());
shotScreenLabel->show();


rubberBand->hide();
fullScreenLabel->hide();
}


return true;
}


return false;
}


/**
descr:实例化控件
*/
void Widget::createWidgets()
{
//两个QLabel的父控件不能为this,否则截图信息会现在是主窗口中,无法正确显示
fullScreenLabel = new QLabel();
shotScreenLabel = new QLabel();


rubberBand = new QRubberBand(QRubberBand::Rectangle, fullScreenLabel);


leftMousePress = false;


//初始化托盘控件并组装**************************************************************


trayIcon = new QSystemTrayIcon(QIcon(tr(":/images/heart.svg")), this);
menu = new QMenu(this);
restore = new QAction(tr("Restore"), this);
mini = new QAction(tr("Mini"), this);
quit = new QAction(tr("Quit"), this);


menu->addAction(restore);
menu->addAction(mini);
menu->addAction(quit);
trayIcon->setContextMenu(menu);


//将托盘显示
trayIcon->show();


//初始化托盘控件并组装**************************************************************


savePixmap = new QAction(tr("save"), shotScreenLabel);


s

首页 上一页 1 2 下一页 尾页 1/2/2
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Linux下printf输出字符串的颜色 下一篇一个让桌面下雪的ruby 小程序 snow

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·在 Redis 中如何查看 (2025-12-26 03:19:03)
·Redis在实际应用中, (2025-12-26 03:19:01)
·Redis配置中`require (2025-12-26 03:18:58)
·Asus Armoury Crate (2025-12-26 02:52:33)
·WindowsFX (LinuxFX) (2025-12-26 02:52:30)