前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Qt各类位置信息函数

Qt各类位置信息函数

作者头像
mythsman
发布2022-11-14 14:55:00
6860
发布2022-11-14 14:55:00
举报
文章被收录于专栏:mythsman的个人博客

本节主要演示获取窗口位置以及显示区域坐标以及大小的函数,分析其中的区别,主要是 x(),y(),frameGeometry(),pos(),geometry(),width(),height(),rect(),size()函数,这些函数是由QWidget 提供。

以下是演示的工程源码,具体分析结合在源码中。

Dialog.pro(必备)

代码语言:javascript
复制
#-------------------------------------------------
#
# Project created by QtCreator 2015-10-24T17:32:35
#
#-------------------------------------------------

QT       += core gui

greaterThan(QT_MAJOR_VERSION, 4): QT += widgets

TARGET = Dialog
TEMPLATE = app

SOURCES += main.cpp
        dialog.cpp

HEADERS  += dialog.h

dialog.h

代码语言:javascript
复制
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>
#include<QLabel>
#include<QGridLayout>
class Dialog : public QDialog
{
    Q_OBJECT

public:
    Dialog(QWidget *parent = 0);
    ~Dialog();
public:
    //基本的布局
    QGridLayout *layout;
    QLabel *xLabel,*yLabel,*frameGeometryLabel,*posLabel,*geometryLabel,*widthLabel,*heightLabel,*rectLabel,*sizeLabel;
    QLabel *xLabelv,*yLabelv,*frameGeometryLabelv,*posLabelv,*geometryLabelv,*widthLabelv,*heightLabelv,*rectLabelv,*sizeLabelv;
    //刷新时调用的函数
    void updateLabel();
protected:
    //以下是继承自QWidget的函数,分别响应对话框移动事件和对话框大小调整事件
    void moveEvent(QMoveEvent *);
    void resizeEvent(QResizeEvent *);
};

#endif // DIALOG_H

dialog.cpp

代码语言:javascript
复制
#include "dialog.h"

Dialog::Dialog(QWidget *parent)
    : QDialog(parent)
{
    //基本布局
    setWindowTitle("Show position");
    layout=new QGridLayout(this);
    xLabel=new QLabel;
    xLabel->setText("x():");
    yLabel=new QLabel;
    yLabel->setText("y():");
    frameGeometryLabel=new QLabel;
    frameGeometryLabel->setText("frameGeometry():");
    posLabel=new QLabel;
    posLabel->setText("pos():");
    geometryLabel=new QLabel;
    geometryLabel->setText("geometry():");
    widthLabel=new QLabel;
    widthLabel->setText("width():");
    heightLabel=new QLabel;
    heightLabel->setText("height():");
    rectLabel=new QLabel;
    rectLabel->setText("rect():");
    sizeLabel=new QLabel;
    sizeLabel->setText("size():");

    xLabelv=new QLabel;
    yLabelv=new QLabel;
    frameGeometryLabelv=new QLabel;
    posLabelv=new QLabel;
    geometryLabelv=new QLabel;
    widthLabelv=new QLabel;
    heightLabelv=new QLabel;
    rectLabelv=new QLabel;
    sizeLabelv=new QLabel;

    layout->addWidget(xLabel,0,0);
    layout->addWidget(xLabelv,0,1);
    layout->addWidget(yLabel,1,0);
    layout->addWidget(yLabelv,1,1);
    layout->addWidget(frameGeometryLabel,2,0);
    layout->addWidget(frameGeometryLabelv,2,1);
    layout->addWidget(posLabel,3,0);
    layout->addWidget(posLabelv,3,1);
    layout->addWidget(geometryLabel,4,0);
    layout->addWidget(geometryLabelv,4,1);
    layout->addWidget(widthLabel,5,0);
    layout->addWidget(widthLabelv,5,1);
    layout->addWidget(heightLabel,6,0);
    layout->addWidget(heightLabelv,6,1);
    layout->addWidget(rectLabel,7,0);
    layout->addWidget(rectLabelv,7,1);
    layout->addWidget(sizeLabel,8,0);
    layout->addWidget(sizeLabelv,8,1);
    updateLabel();
}

Dialog::~Dialog()
{

}

void Dialog::updateLabel(){
    //调用QString匿名对象的setNum()方法将int转化为QString
    xLabelv->setText(QString().setNum(x()));
    yLabelv->setText(QString().setNum(y()));

    QString tmp;
    tmp=QString().setNum(frameGeometry().x())+","+
            QString().setNum(frameGeometry().y())+","+
            QString().setNum(frameGeometry().width())+","+
            QString().setNum(frameGeometry().height());
    frameGeometryLabelv->setText(tmp);

    tmp=QString().setNum(pos().x())+","+
            QString().setNum(pos().y());
    posLabelv->setText(tmp);

    tmp=QString().setNum(geometry().x())+","+
            QString().setNum(geometry().y())+","+
            QString().setNum(geometry().width())+","+
            QString().setNum(geometry().height());
    geometryLabelv->setText(tmp);

    widthLabelv->setText(QString().setNum(width()));
    heightLabelv->setText(QString().setNum(height()));

    tmp=QString().setNum(rect().x())+","+
            QString().setNum(rect().y())+","+
            QString().setNum(rect().width())+","+
            QString().setNum(rect().height());
    rectLabelv->setText(tmp);

    tmp=QString().setNum(size().width())+","+QString().setNum(size().height());
    sizeLabelv->setText(tmp);
}

void Dialog::moveEvent(QMoveEvent *){
    updateLabel();
}

void Dialog::resizeEvent(QResizeEvent *){
    updateLabel();
}

main.cpp

代码语言:javascript
复制
#include "dialog.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Dialog w;
    w.show();
    return a.exec();
}

程序截图

各个函数的意义简图

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Dialog.pro(必备)
  • dialog.h
  • dialog.cpp
  • main.cpp
  • 程序截图
  • 各个函数的意义简图
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档