目录
0、位置函数介绍
- 0、位置函数介绍
- 一、项目介绍
- 二、项目基本配置
- 三、UI界面设计
- 四、主程序实现
- 4.1 dialog.h头文件
- 4.2 dialog.cpp源文件
- 五、效果演示
- 六、总结
Qt提供了很多获取窗体位置和显示区域大小的函数,称为位置函数。常见位置函数如下:
- x(),y(),pos()函数的作用都是获得整个窗体左上角的坐标位置;
- frameGeometry()函数获得的是整个窗体的左上顶点和长、宽值;
- geometry()函数获得的是窗体内中央区域的左上顶点坐标和长、宽值;
- width(),height()函数获得的是中央区域的长、宽值;
- size()函数获得的是窗体中央区域的长、宽值;
- rect()函数和geometry()函数相同,返回的是QRect对象,其获得的左上顶点值始终为(0,0),而获取的长宽值与geometry()函数相同;
【注意】:在编写程序时,尤其注意以上区别,避免产生不必要的误差。
一、项目介绍设计一个对话框界面,当改变对话框相应位置时,实时显示位置变化信息。
二、项目基本配置新建一个Qt案例,项目名称为“Geometry”,基类选择“QDialog”,取消创建UI界面复选框的选中状态,完成项目创建。
三、UI界面设计无UI界面
四、主程序实现 4.1 dialog.h头文件添加头文件:
#include
#include
声明函数和变量:
public:
void updateLabel();
private:
QLabel *xLabel; //显示x():
QLabel *xValueLabel;//显示x的值
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 *);//窗口大小调整事件
4.2 dialog.cpp源文件
在源文件中首先设置窗口标题:
setWindowTitle("Geometry");//设置窗口标题
然后定义18个标签:
//定义18个标签
xLabel=new QLabel("x():");
xValueLabel=new QLabel;
yLabel=new QLabel("y():");
yValueLabel=new QLabel;
FrmLabel=new QLabel("Frame:");
FrmValueLabel=new QLabel;
posLabel=new QLabel("pos():");
posValueLabel=new QLabel;
geoLabel=new QLabel("geometry():");
geoValueLabel=new QLabel;
widthLabel=new QLabel("width():");
widthValueLabel=new QLabel;
heightLabel=new QLabel("height():");
heightValueLabel=new QLabel;
rectLabel=new QLabel("rect():");
rectValueLabel=new QLabel;
sizeLabel=new QLabel("size():");
sizeValueLabel=new QLabel;
mainLayout=new QGridLayout(this);
- x(),y(),pos()函数的作用都是获得整个窗体左上角的坐标位置;【以电脑屏幕为基准,电脑屏幕左上角为(0,0)】
- frameGeometry()函数获得的是整个窗体的左上顶点的位置坐标和长、宽值;【左上顶点的坐标值与x(),y()函数相同,长宽为外轮廓长宽】
- geometry()函数获得的是窗体内中央区域的左上顶点坐标和长、宽值;【左上顶点为窗体内部的顶点坐标,长宽为内轮廓长宽(即中央区域)】
- width(),height()函数获得的是中央区域的长、宽值;【同geometry()函数获取的长宽】
- size()函数获得的是窗体中央区域的长、宽值;【即与width(),height()函数相同】
- rect()函数和geometry()函数相同,返回的是QRect对象,其获得的左上顶点值始终为(0,0),而获取的长宽值与geometry()函数相同;【rect()函数获取的长宽与width(),height()函数相同】
然后给18个标签设置布局:
//设置18个Label的位置
mainLayout->addWidget(xLabel,0,0);
mainLayout->addWidget(xValueLabel,0,1);
mainLayout->addWidget(yLabel,1,0);
mainLayout->addWidget(yValueLabel,1,1);
mainLayout->addWidget(posLabel,2,0);
mainLayout->addWidget(posValueLabel,2,1);
mainLayout->addWidget(FrmLabel,3,0);
mainLayout->addWidget(FrmValueLabel,3,1);
mainLayout->addWidget(geoLabel,4,0);
mainLayout->addWidget(geoValueLabel,4,1);
mainLayout->addWidget(widthLabel,5,0);
mainLayout->addWidget(widthValueLabel,5,1);
mainLayout->addWidget(heightLabel,6,0);
mainLayout->addWidget(heightValueLabel,6,1);
mainLayout->addWidget(rectLabel,7,0);
mainLayout->addWidget(rectValueLabel,7,1);
mainLayout->addWidget(sizeLabel,8,0);
mainLayout->addWidget(sizeValueLabel,8,1);
updateLabel();
update函数用于获取各位置函数的信息并显示,代码如下:
xValueLabel->setText(QString::number(x()));//将获取到的x()的值转换为字符串类型
yValueLabel->setText(QString::number(y()));//获取y()函数的显示结果
QString frameStr;//获取frameGeometry()函数的结果并显示
frameStr=QString::number(frameGeometry().x())+","+
QString::number(frameGeometry().y())+","+
QString::number(frameGeometry().width())+","+
QString::number(frameGeometry().height());
FrmValueLabel->setText(frameStr);
QString positionStr;//获取pos()函数的结果并显示
positionStr=QString::number(pos().x())+","+
QString::number(pos().y());
posValueLabel->setText(positionStr);
QString geoStr; //获取geometry()函数的结果并显示
geoStr=QString::number(geometry().x())+","+
QString::number(geometry().y())+","+
QString::number(geometry().width())+","+
QString::number(geometry().height());
geoValueLabel->setText(geoStr);
widthValueLabel->setText(QString::number(width()));//获取width()函数的结果并显示
heightValueLabel->setText(QString::number(height()));//获取height()函数的结果并显示
QString rectStr;
rectStr=QString::number(rect().x())+","+
QString::number(rect().y())+","+
QString::number(/*rect().width()*/width())+","+
QString::number(height()/*rect().height()*/);
rectValueLabel->setText(rectStr);
QString sizeStr;
sizeStr=QString::number(size().width())+","+
QString::number(size().height());
sizeValueLabel->setText(sizeStr);
然后重写moveEvent()函数,以响应对话框移动事件,使得窗体移动时能够同步更新各函数的显示结果,代码如下:
void Dialog::moveEvent(QMoveEvent *){
updateLabel();//更新标签
}
重写resizeEvent()函数,以响应对话框大小调整事件,使得窗体大小变化时能够同步更新各函数的显示结果,代码如下:
void Dialog::resizeEvent(QResizeEvent *){
updateLabel();//更新标签
}
五、效果演示
完整效果如下:
如果没有看懂的话,完整代码可以参考:https://download.csdn.net/download/didi_ya/74442876
六、总结- x(),y(),pos()函数的作用都是获得整个窗体左上角的坐标位置;【以电脑屏幕为基准,电脑屏幕左上角为(0,0)】
- frameGeometry()函数获得的是整个窗体的左上顶点的位置坐标和长、宽值;【左上顶点的坐标值与x(),y()函数相同,长宽为外轮廓长宽】
- geometry()函数获得的是窗体内中央区域的左上顶点坐标和长、宽值;【左上顶点为窗体内部的顶点坐标,长宽为内轮廓长宽(即中央区域)】
- width(),height()函数获得的是中央区域的长、宽值;【同geometry()函数获取的长宽】
- size()函数获得的是窗体中央区域的长、宽值;【即与width(),height()函数相同】
- rect()函数和geometry()函数相同,返回的是QRect对象,其获得的左上顶点值始终为(0,0),而获取的长宽值与geometry()函数相同;【rect()函数获取的长宽与width(),height()函数相同】
ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~