截图软件05

QRubberBand Class

QRubberBand类提供了一个可以指示选择或边界的矩形或线条。

QSystemTrayIcon Class

QSystemTrayIcon类为系统托盘中的应用程序提供图标。
现代操作系统通常在桌面上提供一个特殊区域,称为系统托盘或通知区域,长时间运行的应用程序可以显示图标和短消息。
这个类可以设定一系列和系统托盘图标的样式以及事件。

    trayIcon->showMessage(tr("截图置顶 v1.2.0"),"程序已启动,按\"SHIFT+ALT+Z\"后拖动鼠标!");
    trayIcon->setToolTip(tr("按\"SHIFT+ALT+Z\"后拖动鼠标"));//鼠标移动到托盘图标上出现对应提示

qDebug(const char *message, …)

用调试消息消息调用消息处理程序。 如果没有安装消息处理程序,则会将消息打印到stderr。 在Windows下,消息被发送到控制台,如果它是一个控制台应用程序; 否则,它被发送到调试器。 在QNX上,消息被发送到slogger2。 如果在编译期间定义了QT_NO_DEBUG_OUTPUT,这个函数什么也不做。
如果将函数传递给一个格式字符串和一个参数列表,它的工作方式与C printf()函数类似。 格式应该是一个Latin-1字

qDebug()<<”屏幕数量为” << QApplication::desktop()->screenCount();

WINUSERAPI WINBOOL WINAPI RegisterHotKey(HWND hWnd,int id,UINT fsModifiers,UINT vk);

RegisterHotKey 热键的使用:http://blog.163.com/zhujiatc@126/blog/static/183463820130842616627/
http://blog.sina.com.cn/s/blog_648d306d0102weh0.html

if(RegisterHotKey((HWND(this->winId())), hotkeyShotBgId,MOD_SHIFT|MOD_ALT,'Z'))
    {
        qDebug("SHIFT+ALT+Z");
    }

如果设置系统热键成功 那么就返回非0值否则返回1
这里在控制台可以看到是否成功 成功就输出对应的字符串

为了得到唯一标识,我们还将用到另一个API函数  

ATOM   GlobalAddAtom(LPCTSTR   lpString); //自己设定的一个字符串

因为我们还要在程序退出的时候,消除这个热键,所以需要声明一个全局变量:  
int HotKeyId;
HotKeyId = GlobalAddAtom("MyHotKey") - 0xC000;
注:HotKeyId的合法取之范围是0x00000xBFFF之间,而GlobalAddAtom函数得到的值在0xC0000xFFFF之间,所以减掉0xC000来满足调用要求。

析构的时候 要取消注册的全局热键

MainWindow::~MainWindow()//取现注册的全局热键
{

    if(UnregisterHotKey(HWND(this->winId()), hotkeyShotBgId))
    {
        qDebug("SHIFT+ALT+Z IS UNREGISTED");
    }

    clearShots();
}

trayMenu->addSeparator();//添加分隔符这里写代码片

void MainWindow::quitApp(){
     trayIcon->hide();
     QApplication::quit();
}
[slot] void QObject::deleteLater()

安排这个对象的删除。
控件返回到事件循环时,该对象将被删除。 如果在调用此函数时事件循环没有运行(例如,在QCoreApplication :: exec()之前对对象调用deleteLater()),那么一旦事件循环启动,对象将被删除。 如果在主事件循环停止后调用deleteLater(),则该对象不会被删除。 由于Qt 4.8,如果在线程中没有运行事件循环的对象上调用deleteLater(),线程完成时该对象将被销毁。
请注意,进入和离开一个新的事件循环(例如,通过打开一个模式对话框)将不会执行延期删除; 对于要删除的对象,控件必须返回调用deleteLater()的事件循环。
注意:多次调用此函数是安全的。 当传递第一个延迟删除事件时,将从事件队列中删除该对象的任何未决事件。

mouseTracking : bool

该属性保持是否为该小部件启用鼠标跟踪。
如果禁用了鼠标跟踪(默认),则在移动鼠标时至少按下一个鼠标按钮时,控件只接收鼠标移动事件。
如果启用鼠标跟踪,即使没有按钮被按下,小部件也会收到鼠标移动事件。
Access functions:

bool hasMouseTracking() const
void setMouseTracking(bool enable)

WId QWidget::winId() const

返回窗口小部件的窗口系统标识符。
原则上是便携的,但是如果你使用它,你很可能要做一些不可移植的东西。 小心。
如果一个窗口小部件是非本地的(外来的)并且winId()被调用,那么这个窗口小部件将被提供一个本地句柄。
在macOS上,返回的类型取决于Qt链接的框架。 如果Qt使用碳,那么实际上是一个HIViewRef。 如果Qt使用Cocoa,{WId}是一个指向NSView的指针。
这个值在运行时可能会改变。 类型为QEvent :: WinIdChange的事件将在窗口系统标识符更改后发送到窗口小部件。
另请参阅find()。

[static] QDesktopWidget *QApplication::desktop()

返回桌面小部件(也称为根窗口)。
桌面可能由多个屏幕组成,所以这是不正确的,例如,试图将桌面几何体中的某个小部件居中。 QDesktopWidget具有各种功能,用于在桌面上获取有用的几何图形,如QDesktopWidget :: screenGeometry()和QDesktopWidget :: availableGeometry()

QDesktopWidget Class

QDesktopWidget类可以访问多头系统的屏幕信息。
具有多个图形卡和显示器的系统可以管理可用作多个桌面或大型虚拟桌面的物理屏幕空间。
此类提供有关用户桌面的信息,例如其总大小,屏幕数量,每个屏幕的几何图形以及是将它们配置为单独的桌面还是单个虚拟桌面。
Qt提供的小工具使用这个类来将工具提示,菜单和对话框放在正确的屏幕上,以显示其父应用程序或应用程序小部件。 应用程序可以使用这个类来获取可用于保存窗口位置的信息,或者将子窗口小部件和对话框放置在一个特定的屏幕上。

QApplication :: desktop()函数用于获取QDesktopWidget的一个实例。
小部件的screenGeometry()函数提供有关可用屏幕几何的信息。 可用屏幕的数量由screenCount返回,屏幕添加或删除时发出screenCountChanged()信号。 screenNumber()返回特定点或小部件所在的屏幕编号。

要获取特定屏幕的尺寸,请调用screenGeometry()函数。 在某些桌面环境中,并不是所有的屏幕都可供应用程序使用; 例如,应用程序停靠栏或菜单栏可能会占用一些空间。 使用availableGeometry()函数来获取应用程序的可用区域。
QDesktopWidget还继承QWidget属性,width()和height(),它们指定桌面的大小。 但是,对于具有多个屏幕的桌面,桌面的大小是所有屏幕大小的联合,因此不应使用width()和height()来计算放置在其中一个屏幕上的小部件的大小。
在配置为将可用屏幕用作单个大型虚拟桌面的系统上,virtualDesktop属性将设置为true。 在这种情况下,小部件的大小通常是所有屏幕的边界矩形的大小。

这个事件处理程序可以在子类中重新实现,以接收事件中传递的绘图事件。
绘画事件是重绘全部或部分小部件的请求。可能由于以下原因之一而发生:
repaint()或update()被调用,
小部件被遮盖了,现在已经被发现,或者
许多其他原因。
许多小部件可以在要求时重新绘制整个表面,但是一些缓慢的小部件需要通过仅绘制所请求的区域进行优化:QPaintEvent :: region()。这个速度优化不会改变结果,因为在事件处理过程中绘画被裁剪到该区域。例如,QListView和QTableView可以做到这一点。
Qt也试图通过将多个绘画事件合并为一个来加速绘画。当多次调用update()或窗口系统发送多个绘画事件时,Qt会将这些事件合并为一个具有较大区域的事件(请参阅QRegion :: united())。 repaint()函数不允许这种优化,所以我们建议尽可能使用update()。
当绘画事件发生时,更新区域通常被擦除,所以你正在绘制小部件的背景。
背景可以使用setBackgroundRole()和setPalette()来设置。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值