Qt5位置相关函数异同详解(附源码)
Qt5中提供了丰富的位置和区域大小相关函数。下面讲一讲他们的区别。
主要函数:
1、x(),y(),pos():获取整个窗体左上角的坐标位置。
2、frameGeometry():获取整个窗体左上角的坐标和长宽值。
3、geometry():获取窗体中央区域左上角的坐标和长宽值。
4、width()和height():获取窗体中央区域的长宽值。
5、size():获取窗体中央区域的长宽值。
6、rect():获得的左上角坐标始终为(0,0),长宽值为中央区域的长宽值。
下面举一个实例,来区分这几个函数的功能。
实例:
1、新建GUI应用,项目名称为“Geometry”,基类选择“QDialog”,类名自定,取消“创建界面”复选框,最后完成项目工程的建立。
2、打开“dialog.h”,添加如下代码:
#ifndef DIALOG_H
#define DIALOG_H #include <QDialog>
#include <QLabel>
#include <QGridLayout> class Dialog : public QDialog
{
Q_OBJECT public:
Dialog(QWidget *parent = );
~Dialog(); void updateLabel(); private:
QLabel *xLabel;
QLabel *xValueLabel; QLabel *yLabel;
QLabel *yValueLabel; QLabel *frmLabel;
QLabel *frmValueLabel; QLabel *posLabel;
QLabel *posValueLabel; QLabel *geoLabel;
QLabel *geoValueLabel; QLabel *widthLabel;
QLabel *widthValueLabel; QLabel *heightLabel;
QLabel *heightValueLabel; QLabel *rectLabel;
QLabel *rectValueLabel; QLabel *sizeLabel;
QLabel *sizeValueLabel; QGridLayout *mainLayout; protected:
void moveEvent(QMoveEvent *); //鼠标移动事件
void resizeEvent(QResizeEvent *); //大小改变
}; #endif // DIALOG_H
3、打开"dialog.cpp",添加如下代码:
#include "dialog.h" Dialog::Dialog(QWidget *parent)
: QDialog(parent)
{
setWindowTitle(tr("Geometry")); xLabel = new QLabel(tr("X(): "));
xValueLabel = new QLabel; yLabel = new QLabel(tr("Y(): "));
yValueLabel = new QLabel; frmLabel = new QLabel(tr("FrameGeometry(): "));
frmValueLabel = new QLabel; posLabel = new QLabel(tr("Pos(): "));
posValueLabel = new QLabel; geoLabel = new QLabel(tr("Geometry(): "));
geoValueLabel = new QLabel; widthLabel = new QLabel(tr("Width(): "));
widthValueLabel = new QLabel; heightLabel = new QLabel(tr("Height(): "));
heightValueLabel = new QLabel; rectLabel = new QLabel(tr("Rect(): "));
rectValueLabel = new QLabel; sizeLabel = new QLabel(tr("Size(): "));
sizeValueLabel = new QLabel; mainLayout = new QGridLayout(this); mainLayout->addWidget(xLabel,,);
mainLayout->addWidget(xValueLabel,,); mainLayout->addWidget(yLabel,,);
mainLayout->addWidget(yValueLabel,,); mainLayout->addWidget(posLabel,,);
mainLayout->addWidget(posValueLabel,,); mainLayout->addWidget(frmLabel,,);
mainLayout->addWidget(frmValueLabel,,); mainLayout->addWidget(geoLabel,,);
mainLayout->addWidget(geoValueLabel,,); mainLayout->addWidget(widthLabel,,);
mainLayout->addWidget(widthValueLabel,,); mainLayout->addWidget(heightLabel,,);
mainLayout->addWidget(heightValueLabel,,); mainLayout->addWidget(rectLabel,,);
mainLayout->addWidget(rectValueLabel,,); mainLayout->addWidget(sizeLabel,,);
mainLayout->addWidget(sizeValueLabel,,); updateLabel(); //更新控件 } Dialog::~Dialog()
{ } void Dialog::updateLabel()
{
QString xStr;
xValueLabel->setText(xStr.setNum(x())); //获取整个窗体左上角的位置 QString yStr;
yValueLabel->setText(yStr.setNum(y())); //获取整个窗体左上角的位置 QString frameStr; //获取整个窗体左上角的位置和长宽值
QString tempStr1,tempStr2,tempStr3,tempStr4;
frameStr = tempStr1.setNum(frameGeometry().x()) + "," +
tempStr2.setNum(frameGeometry().y()) + "," +
tempStr3.setNum(frameGeometry().width()) + ","+
tempStr4.setNum(frameGeometry().height());
frmValueLabel->setText(frameStr); QString geoStr; //获取窗体中央区域的左上角位置和长宽值
QString tempStr21,tempStr22,tempStr23,tempStr24;
geoStr = tempStr21.setNum(geometry().x()) + "," +
tempStr22.setNum(geometry().y()) + "," +
tempStr23.setNum(geometry().width()) + "," +
tempStr24.setNum(geometry().height());
geoValueLabel->setText(geoStr); QString positionStr; //获取窗体左上角的位置
QString tempStr11,tempStr12;
positionStr = tempStr11.setNum(pos().x()) + "," +
tempStr12.setNum(pos().y());
posValueLabel->setText(positionStr); QString wStr,hStr; //获取窗体中央区域的长宽值
widthValueLabel->setText(wStr.setNum(width()));
heightValueLabel->setText(hStr.setNum(height())); QString rectStr; //获取窗体中央区域的左上角值和长宽值
QString tempStr31,tempStr32,tempStr33,tempStr34;
rectStr = tempStr31.setNum(rect().x()) + "," +
tempStr32.setNum(rect().y()) + "," +
tempStr33.setNum(rect().width()) + "," +
tempStr34.setNum(rect().height());
rectValueLabel->setText(rectStr); QString sizeStr; //获取窗体中央区域的长宽值
QString tempStr41,tempStr42;
sizeStr = tempStr41.setNum(size().width()) + "," +
tempStr42.setNum(size().height());
sizeValueLabel->setText(sizeStr); } void Dialog::moveEvent(QMoveEvent *)
{
updateLabel();
} void Dialog::resizeEvent(QResizeEvent *)
{
updateLabel();
}
http://blog.csdn.net/rl529014/article/details/51645440
Qt5位置相关函数异同详解(附源码)的更多相关文章
- 转载—— android 瀑布流的实现详解,附源码
介绍 参考自:https://github.com/dodola/android_waterfall,因为原来的代码封装不好,所以,我根据源码的思路,重新写了一遍,所以有了现在这个项目:https:/ ...
- C# Socket-TCP异步编程原理详解附源码
目录 目录异步原理主要方法源码Server源码:Client源码实验效果(广播为例)参考博客 TOC 异步原理 套接字编程原理:延续文件作用思想,打开-读写-关闭的模式. C/S编程模式如下: Ø 服 ...
- struts2内置拦截器和自定义拦截器详解(附源码)
一.Struts2内置拦截器 Struts2中内置类许多的拦截器,它们提供了许多Struts2的核心功能和可选的高级特 性.这些内置的拦截器在struts-default.xml中配置.只有配置了拦截 ...
- SpringBoot之DispatcherServlet详解及源码解析
在使用SpringBoot之后,我们表面上已经无法直接看到DispatcherServlet的使用了.本篇文章,带大家从最初DispatcherServlet的使用开始到SpringBoot源码中Di ...
- Spring Boot启动命令参数详解及源码分析
使用过Spring Boot,我们都知道通过java -jar可以快速启动Spring Boot项目.同时,也可以通过在执行jar -jar时传递参数来进行配置.本文带大家系统的了解一下Spring ...
- select用法&原理详解(源码剖析)(转)
今天遇到了在select()前后fd_set的变化问题,查了好久终于找到一个有用的帖子了,很赞,很详细!!原文链接如下: select用法&原理详解(源码剖析) 我的问题是: 如下图示:在se ...
- 详解HashMap源码解析(下)
上文详解HashMap源码解析(上)介绍了HashMap整体介绍了一下数据结构,主要属性字段,获取数组的索引下标,以及几个构造方法.本文重点讲解元素的添加.查找.扩容等主要方法. 添加元素 put(K ...
- 详解ConCurrentHashMap源码(jdk1.8)
ConCurrentHashMap是一个支持高并发集合,常用的集合之一,在jdk1.8中ConCurrentHashMap的结构和操作和HashMap都很类似: 数据结构基于数组+链表/红黑树. ge ...
- 线程池底层原理详解与源码分析(补充部分---ScheduledThreadPoolExecutor类分析)
[1]前言 本篇幅是对 线程池底层原理详解与源码分析 的补充,默认你已经看完了上一篇对ThreadPoolExecutor类有了足够的了解. [2]ScheduledThreadPoolExecut ...
随机推荐
- SQL学习之联结表的使用
1.简介:"联结(join)表"是SQL最强大的功能之一.联结是利用SQL的SELECT能执行的最重要的操作,很好地理解联结及其语法是学习SQL的极为重要的部分! 在能够有效的使用 ...
- AppDelegate关于应用程序挂起、复原与终止的代理方法
AppDelegate关于应用程序挂起.复原与终止的代理方法: 首次运行: - (BOOL)application:(UIApplication *)application didFinishLaun ...
- 如何为你的美术妹子做Unity的小工具(一)
在上的工具栏添加 也就是这个位置
- scanf函数和printf函数
C程序实现输出和输入的 主要是printf函数 和 scanf函数,这两个函数是格式输入输出 格式声明由%和格式字符组成 如%d,%f 格式字符: d格式符:用来输出一个有符号的十进制整数 c格式 ...
- linux使用wget纯命令下载JDK的方法(凑字数)
linux使用wget纯命令下载JDK的方法 linux使用wget纯命令下载JDK的方法 Oracle官网上下载jdk,需要点击accept licence的才能下载,所以一般的直接使用wget下载 ...
- Composer Yii2 不设置全局变量 归档安装 Win7
1.下载Composer_installer.phar https://getcomposer.org/composer.phar 重命名为 composer_installer.phar 将文件放 ...
- python一些模块的exe安装包在windows的64位系统里识别不到已安装Python目录的解决方法
在windows里安装python一些模块时候,有时候源码安装比较困难,pip install也各种报错,这时候最喜欢用别人编译好的exe或者whl文件来安装,但是在windows的64位系统里,如果 ...
- 写了个小爬虫,为何用上代理ip总是出现错误。
import urllib.request import re import os import random import threading def url_open(url): #在第8到第12 ...
- JAVA泛型-擦除
package com.xt.thinks15_7; import java.util.Arrays; class EraseObject1<A> { } class EraseObjec ...
- c++ 静态多态与动态多态
多态polymorphism是指具有多种形态的情况,它能根据单一的标记关联不同的行为.多态是面向对象程序设计的基础.在面向对象程序设计中的多态是一种运行时的多态.C++中有两种多态,称为动多态(运行时 ...