返回顶部
首页 > 资讯 > 精选 >QT中如何实现自定义quick-Popup弹出窗口
  • 451
分享到

QT中如何实现自定义quick-Popup弹出窗口

2023-06-20 13:06:44 451人浏览 独家记忆
摘要

小编给大家分享一下Qt中如何实现自定义quick-Popup弹出窗口,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.Popup介绍Popup是一个弹出窗口的控件

小编给大家分享一下Qt中如何实现自定义quick-Popup弹出窗口,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!

1.Popup介绍

Popup是一个弹出窗口的控件
它的常用属性如下所示:

  • anchors.centerIn : Object,用来设置居中在谁窗口中.

  • closePolicy : enumeration,设置弹出窗口的关闭策略,默认值为默认值为Popup.CloseOnEscape|Popup.CloseOnPressOutside,取值有:

    • Popup.NoAutoClose : 只有在手动调用close()后,弹出窗口才会关闭(比如加载进度时,不XIANG)。

    • Popup.CloseOnPressOutside : 当鼠标按在弹出窗口外时,弹出窗口将关闭。

    • Popup.CloseOnPressOutsideParent : 当鼠标按在其父项之外时,弹出窗口将关闭。

    • Popup.CloseOnReleaseOutside : 当鼠标在弹出窗口外部松开按下时,弹出窗口将关闭。

    • Popup.CloseOnReleaseOutsideParent : 当鼠标在其父项松开按下时,弹出窗口将关闭。

    • Popup.CloseOnEscape : 当弹出窗口具有活动焦点时,按下ESC键时,弹出窗口将关闭。

  • dim : bool,昏暗属性,默认为undefined,设置为false,则模态窗口弹出后的其它背景不会昏暗

  • modal : bool,模态,默认为false(非模态,非阻塞调用,指出现该对话框时,也可以与父窗口进行交互,此时dim是无效果的)

  • enter : Transition,进入弹出窗口时的动画过渡

  • exit : Transition,退出弹出窗口时的动画过渡

它的信号如下所示:

  • void aboutToHide(): 当弹出窗口即将隐藏时,会发出此信号。

  • void aboutToShow(): 当弹出窗口即将显示时,会发出此信号。

  • void closed(): 当弹出窗口关闭时发出此信号。

  • void opened(): 打开弹出窗口时发出此信号。

它的方法如下所示:

  • void close(): 关闭弹出窗口。

  • forceActiveFocus(reason = Qt.OtherFocusReason): 强制设置焦点

  • void open() : 打开弹出窗口。

然后我们来自定义实现一个带指标的popup弹出窗口.

2.自定义Popup

由于Popup的锚布局只有一个anchors.centerIn,假如们想让Popup位于某个控件的左上方时,必须得自定义一个.
实现截图如下所示(已上传群里):

QT中如何实现自定义quick-Popup弹出窗口

实现效果如下所示:

QT中如何实现自定义quick-Popup弹出窗口

首先我们需要实现horizontalPosBase和verticalPosBase两个属性.来实现Popup位于目标对象的哪个方位.

  • 一个是设置popup在目标对象的水平方向的位置

  • 一个是popup在目标对象的垂直方向的位置.

由于我们已经知道了方位,那么指标的坐标也就可以自动计算出来了.
具体实现代码如下所示:

// 指示器方向,根据horizontalPosBase和verticalPosBase 自动计算     enum IndicatorStyle {         IndicatorLeft,         IndicatorRight,         IndicatorTop,         IndicatorBottom     }     function updateIndicatorPos(indicatorStyle) {          switch (indicatorStyle)         {             case IndicatorPopup.IndicatorLeft:                 indicator.x = - indicator.width*0.4;                 indicator.y =  back.height <= myTarget.height ? (back.height)/2-indicatorLen :                                verticalPosBase === IndicatorPopup.TopAlign ? (myTarget.height)/2 -indicatorLen :                                verticalPosBase === IndicatorPopup.VerticalAlign ? (back.height)/2 -indicatorLen :                                back.height -  (myTarget.height)/2 -indicatorLen;                 break;             case IndicatorPopup.IndicatorRight:                 indicator.x = width - indicator.width*1.2;                 indicator.y =  back.height <= myTarget.height ? (back.height)/2-indicatorLen :                                verticalPosBase === IndicatorPopup.TopAlign ? (myTarget.height)/2 -indicatorLen :                                verticalPosBase === IndicatorPopup.VerticalAlign ? (back.height)/2 -indicatorLen :                                back.height -  (myTarget.height)/2 -indicatorLen;                 break;             case IndicatorPopup.IndicatorTop:                 indicator.x =  back.width <= myTarget.width ? (back.width)/2-indicatorLen :                                horizontalPosBase === IndicatorPopup.PosBaseToRight ? (myTarget.width)/2 -indicatorLen :                                horizontalPosBase === IndicatorPopup.PosBaseToHorizontal ? (back.width)/2 -indicatorLen :                                back.width -  (myTarget.width)/2 -indicatorLen;                 indicator.y =  - indicator.width*0.4;                 break;             case IndicatorPopup.IndicatorBottom:                 indicator.x =  back.width <= myTarget.width ? (back.width)/2-indicatorLen :                                horizontalPosBase === IndicatorPopup.PosBaseToRight ? (myTarget.width)/2 -indicatorLen :                                horizontalPosBase === IndicatorPopup.PosBaseToHorizontal ? (back.width)/2 -indicatorLen :                                back.width -  (myTarget.width)/2 -indicatorLen;                 indicator.y =  height - indicator.height*1.2;                 break;         }         console.log("indicator",indicator.x,indicator.y,indicator.width,indicator.height)     }     function updatePopupPos() {        var indicatorStyle;         switch (horizontalPosBase)        {            case IndicatorPopup.PosBaseToLeft:     // popup位于目标水平左侧                x = myTarget.x - width - targetSpacing;                y = verticalPosBase === IndicatorPopup.TopAlign ? myTarget.y :                    verticalPosBase === IndicatorPopup.VerticalAlign ? myTarget.y + myTarget.height/2 - height/2 :                    myTarget.y - height + myTarget.height                indicatorStyle = IndicatorPopup.IndicatorRight;                break;            case IndicatorPopup.PosBaseToHorizontal: // popup水平中间                x = myTarget.x + myTarget.width/2 - width/2;                y = verticalPosBase === IndicatorPopup.PosBaseToTop ? myTarget.y - height - targetSpacing :                    verticalPosBase === IndicatorPopup.PosBaseToBottom ? myTarget.y + myTarget.height + targetSpacing :                    myTarget.y + myTarget.height + targetSpacing                indicatorStyle = verticalPosBase === IndicatorPopup.PosBaseToTop ? IndicatorPopup.IndicatorBottom :                                                                                   IndicatorPopup.IndicatorTop;                break;            case IndicatorPopup.PosBaseToRight:   // popup位于目标水平右侧                x = myTarget.x + myTarget.width + targetSpacing;                y = verticalPosBase === IndicatorPopup.TopAlign ? myTarget.y :                    verticalPosBase === IndicatorPopup.VerticalAlign ? myTarget.y + myTarget.height/2 - height/2 :                    myTarget.y - height + myTarget.height                indicatorStyle = IndicatorPopup.IndicatorLeft                console.log("PosBaseToRight",x,y,indicatorStyle);                break;        }        back.anchors.leftMargin = indicatorStyle === IndicatorPopup.IndicatorLeft ? indicatorLen : 0        back.anchors.rightMargin = indicatorStyle === IndicatorPopup.IndicatorRight ? indicatorLen : 0        back.anchors.bottomMargin = indicatorStyle === IndicatorPopup.IndicatorBottom ? indicatorLen : 0        back.anchors.topMargin = indicatorStyle === IndicatorPopup.IndicatorTop ? indicatorLen : 0        leftPadding = indicatorStyle === IndicatorPopup.IndicatorLeft ? indicatorLen : 0        rightPadding = indicatorStyle === IndicatorPopup.IndicatorRight ? indicatorLen : 0        bottomPadding = indicatorStyle === IndicatorPopup.IndicatorBottom ? indicatorLen : 0        topPadding = indicatorStyle === IndicatorPopup.IndicatorTop ? indicatorLen : 0        console.log(x,y,indicatorStyle);        updateIndicatorPos(indicatorStyle);     }

比如我们想让这个popup位于目标的左侧,顶部对齐,就可以这样写(无需指定popup的X,Y坐标了):

Button {        id: btn        text: "水平左侧-顶部对齐"        onClicked: {            popup.backgroundColor = "#12B7F5"            popup.horizontalPosBase = IndicatorPopup.PosBaseToLeft            popup.verticalPosBase = IndicatorPopup.TopAlign            popup.indicatorOpen(btn)        }    }        IndicatorPopup {        id: popup        width : 180        height: 200        modal: false        focus: true        parent: Overlay.overlay // Overlay.overlay表示主窗口的意思,附加到任何的item、popup中,避免当前界面不是主界面的情况,无法显示弹出窗口                TextArea {            anchors.fill: parent            text: "1234567890"            color: "#FFF"            font.pixelSize: 14            font.family: "Microsoft Yahei"            wrapMode: TextEdit.WrapAnywhere        }            closePolicy: Popup.CloseOnEscape | Popup.CloseOnPressOutside}

如果我们使用模态的弹出窗口,并且想设置弹出窗口外的背景色,可以设置Overlay.modal附加属性,比如设置为谈红色:

Overlay.modal: Rectangle {    color: "#aaffdbe7"}

效果如下所示:

QT中如何实现自定义quick-Popup弹出窗口

以上是“QT中如何实现自定义quick-Popup弹出窗口”这篇文章的所有内容,感谢各位的阅读!相信大家都有了一定的了解,希望分享的内容对大家有所帮助,如果还想学习更多知识,欢迎关注编程网精选频道!

--结束END--

本文标题: QT中如何实现自定义quick-Popup弹出窗口

本文链接: https://lsjlt.com/news/296881.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • QT中如何实现自定义quick-Popup弹出窗口
    小编给大家分享一下QT中如何实现自定义quick-Popup弹出窗口,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!1.Popup介绍Popup是一个弹出窗口的控件...
    99+
    2023-06-20
  • QT quick-Popup弹出窗口自定义的实现
    目录1.Popup介绍2.自定义Popup1.Popup介绍 Popup是一个弹出窗口的控件 它的常用属性如下所示: anchors.centerIn : Object,用...
    99+
    2024-04-02
  • javascript+html5+css3如何实现自定义弹出窗口效果
    这篇文章主要介绍javascript+html5+css3如何实现自定义弹出窗口效果,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!效果图:源码:1.demo.jsp<%@&nb...
    99+
    2024-04-02
  • android实现百度地图自定义弹出窗口功能
    我们使用百度地图的时候,点击地图上的Marker,会弹出一个该地点详细信息的窗口,如下左图所示,有时候,我们希望自己定义这个弹出窗口的内容,或者,干脆用自己的数据来构造这样的弹...
    99+
    2022-06-06
    百度地图 自定义 地图 Android
  • jQuery如何实现弹出窗口
    这篇文章主要介绍jQuery如何实现弹出窗口,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!今天讲了Jquery的弹出窗口的组成和用法:先把引用文件的代码写好:// 每个弹窗...
    99+
    2024-04-02
  • javascript如何实现弹出窗口
    小编给大家分享一下javascript如何实现弹出窗口,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!方法:1、使用alert()实现警告框窗口,语法“alert(...
    99+
    2023-06-15
  • Android自定义弹出窗口PopupWindow使用技巧
    PopupWindow是Android上自定义弹出窗口,使用起来很方便。 PopupWindow的构造函数为 代码如下:public PopupWindow(View con...
    99+
    2022-06-06
    技巧 popupwindow Android
  • jQuery如何实现弹出窗口弹出div层
    这篇文章给大家分享的是有关jQuery如何实现弹出窗口弹出div层的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。通过今天的jquery实例学习,我们要达到这样的效果:点击页面的链...
    99+
    2024-04-02
  • JS实现定时自动消失的弹出窗口
    一、Demo.html <!DOCTYPE html> <html> <head> <meta charset="U...
    99+
    2024-04-02
  • vue如何实现自定义模态弹窗组件
    本篇内容主要讲解“vue如何实现自定义模态弹窗组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“vue如何实现自定义模态弹窗组件”吧! 一、创建弹窗组件 qu...
    99+
    2024-04-02
  • Popup如何实现弹出框添加数据
    这篇文章将为大家详细讲解有关Popup如何实现弹出框添加数据,小编觉得挺实用的,因此分享给大家做个参考,希望大家阅读完这篇文章后可以有所收获。逻辑窗口P1中显示一组数据,并提供一个添加按钮点击按钮,弹出新的...
    99+
    2024-04-02
  • JS怎么实现定时自动消失的弹出窗口
    本篇内容介绍了“JS怎么实现定时自动消失的弹出窗口”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、Demo.html<!DOCTYP...
    99+
    2023-06-30
  • win10系统如何实现窗口自定义调整
    这篇文章主要为大家展示了“win10系统如何实现窗口自定义调整”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“win10系统如何实现窗口自定义调整”这篇文章吧。按win+r打开运行窗口,输入reg...
    99+
    2023-06-28
  • 微信小程序如何实现自定义弹窗组件
    本篇内容主要讲解“微信小程序如何实现自定义弹窗组件”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“微信小程序如何实现自定义弹窗组件”吧!首先,放一下,最终的效果图:这是我们最后要实现的效果那么,首...
    99+
    2023-07-02
  • Android开发实现popupWindow弹出窗口自定义布局与位置控制方法
    本文实例讲述了Android开发实现popupWindow弹出窗口自定义布局与位置控制方法。分享给大家供大家参考,具体如下:布局文件:主布局文件:activity_main:<?xml version="1.0" encodi...
    99+
    2023-05-30
    android popupwindow 弹出窗口
  • WPF利用WindowChrome实现自定义窗口
    目录简介效果图自定义最小化、最大化、关闭按钮布局实现结语简介 Microsoft官网关于 WindowChome 的介绍 截取Microsoft文章的一段话: 若要在保留其标准功能时...
    99+
    2023-02-16
    WPF WindowChrome自定义窗口 WPF 自定义窗口 WPF WindowChrome
  • Android 自定义弹出框实现代码
    废话不多说了,直接给大家上关键代码了。 - (void)viewDidLoad { [super viewDidLoad]; // Do any additional set...
    99+
    2022-06-06
    自定义 Android
  • 如何动态创建Angular组件实现popup弹窗功能
    这篇文章主要为大家展示了“如何动态创建Angular组件实现popup弹窗功能”,内容简而易懂,条理清晰,希望能够帮助大家解决疑惑,下面让小编带领大家一起研究并学习一下“如何动态创建Angular组件实现p...
    99+
    2024-04-02
  • jquery实现的右下角窗口弹窗加定时刷新弹出功能
    你可以使用以下代码实现一个右下角窗口弹窗,并添加定时刷新弹出功能:HTML:```html弹窗标题弹窗内容...
    99+
    2023-09-02
    jquery
  • 微信小程序如何实现自定义模态弹窗组件
    这篇文章主要介绍微信小程序如何实现自定义模态弹窗组件,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!小程序自带一个showModal弹窗,调用很简单,但是限制很多,title有字数限制...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作