位置边框深度探索QT窗口系统---几何篇2
2013-05-27 20:11
417 查看
最近使用开发的过程中出现了一个小问题,顺便记录一下原因和方法--位置边框
上一篇我们介绍了如何获得QT窗口的几何特性,这一篇介绍如何设置窗口的几何特性,窗口的平移,窗口的缩放,如何去掉窗口的边框,如何去掉窗口的标题,如何限定窗口的尺寸,下面一一介绍:
1.窗口的平移,窗口平移可以用如下两种方法来实现,一是通过move的方法,二是通过setGeometry的方法
对于采取move的方法来挪动窗口,只能转变窗口的位置,不能转变窗口的大小,窗口的位置包括窗口边框,若窗口无父窗口,则位置坐标(x,y),绝对于电脑屏幕来说的,若窗口有父窗口,则位置坐标(x,y)是绝对于父窗口来说的;对于采取setGeometry的方法来挪动窗口,可以转变窗口的位置的同时,转变窗口的尺寸,窗口的位置不包括窗口边框,若窗口无父窗口,则位置坐标(x,y)绝对于电脑屏幕来说的,若窗口有父窗口,则位置坐标(x,y)绝对于父窗口来说的;我们来看实例:
(1)采取move的方法,窗口无父窗口
widget先move(0,0)到屏幕的左上角,窗口系统的坐标轴x轴正向向右,y轴的正向向下,所以坐标原点在左上角;然后widget挪动到move(100,100)的位置,下面是打印出的位置:
pos() = QPoint(0,0)
pos() = QPoint(100,100)
(2)采取setGeometry 的方法,窗口无父窗口
我们先来看打印出的结果:
pos() = QPoint(-4,-30)
每日一道理
当浮华给予我们过多欺骗,现实中的虚假几乎让我们忘却了真的存在,是真情唤回了迷离的心,是真情带给了我们最纯、最真的感觉,它流露的是美的誓言,渗透的是永恒执著的真爱。
pos() = QPoint(96,70)
为什么第一次不是挪动到(0, 0),第二次不是挪动到(100,100)呢?因为通过setGeometry设置的挪动位置不包括边框,而我们打印出来的是边框的位置,参照几何篇一,很快你就知道,4是边框宽度,30是窗口标题高度+边框宽度。
(3)采取move的方法,窗口有父窗口
ppbTest是parentWidget的子窗口,此次挪动ppbTest,首先挪动位置(100,100)处,然后挪动到(0,0)处,先来看看输出结果:
pos() = QPoint(100,100)
pos() = QPoint(0,0)
通过下面的输出结果,我们不难得出结论,ppbTest子窗口move位置是绝对父窗口parentWidget来说的,且是绝对父窗口的内容矩形来讲的。
(4)采取setGeometry的方法,窗口有父窗口
输出结果同(3),为什么呢?不是说setGeometry的挪动起始位置不包括边框吗?怎么输出结果和(3)雷同呢?这是在这里ppbTest没有边框的原因,好了窗口的挪动就介绍到这里了,下节我们介绍窗口的缩放。
文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。
---------------------------------
原创文章 By
位置和边框
---------------------------------
上一篇我们介绍了如何获得QT窗口的几何特性,这一篇介绍如何设置窗口的几何特性,窗口的平移,窗口的缩放,如何去掉窗口的边框,如何去掉窗口的标题,如何限定窗口的尺寸,下面一一介绍:
1.窗口的平移,窗口平移可以用如下两种方法来实现,一是通过move的方法,二是通过setGeometry的方法
void move(int x, int y) void move(const QPoint &pos) void setGeometry(int x, int y, int w, int h ) void setGeometry(const QRect &rect);
对于采取move的方法来挪动窗口,只能转变窗口的位置,不能转变窗口的大小,窗口的位置包括窗口边框,若窗口无父窗口,则位置坐标(x,y),绝对于电脑屏幕来说的,若窗口有父窗口,则位置坐标(x,y)是绝对于父窗口来说的;对于采取setGeometry的方法来挪动窗口,可以转变窗口的位置的同时,转变窗口的尺寸,窗口的位置不包括窗口边框,若窗口无父窗口,则位置坐标(x,y)绝对于电脑屏幕来说的,若窗口有父窗口,则位置坐标(x,y)绝对于父窗口来说的;我们来看实例:
(1)采取move的方法,窗口无父窗口
#include <QtGui/QApplication> #include <qwidget.h> #include <qdebug.h> void print(QWidget *pWidget) { qDebug() << "pos() = " << pWidget->pos(); } int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget widget; widget.show(); widget.resize(200, 300); widget.move(0, 0); print(&widget); widget.move(100, 100); print(&widget); return a.exec(); }
widget先move(0,0)到屏幕的左上角,窗口系统的坐标轴x轴正向向右,y轴的正向向下,所以坐标原点在左上角;然后widget挪动到move(100,100)的位置,下面是打印出的位置:
pos() = QPoint(0,0)
pos() = QPoint(100,100)
(2)采取setGeometry 的方法,窗口无父窗口
#include <QtGui/QApplication> #include <qwidget.h> #include <qdebug.h> void print(QWidget *pWidget) { qDebug() << "pos() = " << pWidget->pos(); } int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget widget; widget.show(); widget.resize(200, 300); widget.setGeometry(0, 0, 200, 300); print(&widget); widget.setGeometry(100, 100, 200, 300); print(&widget); return a.exec(); }
我们先来看打印出的结果:
pos() = QPoint(-4,-30)
每日一道理
当浮华给予我们过多欺骗,现实中的虚假几乎让我们忘却了真的存在,是真情唤回了迷离的心,是真情带给了我们最纯、最真的感觉,它流露的是美的誓言,渗透的是永恒执著的真爱。
pos() = QPoint(96,70)
为什么第一次不是挪动到(0, 0),第二次不是挪动到(100,100)呢?因为通过setGeometry设置的挪动位置不包括边框,而我们打印出来的是边框的位置,参照几何篇一,很快你就知道,4是边框宽度,30是窗口标题高度+边框宽度。
(3)采取move的方法,窗口有父窗口
#include <QtGui/QApplication> #include <qwidget.h> #include <qdebug.h> void print(QWidget *pWidget) { qDebug() << "pos() = " << pWidget->pos(); } int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget parentWidget; QPushButton *ppbTest = new QPushButton("test button", &parentWidget); parentWidget.show(); parentWidget.resize(200, 300); ppbTest->move(100, 100); print(ppbTest); ppbTest->move(0, 0); print(ppbTest); return a.exec(); }
ppbTest是parentWidget的子窗口,此次挪动ppbTest,首先挪动位置(100,100)处,然后挪动到(0,0)处,先来看看输出结果:
pos() = QPoint(100,100)
pos() = QPoint(0,0)
通过下面的输出结果,我们不难得出结论,ppbTest子窗口move位置是绝对父窗口parentWidget来说的,且是绝对父窗口的内容矩形来讲的。
(4)采取setGeometry的方法,窗口有父窗口
#include <QtGui/QApplication> #include <qwidget.h> #include <qdebug.h> void print(QWidget *pWidget) { qDebug() << "pos() = " << pWidget->pos(); } int main(int argc, char *argv[]) { QApplication a(argc, argv); QWidget parentWidget; QPushButton *ppbTest = new QPushButton("test button", &parentWidget); parentWidget.show(); parentWidget.resize(200, 300); ppbTest->setGeometry(100, 100, ppbTest->width(), ppbTest->height()); print(ppbTest); ppbTest->setGeometry(0, 0, ppbTest->width(), ppbTest->height()); print(ppbTest); return a.exec(); }
输出结果同(3),为什么呢?不是说setGeometry的挪动起始位置不包括边框吗?怎么输出结果和(3)雷同呢?这是在这里ppbTest没有边框的原因,好了窗口的挪动就介绍到这里了,下节我们介绍窗口的缩放。
文章结束给大家分享下程序员的一些笑话语录: 一个合格的程序员是不会写出 诸如 “摧毁地球” 这样的程序的,他们会写一个函数叫 “摧毁行星”而把地球当一个参数传进去。
---------------------------------
原创文章 By
位置和边框
---------------------------------
相关文章推荐
- 位置边框深度探索QT窗口系统---几何篇2
- 深度探索QT窗口系统---几何篇2
- 深度探索QT窗口系统---几何篇2
- 深度探索QT窗口系统---几何篇4
- 深度探索QT窗口系统---几何篇3
- 深度探索QT窗口系统---几何篇4
- 深度探索QT窗口系统---几何篇 ,很不错
- 深度探索QT窗口系统---几何篇3
- 深度探索QT窗口系统---几何篇1
- 深度探索QT窗口系统---几何篇3
- 深度探索QT窗口系统---几何篇1
- 深度探索QT窗口系统(五篇)
- 深度探索Qt窗口系统---布局篇1
- 管理管理器深度探索QT窗口系统---布局篇
- Android深度探索(卷2)系统应用源代码分析与ROM定制 读书笔记1
- Qt无边框窗口的“关闭”和“移动”
- 探索Win32系统之窗口类(Window Classes in Win32)(异域の蜗牛注:关于win32编程中的窗口类的探讨)
- Qt 无边框窗口自定义标题栏
- qt调用系统API刷新当前窗口
- Qt 拖动窗口位置