Qt实战案例(18)——Qt位置相关函数汇总实例

目录

    • 0、位置函数介绍
    • 一、项目介绍
    • 二、项目基本配置
    • 三、UI界面设计
    • 四、主程序实现
      • 4.1 dialog.h头文件
      • 4.2 dialog.cpp源文件
    • 五、效果演示
    • 六、总结

0、位置函数介绍

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();//更新标签
}

五、效果演示

完整效果如下:
Qt实战案例(18)——Qt位置相关函数汇总实例_第1张图片

如果没有看懂的话,完整代码可以参考:https://download.csdn.net/download/didi_ya/74442876

六、总结

  1. x(),y(),pos()函数的作用都是获得整个窗体左上角的坐标位置;【以电脑屏幕为基准,电脑屏幕左上角为(0,0)
  2. frameGeometry()函数获得的是整个窗体的左上顶点的位置坐标和长、宽值;【左上顶点的坐标值与x(),y()函数相同,长宽为外轮廓长宽
  3. geometry()函数获得的是窗体内中央区域的左上顶点坐标和长、宽值;【左上顶点为窗体内部的顶点坐标,长宽为内轮廓长宽(即中央区域)
  4. width(),height()函数获得的是中央区域的长、宽值;【同geometry()函数获取的长宽
  5. size()函数获得的是窗体中央区域的长、宽值;【即与width(),height()函数相同
  6. rect()函数和geometry()函数相同,返回的是QRect对象,其获得的左上顶点值始终为(0,0),而获取的长宽值与geometry()函数相同;【rect()函数获取的长宽与width(),height()函数相同

ok,以上便是本文的全部内容了,如果对你有所帮助,记得点个赞哟~

你可能感兴趣的