如何获得 Qt窗口部件在主窗口中的位置--确定鼠标是否在某一控件上与在控件上的位置

用Qt Creator 设计程序时,最方便的就是ui设计器,可以很容易的得到想要的布局。

但是这样自动布局带来的后果是很难知道窗口中某一部件在主窗口中的相对位置。

在处理子窗口鼠标事件时变的很麻烦。主窗口有菜单、工具条等,想用鼠标绘图,

把鼠标轨迹映射到窗口部件上,这些问题。

其实最主要的是获得窗口部件的起始点相对主窗口的位置。

例如:在主窗口拖入一个QScrollArea 在其上放一个QLabel用来显示鼠标事件。

可以在ui对象结构上看到如下结构。

大家知道,我们可以用pos()来获得某一窗口部件的起始点相对其父的位置。

那么,看结构可知,要获得scrollArea_2在主窗口(MainWindow)中的相对位置

即为:ui->scrollArea_2->pos()+ui->centralWidget->pos()

所以想获得窗口ScrollArea_2在主窗口中的相对位置区域为:

    labelrect = QRect(ui->scrollArea_2->pos()+ui->centralWidget->pos(),
                      ui->scrollArea_2->size());

那么判断鼠标是否在此控件上只需在鼠标事件响应函数内写如下语句即可:

if(labelrect.contains(event->pos()))   {……}

现在你可以在任意复杂的ui结构中确定某一子部件的位置了,但一定要注意:

父关系,即当前部件于其父部件的相对位置,其父部件与上层部件的相对位置,

直到与主窗口的相对位置。

http://blog.csdn.net/yh_1988/article/details/6773451

时间: 2024-10-27 12:54:35

如何获得 Qt窗口部件在主窗口中的位置--确定鼠标是否在某一控件上与在控件上的位置的相关文章

QT 子窗口监听主窗口信号(超级简单,但是好用,比如主窗口移动的时候,子窗口不要再继续处理任务)

MainWindow *ptr = NULL; ptr = (MainWindow*)parentWidget(); connect(ptr, SIGNAL(param_result(bool)), this, SLOT(param_add(bool))); http://blog.csdn.net/emdfans/article/details/42667403

Qt Widgets——主窗口及其主要组成部分

Main Window and Related Classes QAction 动作类,用于当做一个菜单项或工具项插入菜单或工具栏 QActionGroup 动作组,用于管理多个动作,设置它们之间的互斥性等 QWidgetAction 部件动作,继承自QAction,用于将小部件插入菜单或工具栏 QDockWidget 悬浮部件,程序运行后可鼠标拖动的部件 QMainWindow 主窗口,是其它部件的容器 QMdiArea 子区域,加到QMainWindow中,用于放置多个QMdiSubWind

[Qt Creator 快速入门] 第5章 应用程序主窗口

??这一章开始接触应用程序主窗口的相关内容.对于日常见到的应用程序而言,许多都是基于主窗口的,主窗口中包含了菜单栏.工具栏.状态栏和中心区域等.这一章会详细介绍主窗口的每一个部分,还会涉及资源管理.富文本处理.拖放操作和文档打印等相关内容.重点是讲解知识点,而相关的综合应用实例放到了<Qt及Qt Quick开发实战精解>一书中. ??Qt中提供了以QMainWindow类为核心的主窗口框架,包含了众多相关的类,它 们的继承关系如图5 - 1所示,本章会讲解到图中每一个类的基本应用. 图5-1主

QT开发(二十二)——QMainWindow主窗口

QT开发(二十二)--QMainWindow主窗口 一.主窗口简介 应用程序中的主窗口是与用户进行长时间交互的顶层窗口,提供了应用程序的大部分功能,通常是应用程序启动后的第一个窗口,应用程序一般由一个主窗口和多个对话框组成. QT中直接支持主窗口,QMainWindow是QT中主窗口的基类,是继承于QWidget类的容器型组件. QMainWindow内部封装了菜单栏.工具栏.中心组件.停靠组件.状态栏等. QMainWindow内置了布局管理器,基本的组件布局如下: 二.菜单栏 QT中提供了预

自定义QT窗口部件外观之QStyle

自定义QT窗口部件外观 重新定义Qt内置窗口部件的外观常用的方法有两种:一是通过子类化QStyle 类或者预定义的一个样式,例如QWindowStyle,来定制应用程序的观感:二是使用Qt样式表. QStyle 类的使用 1.      准备必要的背景图片.在你想添加自定义风格的工程目录下新建一个文件夹“images”,将背景图片等放入文件夹“images”. 2.      点击Qt Creator的“文件”->“新建文件或工程”->模板选择“Qt”,再选择Qt资源文件->点击“选择”

1.4 窗口部件的布局

Qt第一章的最后一个内容是部件的布局. 书中的例子用到了一个QHBoxLayout类 这个类能够将放置在布局内的控件自动调整大小和位置,我们不需要手动去调整,比较方便. 第10行:创建一个QWidget对象 QWidget是所有用户界面对象的基类.在这里将会用作其它部件的父对象,在这之上显示相应的控件.也就是说它将作为程序的主窗口. 第11行:设置窗口标题 字面意思上看也的确是设置窗口的标题. 第13行:创建一个QSpinBox对象 用到的函数:QSpinBox::QSpinBox ( QWid

Qt5 主窗口组成

1. 菜单栏 菜单是一系列命令的列表.为了实现菜单.工具栏按钮.键盘快捷键等命令的一致性,Qt使用动作(Action)来表示这些命令.Qt的菜单就是由一系列的QAction动作对象构成的列表,而菜单栏则是包容菜单的面板,它位于主窗口顶部.主窗口标题栏的下面.一个主窗口最多只有一个菜单栏. 2. 状态栏 状态栏通常显示GUI应用程序的一些状态信息,它位于主窗口的最底部.用户可以在状态栏上添加.使用Qt窗口部件,一个主窗口最多只有一个状态栏. 3. 工具栏 工具栏是由一系列的类似于按钮的动作排列而成

QT之窗口部件及窗口类型

今天我们来继续学习QT的相关知识,本文的内容是介绍QT的窗口部件及窗口类型. 先说下窗口组件,图形用户界面由不同的窗口和窗口组件构成,一般是在<QtGui>中包含,对应Qt中的GUI模块:Qt以组件对象的方式构建图形用户界面:组件的类型分为两种:1.容器类(父组件),用于包含其他的界面组件.2.功能类(子组件),这个是用于实现特定的交互功能. **Qt中没有父组件的顶级组件叫做窗口!!!** 以下图为例,我们进行说明: QWidget 类继承自 QObject 类和 QPaintDevice

【Qt学习笔记】窗口部件整理

关于Qt中窗口部件的学习 今天开始学习Qt的窗口部件,领略一下Qt的神奇之处,记得2012年的那年冬天,我还学Java呢,现在基本上和Java说再见了,不过对于嵌入式的开发Qt还是举足轻重的,我想趁着假期的时间,好好学习.考研之后发现一个问题,无论当初你学的有多明白,总会忘记,最好的方法就是将他们记录下来,甚至写下你当时的心情,如果有一天你需要了,回过头来看看,是一笔不错的财富. 1. QDialog类对话框 1.1 模态和非模态对话框 对于对话框,有模态(modal)和非模态(modeless