您的位置:首页 > 编程语言 > Qt开发

Qt之显示位置信息

2011-08-14 11:59 141 查看
一、我的代码展示(警告:本代码不能通过,错误提示为“段错误”)

// geometry.h

#ifndef GEOMETRY_H
#define GEOMETRY_H
#include <QDialog>
class  QMoveEvent;
class  QResizeEvent;
class  QPushButton;
class  QGridLayout;

class geometry:public QDialog
{
Q_OBJECT
public:
geometry();
void update();
void moveEvent(QMoveEvent *);
void resizeEvent(QResizeEvent *);
private:
QPushButton *button1_1;
QPushButton *button1_2;
QPushButton *button2_1;
QPushButton *button2_2;
QGridLayout *layout;

};
#endif


//geometry.cpp
#include <QtGui>
#include "geometry.h"

geometry::geometry()
{
layout=new QGridLayout(this);
button1_1=new QPushButton("Geometry:");
button1_2=new QPushButton;
button2_1=new QPushButton("FraneGeometry:");
button2_2=new QPushButton;
layout->addWidget(button1_1,0,0);
layout->addWidget(button1_2,0,1);
layout->addWidget(button2_1,1,0);
layout->addWidget(button2_2,1,1);
update();    //*************
}
void geometry::update()
{
QString temp;
QString geo;
geo=temp.setNum(geometry().x())+","+temp.setNum(geometry().y())+","+temp.setNum(geometry().width())+","+temp.setNum(geometry().height());
button1_2->setText(geo);
QString fram;
fram=temp.setNum(frameGeometry().x())+","+temp.setNum(frameGeometry().y())+","+temp.setNum(frameGeometry().width())+","+temp.setNum(frameGeometry().height());
button2_2->setText(fram);
}
void geometry::moveEvent(QMoveEvent *)
{
update();
}
void geometry::resizeEvent(QResizeEvent *)
{
update();
}


//main.cpp
#include <QApplication>
#include "geometry.h"

int main(int argc,char **argv)
{
QApplication app(argc,argv);
geometry geo;
geo.show();
return app.exec();
}

错误说明:如果注释掉语句后边有**的这一行,则编译、运行能通过,但是geometry()坐标(0,0)和长宽(640,480)不变,frameGeometry()运行正常,如果不注释掉这提示“段错误”,如下图:


移动后->


二、知识点介绍:

QWidget::geometry()函数返回的是该控件(不含边框)的左上角相对于副窗口的坐标(即x为该点到父窗口左边界的距离,y为到上边界的距离)和宽、高(均不含窗口)QWidget::frameGeometry()就是返回不含边框的位置信息,具体见图分析:


这是官方参考文档信息



这一张是《Linux窗口程序设计—Qt4精彩实例分析》的运行结果截图,对此结果我的分析如下:

(1)左、右、下的边界宽为6:(337-325)/2=6 与 329-323=6 结论符合

(2)上边界为20:182-162=20 与 398-372-6=20 符合

三、如果有能看出我错误的道友们,希望能指出我的错误,谢谢。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐