精华内容
下载资源
问答
  • Qt 之 截图功能进阶(四)截图时显示当前截图信息

    千次阅读 热门讨论 2017-01-22 22:05:30
    一、简述 Qt 之 简单截图功能(三)实现可拖拽选中区域 中 实现了截图基本功能,今天讲述选取截图区域时,实时显示当前的截图信息,具体仿照了QQ截图功能。先看一下效果图:放大图窗口要超出下方屏幕...

    一、简述

    Qt 之 简单截图功能(三)实现可拖拽选中区域 中 实现了截图的基本功能,今天讲述的是在选取截图区域时,实时显示当前的截图信息,具体仿照了QQ的截图功能。

    先看一下效果图:

    这里写图片描述


    在放大图窗口要超出下方屏幕时更改显示位置。

    这里写图片描述

    二、代码之路

    这里主要是在paintEvent事件中绘制截图信息 , 关于截图功能的代码可以查看 Qt 之 简单截图功能(三)实现可拖拽选中区域

    仿照QQ截图功能,在截图时 实时捕获当前截取区域的大小,同时显示鼠标位置区域的放大图,这里为什么QQ要放大鼠标拖动点区域,也是因为能够更精确地截取到我们实际想要的部分。

    在放大图片下方显示了窗口大小信息,而左上角也显示截取区域大小,这个感觉上可能有点多余。实际则不是,因为我们在截图时一般留意的是截图区域的右下方,也就是鼠标当前的位置,所以这里显示了当前截取的大小,更利于我们查看。我们也可以在放大图下方看到当前鼠标位置图片的RGB值。这一个小功能非常好,我们在日常要取某个颜色时,就能直接利用此功能。

    比如我之前模仿QQ登录界面,一些背景色的RGB取值都是利用QQ的截图功能获取到,所以功能虽小,但确是十分好用。

    // 矩形选中区边框宽度;
    #define SELECT_RECT_BORDER_WIDTH                1
    
    // 选中矩形8个拖拽点小矩形的宽高;
    #define STRETCH_RECT_WIDTH                      6
    #define STRETCH_RECT_HEIGHT                     6
    
    // 选中矩形信息矩形的宽高;
    #define SELECT_RECT_INFO_WIDTH                  75
    #define SELECT_RECT_INFO_HEIGHT                 20
    
    // 选区矩形的右下顶点放大图的宽高;
    #define END_POINT_RECT_WIDTH                    122
    #define END_POINT_RECT_HEIGHT                   122
    #define END_POINT_IMAGE_HEIGHT                  90
    // 绘制选中矩形信息;
    
    void CaptureScreen::drawSelectRectInfo()
    {
        int posX, posY;
        QPoint topLeftPoint = m_currentSelectRect.topLeft();
    
        posX = topLeftPoint.x() + SELECT_RECT_BORDER_WIDTH;
        if (topLeftPoint.y() > SELECT_RECT_INFO_HEIGHT)
        {
            posY = topLeftPoint.y() - SELECT_RECT_INFO_HEIGHT - SELECT_RECT_BORDER_WIDTH;
        }
        else
        {
            posY = topLeftPoint.y() + SELECT_RECT_BORDER_WIDTH;
        }
        topLeftPoint = QPoint(posX, posY);
    
        QColor backColor = QColor(0, 0, 0, 160);
        m_painter.fillRect(QRect(topLeftPoint, QSize(SELECT_RECT_INFO_WIDTH, SELECT_RECT_INFO_HEIGHT)), backColor);
    
        // 当前选中矩形的宽高信息;
        QString selectRectSizeInfo = QString("%1 * %2").arg(m_currentSelectRect.width()).arg(m_currentSelectRect.height());
        int fontWidth = this->fontMetrics().width(selectRectSizeInfo);
        m_painter.setPen(QPen(Qt::white));  
        m_painter.drawText(QPoint(topLeftPoint.x() + (SELECT_RECT_INFO_WIDTH - fontWidth) / 2, topLeftPoint.y() + 14), selectRectSizeInfo);
    }
    
    // 绘制鼠标拖拽时选区矩形的右下顶点的放大图;
    void CaptureScreen::drawEndPointImage()
    {
        int posX, posY;
        QPoint topLeftPoint = QCursor::pos();
    
        // 525 分别为鼠标所在点距离放大图的X轴、Y轴距离;
        //当放大图片区域超出右边屏幕时;
        if (topLeftPoint.x() + END_POINT_RECT_WIDTH + 5 > m_screenwidth)
        {
            // 这里暂时未考虑到双屏幕(多屏幕);
            if (topLeftPoint.x() > m_screenwidth)
            {
                posX = m_screenwidth - END_POINT_RECT_WIDTH - 5;
            }
            else
            {
                posX = topLeftPoint.x() - END_POINT_RECT_WIDTH - 5;
            }       
        }
        else
        {
            posX = topLeftPoint.x() + 5;
        }
    
        // 当放大图片区域超出屏幕下方时;
        if (topLeftPoint.y() + END_POINT_RECT_HEIGHT + 25 > m_screenheight)
        {
            posY = topLeftPoint.y() - END_POINT_RECT_HEIGHT - 25;
        }
        // 当鼠标未屏幕下方,正常显示时;
        else
        {
            posY = topLeftPoint.y() + 25;
        }
    
        topLeftPoint = QPoint(posX, posY);
    
        // 绘制放大图;
        QPixmap endPointImage = m_loadPixmap.copy(QRect(QCursor::pos().x() - 15, QCursor::pos().y() - 11, 30, 22)).scaled(END_POINT_RECT_WIDTH, END_POINT_IMAGE_HEIGHT);
        m_painter.drawPixmap(topLeftPoint, endPointImage);
    
        // 绘制十字坐标;
        m_painter.setPen(QPen(QColor(0, 180, 255 , 180), 4));
        // 竖线;
        m_painter.drawLine(QPoint(topLeftPoint.x() + END_POINT_RECT_WIDTH / 2, topLeftPoint.y() + 2), QPoint(topLeftPoint.x() + END_POINT_RECT_WIDTH / 2, topLeftPoint.y() + END_POINT_IMAGE_HEIGHT - 2));
        // 横线;
        m_painter.drawLine(QPoint(topLeftPoint.x() + 2 , topLeftPoint.y() + END_POINT_IMAGE_HEIGHT / 2), QPoint(topLeftPoint.x() + END_POINT_RECT_WIDTH - 2 , topLeftPoint.y() + END_POINT_IMAGE_HEIGHT / 2));
    
        m_painter.setPen(QPen(Qt::white, 3));
        m_painter.drawRect(QRect(QPoint(topLeftPoint.x() + 1 , topLeftPoint.y() + 1), QSize(END_POINT_RECT_WIDTH - 2, END_POINT_IMAGE_HEIGHT - 2)));
        m_painter.setPen(QPen(Qt::black, 1));
        m_painter.drawRect(QRect(topLeftPoint, QSize(END_POINT_RECT_WIDTH, END_POINT_IMAGE_HEIGHT)));
    
        // 绘制放大图信息;
        topLeftPoint = QPoint(topLeftPoint.x(), topLeftPoint.y() + END_POINT_IMAGE_HEIGHT);
        QColor backColor = QColor(0, 0, 0, 160);
        m_painter.fillRect(QRect(topLeftPoint, QSize(END_POINT_RECT_WIDTH, END_POINT_RECT_HEIGHT - END_POINT_IMAGE_HEIGHT)), backColor);
        // 当前选中矩形的宽高信息;
        QString selectRectSizeInfo = QString("%1 * %2").arg(m_currentSelectRect.width()).arg(m_currentSelectRect.height());
        QImage image = m_loadPixmap.toImage();
        QColor endPointColor = image.pixel(QCursor::pos());
        QString selectPointRGBInfo = QString("RGB:(%1,%2,%3)").arg(endPointColor.red()).arg(endPointColor.green()).arg(endPointColor.blue());
        m_painter.setPen(Qt::white);
        m_painter.drawText(QPoint(topLeftPoint.x() + 6, topLeftPoint.y() + 14), selectRectSizeInfo);
        m_painter.drawText(QPoint(topLeftPoint.x() + 6, topLeftPoint.y() + 27), selectPointRGBInfo);
    }

    以上通过两个方法完成了在截图时在屏幕上绘制截图信息,这两个功能虽小,但是在截图的使用过程中却起到了很大的作用。同时我们也不仅仅可以用来截图,比如上方我提到的在模仿QQ界面时,获取某一种颜色的RGB值,也可以获取某个窗口或者窗口控件、屏幕上图片、文字等具体大小。


    —— 更新于2017年1月23日

    展开全文
  • 该加载项工具栏中显示当前的天气和摄氏或华氏度,单击可能会看到有关您所在城市天气更多详细信息,您还可以查看未来24小时和48小时天气预报并调整显示首选项。 要求 Firefox 63.0或更高版本 产品特点 ...
  • 它可以告知用户关键的信息,要求用户去做决定,抑或是涉及到多个操作。弹窗越来越广泛地被应用于软件、网页、以及移动设备中,它可以不把用户从当前页面带走的情况下,指引用户去完成一个特定的操作。使用Axure...

    b170fcc1cbe798fd9e213ab771fee6af.png

    弹窗是一个为激起用户的回应而被设计、需要用户去与之交互的浮层。它可以告知用户关键的信息,要求用户去做决定,抑或是涉及到多个操作。

    弹窗越来越广泛地被应用于软件、网页、以及移动设备中,它可以在不把用户从当前页面带走的情况下,指引用户去完成一个特定的操作。在使用Axure制作原型的时候,涉及到弹窗的应该如何做呢?通过本文,大家一起来看看有什么方法可以制作弹窗。

    f3fefa623f8f0bdd37f0f6749d67e0a9.png

    比如网站的登录窗口,在点击登录按钮的时候会显示出来,提示用户进行登录。通过这个案例给大家介绍几种不同的制作方法。

    一、显示登录窗口组件

    1、最开始自然是要将原型的元素准备好(这里方便演示,我们直接使用截图的方式)。网站页面、登录窗口。

    b8d0b81aa8cd2845c287c1c000b66b94.png

    2、制作“登录”按钮。因为我们用的是图片,所以需要制作一个登录按钮。可以直接在“登录”上层使用热区部件或者其他部件,覆盖住“登录”所在的位置。并将这个部件命名为“登录”。

    f6891f37fb7c3c238f4946d49e2dd84b.png

    3、设置登录窗口初始状态。窗口最初是看不到的,所以我们使用将窗口的初始状态设置为隐藏。

    b056aa11ec23d193501b91160236dfae.png

    4、设置交互。注意看这个弹窗的特点,弹窗是高亮显示的。在这里可以有一种方法是,在网站页面和弹窗的中间放置一个矩形,调整它的透明度,设置为隐藏。在点击“登录”的时候,再将矩形以及登录窗口一起显示出来。

    9878c1f3931ec8fd639a30641e86d887.png

    这种方法大家有兴趣的话可以去试着做一下,这里给大家介绍的另外一种设置方法,不需要再使用矩形进行辅助。设置“登录”的鼠标单击事件,直接设置显示动作。在“显示”动作的更多选项设置中,选择“灯箱效果”,可直接达到我们要完成的效果。

    13425aac85e49790e4cb2b0c2298b949.png

    再设置颜色和透明度就可以了。这跟前面说的利用矩形做辅助,在效果上看是一样的,大家有兴趣可以都做做看,看看两种方法具体有什么不同,使用场景有什么区别。

    二、更改登录窗口的层级顺序

    前面的两个步骤与显示那种方法一样。从第三步开始有所区别。

    3、在网站页面和弹窗的中间放置一个矩形,调整它的透明度。将矩形和弹窗组合起来。

    d7daea797cd20754b35768b89af08292.png

    4、可以不将组合隐藏,而是将它的层级调整,置于底层即可。因为我们目的是看不到这个弹窗,将它隐藏,或者将它放置到其他部件下方遮挡住,都能达到我们的效果。

    c20670ecb11149330475f3d0805dc8e5.png

    5、设置“登录”的鼠标单击时事件,直接设置“置于顶层”动作。勾选刚才的组合即可。

    db7fa017bd69ee931e7f94d43acdda67.png

    三、使用弹出窗口

    1、这种方法与前面方法的不同在于弹窗是在另外一个页面中。

    14bcd6ba1a42e98b4c4b844087c99bff.png

    2、设置“登录”的鼠标单击时事件,直接设置“弹出窗口”动作。勾选弹窗页面。

    c3da518dcc97cc0f8af3ff51d978000b.png

    3、预览结果。

    a630943392b6f76713dfbc950e66a49b.png

    这种方式的弹窗,在显示方式上面与前面的两种方式有比较大的区别。这种方式是一个浏览器的窗口页面。在关闭的时候,直接关闭浏览器窗口就可以了。

    四、使用内部框架

    1、这种方法一样是将弹窗做在另一个页面中。与前一种不同的是在主页面创建一个内部框架,将内部框架的样式根据需要进行一下调整,置于底层。

    63e826f9a39b5075de5cc4ef07e3b1d0.png

    2、设置“登录”的鼠标单击时事件,首先将内部框架置于顶层显示出来,然后在内部框架中打开弹窗页面即可。

    39ec453593e0bb83da03263c9207e93c.png

    3、看一下预览效果。

    0638908f6745239e129872f4ee589ecf.png

    这几种不同的方式,预览效果已经比较明显地体现出差别了。大家可以根据自己的需要,采用不同的方法。

    大家有什么其他制作弹窗的方法,也欢迎一起来交流。

    展开全文
  • 如果这个超链接所打开页面是在当前窗口打开,则显示是正常。  解决方法:  开始->运行->regsvr32 actxprxy.dll->确定,弹出信息对话框:“DllRegisterServer in actxprxy.dll ...

    具体表现:

    用鼠标左键点击超链接,如果这个超链接是打开新窗口,则没有任何反应或者闪一下自动关闭;如果这个超链接所打开的页面是在当前窗口打开,则显示是正常。 


    解决方法: 

    开始->运行->regsvr32 actxprxy.dll->确定,弹出信息对话框:“DllRegisterServer in actxprxy.dll succeeded”,点击“确定”。按照以上方法依次输入: 

     

    regsvr32 shdocvw.dll 

    regsvr32 mshtml.dll 

    regsvr32 urlmon.dll 

    regsvr32 msjava.dll 

    regsvr32 shdocvw.dll 

    regsvr32 browseui.dll

    regsvr32 actxprxy.dll 

    regsvr32 oleaut32.dll 

    regsvr32 shell32.dll 


    上面八个组件在注册第六个时很可能出现错误提示:找不到指定模块“msjava.dll”,需要下载该.dll文件(下载地址:http://www.dll-files.com/dllindex/dll-files.shtml?msjava),解压后放到windows\system32文件夹,然后运行这个命令。

    重启电脑。

     

    展开全文
  • 今天就写我自己心学习到的知识 1:隐藏标题栏,用代码方式实现 setContentView()之前执行... 这个东西就是相当于一个小窗口显示信息Toast.makeText(当前类.this,"显示的信息",Toast.LENGTH.SHORT).sh
     今天就写我自己心学习到的知识
    1:隐藏标题栏,用代码方式实现
        在setContentView()之前执行requestWindowFeature(Window.FEATURE_NO_TITLE);
    2:在Activity中Toast的用法
        这个东西就是相当于一个小窗口,显示信息Toast.makeText(当前类.this,"显示的信息",Toast.LENGTH.SHORT).show();
    3:显示Intent和隐式Intent
        显示Intent:Intent intent=new Intent(当前类.this,目标类.class);
                      startActivity(intent);
        隐式Intent之一:调动浏览器
                    Intent intent=new Intent(Intent.Action_View);
                    intent.setData(Uri.parse("http://www.baidu.com"));
                    startActivity(intent);
        隐式Intent之二:拨打电话
                    Intent intent=new Intent(Intent.Action_DIAL);
                    intent,setData(Uri.parse("tel:10086"));
                    startActivity(intent);
        隐式Intent之三:启动另外一个Activity
                    在Mainifest.xml文件中配置另外一个Activity             
    <activity android:name="Intent_Demo1_Result">
           <intent-filter>
               <action android:name="com.great.activity_intent.Intent_Demo1_Result3" />
              <category android:name="android.intent.category.DEFAULT" />
           </intent-filter>
       </activity>
                在Activity中得写
             Intent intent = new Intent();
             //设置 Intent 的动作
             intent.setAction("com.great.activity_intent.Intent_Demo1_Result3");
             startActivity(intent);
    
    展开全文
  • 我们使用printf函数或者qDebug()函数 输出调试信息,直接显示在下方输出信息窗口,如图: 这最简单方式,不过本人觉得,调试信息在下方不方便查看或者调试。 2、第二种 使用console控制台显示信息,不过需要...
  • JavaScript打开窗口函数(Window.Open...一个多框架的窗口对象location属性显示的是父窗口的URL,每个框架也有一个与之相伴的location对象。 hash属性:hash标注是一个url很好的习惯用法,它指定浏览器到一个位于文
  • CAD的图形窗口的左小角通常会显示一个坐标标记,用于显示坐标轴的方向和状态,如下图所示。这个标记被称为UCS图标(UCSICON),它可以告诉我们很多信息,比如当前坐标系的方向,当前坐标系是否是世界坐标系WCS等等。...
  • JavaScript打开窗口函数(Window....一个多框架的窗口对象location属性显示的是父窗口的URL,每个框架也有一个与之相伴的location对象。 hash属性:hash标注是一个url很好的习惯用法,它指定浏览器到一个位于...
  • JavaScript打开窗口函数(Window.Open)使用详解 ...一个多框架的窗口对象location属性显示的是父窗口的URL,每个框架也有一个与之相伴的location对象。 hash属性:hash标注是一个url很好的习惯用法,它指
  • I来打开当前窗口的dev tool</li><li>当使用了前面提到的hack本地代码或者export shell 变量的方法来设置<code>DEBUG=1时,poi会启动时自动打开本体及所有新窗口插件的dev tool(由于electron(or ...
  • JavaScript打开窗口函数(Window.Open)使用详解 ...一个多框架的窗口对象location属性显示的是父窗口的URL,每个框架也有一个与之相伴的location对象。 hash属性:hash标注是一个url很好的习惯用法,它指
  • 应用程序中,有时当用户对某个Button按钮进行点击时,会弹出一个窗口悬浮在当前界面上,里面有一些可以操作的选项,以此来完成与用户的信息交流,此窗口可以通过PopupWindow来完成,使用情况如下 1、定义一个用于...
  • 关于我-源码

    2021-02-11 14:55:26
    该站点目的是使用不同大小视口时显示响应使用。 我通过将折叠功能应用于 并使用“容器流体”自举功能或CSS中设置媒体查询以限制或更改容器大小。 用法 为了开始,将URL输入浏览器。 要查看实际响应...
  • 一个多框架的窗口对象location属性显示的是父窗口的URL,每个框架也有一个与之相伴的location对象。 hash属性:hash标注是一个url很好的习惯用法,它指定浏览器到一个位于文档中的anchor位置,相当于一个书签儿...
  • 关于Linux

    2020-06-16 08:25:30
    1.Linux简介 Linux是一个开源、免费操作系统,它...ls 查看当前路径下目录信息 tree 以树状方式显示目录 pwd 查看当前目录路径 clear 清楚终端内容(快捷键Ctrl + L) ctrl+shift+“+”放大窗口字体 ctrl +“-”缩
  • // 去除主窗口的标题 LONG style=::GetWindowLong(m_hWnd,GWL_STYLE); style&=~WS_CAPTION; ::SetWindowLong(m_hWnd,GWL_STYLE,style); //得到当前系统的分辨率 int screenx=GetSystemMetrics(SM_...
  • 获取到系统目录后,是通过窗口的标题栏显示目录路径信息演示截图上请看窗口的标题栏,显示有程序当前所在的路径。关于GetCurrentDirectory用法,请参见以下两行代码:  GetCurrentDirectory(255,dir);//获得...
  • 下面两个图表显示当前以及过去数分钟内所使用 RAM 或物理内存数量(以兆字节 (MB) 为单位)。“任务管理器”窗口底部列出了正在使用内存百分比。如果内存使用似乎一直保持较高状态或者明显降低了计算机...
  • 1.P:安装完sencha 后,打开doc窗口 输入sencha 没有相关sencha版本信息的显示 (安装成功,doc进入senchacmd安装目录,执行sencha命令可以,但是其他路径下不行) S:环境变量配置出现问题,win10系统下当前用户变量及系统...
  • <input type="radio" name="score8" value="2"/>B.location对象相当于IE浏览器中的地址栏,包含关于当前URL地址的信息 <input type="radio" name="score8" value="3"/>C.location对象是history对象的父对象 ...
  • 桌面—右键—NVIDIA控制面板--“帮助”--“系统信息”,弹出窗口选择“组件” 2、安装CUDA。去NVIDIA下载对应版本开发工具包,网址https://developer.nvidia.com/cuda-downloads,显示为最高版本CUDA,去...
  • 1、启动:从菜单启动:应用程序——>附件——>文本编辑器从命令行执行以下命令: gedit2、窗口说明:菜单栏:包含您 gedit 中...状态栏:显示关于当前 gedit 活动的信息和关于菜单项的上下文信息。3、小技...

空空如也

空空如也

1 2 3 4 5 ... 10
收藏数 196
精华内容 78
关键字:

关于当前窗口的信息显示在