用qt实现类似qq截图的工具代码.doc
文本预览下载声明
[文件] ShotPixmarar ~ 6KB 下载(385)
[代码] widget.cpp
#include widget.h
#include ui_widget.h
#include QtGui
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_castQMouseEvent* (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();
shotScreen
显示全部