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 = 0); ~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,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(); //更新控件 } 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
分类:
Qt-Widget
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 园子的第一款AI主题卫衣上架——"HELLO! HOW CAN I ASSIST YOU TODAY
· 【自荐】一款简洁、开源的在线白板工具 Drawnix