QT学习笔记----day02

本文详细介绍了Qt中窗口组件的位置与大小管理,包括QLabel、QKeyEvent、QDialog等类的使用,以及如何处理窗口移动、大小改变、显示和关闭等事件。通过实例演示了如何实时更新窗口的位置与大小数据。
摘要由CSDN通过智能技术生成

三、实例三

接昨天实例,链接如下:
https://blog.csdn.net/LH_SMD/article/details/107823514
实例三效果如下:
在这里插入图片描述
代码效果:
main.cpp

#include "possizegui.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    PosSizeGui w;
    w.show();

    return a.exec();
}

possizegui.h

#ifndef POSSIZEGUI_H
#define POSSIZEGUI_H

#include <QDialog>
#include <QLabel>   //标签类
#include <QGridLayout>
#include <QKeyEvent>    //按键事件类
#include <QDebug>

class PosSizeGui : public QDialog
{
    Q_OBJECT

public:
    PosSizeGui(QWidget *parent = 0);
    ~PosSizeGui();

    QLabel *x_label;
    QLabel *y_label;
    QLabel *frameGeometry_label;
    QLabel *geometry_label;
    QLabel *rect_label;
    QLabel *pos_label;
    QLabel *frameSize_label;
    QLabel *size_label;
    QLabel *wh_label;

    void update_data();     //修改label上的位置大小数据

    void moveEvent(QMoveEvent *e);      //窗口移动事件处理函数
    void resizeEvent(QResizeEvent *e);  //窗口大小改变事件处理函数
    void showEvent(QShowEvent *e);      //窗口显示事件处理函数
    void closeEvent(QCloseEvent *e);    //窗口关闭事件处理函数
    void keyPressEvent(QKeyEvent *e);   //按键按下事件处理函数
//    void keyReleaseEvent(QKeyEvent *e); //按键释放事件处理函数
};

#endif // POSSIZEGUI_H

possizegui.cpp

#include "possizegui.h"

PosSizeGui::PosSizeGui(QWidget *parent)
    : QDialog(parent)
{
    this->setWindowTitle("组件位置大小相关");

    QLabel *label_1 = new QLabel("x():"); //x():获取窗口的x的坐标(包含任何窗口框架)
    QLabel *label_2 = new QLabel("y():"); //y():获取窗口Y的坐标
    QLabel *label_3 = new QLabel("frameGeometry():");//frameGeometry():相对于它的父对象包含任何窗口框架的窗口部件几何形状(有边框)
    QLabel *label_4 = new QLabel("geometry():"); //geometry():相对于它的父对象不包括窗口框架的窗口部件的几何形状 (无边框)
    QLabel *label_5 = new QLabel("rect():"); //rect():不包含任何窗口框架的窗口部件的内部几何形状
    QLabel *label_6 = new QLabel("pos():"); //pos():返回这个窗口部件在他父窗口部件中的位置
    QLabel *label_7 = new QLabel("frameSize():"); //frameSize():包含任何窗口框架部件的大小
    QLabel *label_8 = new QLabel("size():");//size():返回不包含任何窗口框架的窗口部件的大小
    QLabel *label_9 = new QLabel("wh():"); //wh():返回不包含任何窗口框架的窗口部件宽度


    x_label = new QLabel;
    y_label = new QLabel;
    frameGeometry_label = new QLabel;
    geometry_label = new QLabel;
    rect_label = new QLabel;
    pos_label = new QLabel;
    frameSize_label = new QLabel;
    size_label = new QLabel;
    wh_label = new QLabel;

    QGridLayout *glayout = new QGridLayout(this);
    glayout->addWidget(label_1,0,0);
    glayout->addWidget(x_label,0,1);
    glayout->addWidget(label_2,1,0);
    glayout->addWidget(y_label,1,1);

    glayout->addWidget(label_3,2,0);
    glayout->addWidget(frameGeometry_label,2,1);
    glayout->addWidget(label_4,3,0);
    glayout->addWidget(geometry_label,3,1);

    glayout->addWidget(label_5,4,0);
    glayout->addWidget(rect_label,4,1);
    glayout->addWidget(label_6,5,0);
    glayout->addWidget(pos_label,5,1);

    glayout->addWidget(label_7,6,0);
    glayout->addWidget(frameSize_label,6,1);
    glayout->addWidget(label_8,7,0);
    glayout->addWidget(size_label,7,1);

    glayout->addWidget(label_9,8,0);
    glayout->addWidget(wh_label,8,1);

    this->update_data();

//    this->move(QPoint(500,500));  //移动窗口到指定位置
}

void PosSizeGui::update_data()     //修改label上的位置大小数据
{
    qDebug() << "void PosSizeGui::update_data()" << endl;
    QString x_str = QString::number(this->x());     //QString::number()用于将基本类型转换为QString
    x_label->setText(x_str);
//    this->setGeometry(QRect &);  //设置组件位置大小,setLayout(NULL);

    QString y_str = QString::number(this->y());
    y_label->setText(y_str);

    QRect frameGeometry_rect = this->frameGeometry();  //有边框
    QString frameGeometry_str = QString::number(frameGeometry_rect.x())
            + "," + QString::number(frameGeometry_rect.y())
            + "," + QString::number(frameGeometry_rect.width())
            + "," + QString::number(frameGeometry_rect.height());
    frameGeometry_label->setText(frameGeometry_str);

    QRect geometry_rect = this->geometry();   //无边框
    QString geometry_str = QString::number(geometry_rect.x())
            + "," + QString::number(geometry_rect.y())
            + "," + QString::number(geometry_rect.width())
            + "," + QString::number(geometry_rect.height());
    geometry_label->setText(geometry_str);

    QRect rect_rect = this->rect();
    QString rect_str = QString::number(rect_rect.x())
            + "," + QString::number(rect_rect.y())
            + "," + QString::number(rect_rect.width())
            + "," + QString::number(rect_rect.height());
    rect_label->setText(rect_str);

    QPoint l_pos = this->pos();
    QString pos_str = QString::number(l_pos.x()) + "," + QString::number(l_pos.y());
    pos_label->setText(pos_str);

    QSize frameSize_size = this->frameSize();
    QString framesize_str = QString::number(frameSize_size.width()) + "," + QString::number(frameSize_size.height());
    frameSize_label->setText(framesize_str);

    QSize size_size = this->size();
    QString size_str = QString::number(size_size.width()) + "," + QString::number(size_size.height());
    size_label->setText(size_str);

//    this->setMinimumHeight();     //设置大小相关函数
//    this->setMinimumSize();       //设置最小大小
//    this->setMaximumSize();       //设置最大大小
//    this->setFixedSize();     //设置固定大小


    QString wh_str = QString::number(this->width()) + "," + QString::number(this->height());
    wh_label->setText(wh_str);
}

void PosSizeGui::moveEvent(QMoveEvent *e)      //窗口移动事件处理函数
{
    qDebug() << "void PosSizeGui::moveEvent(QMoveEvent *e)" << endl;
    this->update_data();
}

void PosSizeGui::resizeEvent(QResizeEvent *e)  //窗口大小改变事件处理函数
{
    qDebug() << "void PosSizeGui::resizeEvent(QResizeEvent *e)" << endl;
    this->update_data();
}

void PosSizeGui::showEvent(QShowEvent *e)      //窗口显示事件处理函数
{
    qDebug() << "void PosSizeGui::showEvent(QShowEvent *e)" << endl;
    this->update_data();
}

void PosSizeGui::closeEvent(QCloseEvent *e)    //窗口关闭事件处理函数
{
    qDebug() << "void PosSizeGui::closeEvent(QCloseEvent *e)" << endl;
}

void PosSizeGui::keyPressEvent(QKeyEvent *e)   //按键事件处理函数
{

}

PosSizeGui::~PosSizeGui()
{

}

实例三笔记:
QLabel类:代表标签,用于显示文本或者图像的窗口组件。
构造函数:
//缺省的构造函数
QLabel(QWidget *parent=0, Qt::WindowFlags f=0);

//构造时设置标签的字符串
QLabel(const QString &text, QWidget *parent=0, Qt::WindowFlags f=0);

常用函数:
QString text() const; 获取标签上的文本
const QPixmap *pixmap() const; 获取标签上的图像
void setAlignment(Qt::Alignment); 设置对齐方式


void setText(const QString &); 设置标签上的文本
void setPixmap(const QPixmap &); 设置标签上的图像

使用:
配合上前面的网格布局,最终显示效果如开篇效果:

 	QLabel *label_1 = new QLabel("x():"); //x():获取窗口的x的坐标(包含任何窗口框架)
    QLabel *label_2 = new QLabel("y():"); //y():获取窗口Y的坐标
    QLabel *label_3 = new QLabel("frameGeometry():");//frameGeometry():相对于它的父对象包含任何窗口框架的窗口部件几何形状(有边框)
    QLabel *label_4 = new QLabel("geometry():"); //geometry():相对于它的父对象不包括窗口框架的窗口部件的几何形状 (无边框)
    QLabel *label_5 = new QLabel("rect():"); //rect():不包含任何窗口框架的窗口部件的内部几何形状
    QLabel *label_6 = new QLabel("pos():"); //pos():返回这个窗口部件在他父窗口部件中的位置
    QLabel *label_7 = new QLabel("frameSize():"); //frameSize():包含任何窗口框架部件的大小
    QLabel *label_8 = new QLabel("size():");//size():返回不包含任何窗口框架的窗口部件的大小
    QLabel *label_9 = new QLabel("wh():"); //wh():返回不包含任何窗口框架的窗口部件宽度

 	x_label = new QLabel;
    y_label = new QLabel;
    frameGeometry_label = new QLabel;
    geometry_label = new QLabel;
    rect_label = new QLabel;
    pos_label = new QLabel;
    frameSize_label = new QLabel;
    size_label = new QLabel;
    wh_label = new QLabel;

    QGridLayout *glayout = new QGridLayout(this);
    glayout->addWidget(label_1,0,0);
    glayout->addWidget(x_label,0,1);
    glayout->addWidget(label_2,1,0);
    glayout->addWidget(y_label,1,1);

    glayout->addWidget(label_3,2,0);
    glayout->addWidget(frameGeometry_label,2,1);
    glayout->addWidget(label_4,3,0);
    glayout->addWidget(geometry_label,3,1);

    glayout->addWidget(label_5,4,0);
    glayout->addWidget(rect_label,4,1);
    glayout->addWidget(label_6,5,0);
    glayout->addWidget(pos_label,5,1);

    glayout->addWidget(label_7,6,0);
    glayout->addWidget(frameSize_label,6,1);
    glayout->addWidget(label_8,7,0);
    glayout->addWidget(size_label,7,1);

    glayout->addWidget(label_9,8,0);
    glayout->addWidget(wh_label,8,1);

QDialog类:对话框,一般用来实现那些只是暂时存在的用户界面
继承QWidget类
构造函数
QDialog(QWidget *parent = 0, Qt::WindowFlags f = 0);

常用函数
void setVisible(bool visible); 可见属性设置
void keyPressEvent(QKeyEvent *); 键盘事件函数
void closeEvent(QCloseEvent *); 对话框关闭事件
void showEvent(QShowEvent *); 对话框显示事件
void resizeEvent(QResizeEvent *); 改变对话框大小事件

使用:

void PosSizeGui::moveEvent(QMoveEvent *e)      //窗口移动事件处理函数
{
    qDebug() << "void PosSizeGui::moveEvent(QMoveEvent *e)" << endl;
    this->update_data();
}

void PosSizeGui::resizeEvent(QResizeEvent *e)  //窗口大小改变事件处理函数
{
    qDebug() << "void PosSizeGui::resizeEvent(QResizeEvent *e)" << endl;
    this->update_data();
}

void PosSizeGui::showEvent(QShowEvent *e)      //窗口显示事件处理函数
{
    qDebug() << "void PosSizeGui::showEvent(QShowEvent *e)" << endl;
    this->update_data();
}

void PosSizeGui::closeEvent(QCloseEvent *e)    //窗口关闭事件处理函数
{
    qDebug() << "void PosSizeGui::closeEvent(QCloseEvent *e)" << endl;
}

void PosSizeGui::keyPressEvent(QKeyEvent *e)   //按键事件处理函数
{

}

QWidget类:代表一般的窗口,其他窗口类都是从QWidget类继承出来的
他同时继承QObject类和QPaintDevice类
构造函数:
QWidget(QWidget *parent = 0, Qt::WindowFlags f = 0);
参数: parent 指向父窗口,如果这个参数为 0,则窗口就成为一个顶级窗口
参数 :f 是构造窗口的标志,主要用于控制窗口的类型和外观等,有以下常用值。
1)Qt::FramelessWindowHint:没有边框的窗口。
2)Qt::WindowStaysOnTopHint:总是最上面的窗口。
3)Qt::CustomizeWindowHint:自定义窗口标题栏,以下标志必须与这个标志一起使用才有效,否则窗口将有默认的标题栏。
4)Qt::WindowTitleHint:显示窗口标题栏。
5)Qt::WindowSystemMenuHint:显示系统菜单。
6)Qt::WindowMinimizeButtonHint:显示最小化按钮。
7)Qt::WindowMaximizeButtonHint:显示最大化按钮。
8)Qt::WindowMinMaxbuttonHint:显示最小化按钮和最大化按钮。
9)Qt::WindowCloseButtonHint:显示关闭按钮。

常用函数:
int x() const; //获取窗口的x坐标(包含任何窗口框架)
int y() const; //相对于它的父窗口部件的这个窗口部件的y坐标(包含任何窗口框架)

//相对于它的父对象包含任何窗口框架的窗口部件的几何形状
QRect frameGeometry() const;

//相对于它的父对象不包括窗口框架的窗口部件的几何形状
const QRect &geometry() const;

//不包含任何窗口框架的窗口部件的内部几何形状
inline QRect rect() const

QPoint pos() const; //返回这个窗口部件在它父窗口部件中的位置
QSize frameSize() const; //包含任何窗口框架的窗口部件的大小
QSize size() const; //返回不包含任何窗口框架的窗口部件的大小
inline int width() const; //返回不包含任何窗口框架的窗口部件宽度
inline int height() const; //返回不包括窗口框架的窗口部件的高度

使用:

	qDebug() << "void PosSizeGui::update_data()" << endl;
    QString x_str = QString::number(this->x());     //QString::number()用于将基本类型转换为QString
    x_label->setText(x_str);
//    this->setGeometry(QRect &);  //设置组件位置大小,setLayout(NULL);

    QString y_str = QString::number(this->y());
    y_label->setText(y_str);

    QRect frameGeometry_rect = this->frameGeometry();  //有边框
    QString frameGeometry_str = QString::number(frameGeometry_rect.x())
            + "," + QString::number(frameGeometry_rect.y())
            + "," + QString::number(frameGeometry_rect.width())
            + "," + QString::number(frameGeometry_rect.height());
    frameGeometry_label->setText(frameGeometry_str);

    QRect geometry_rect = this->geometry();   //无边框
    QString geometry_str = QString::number(geometry_rect.x())
            + "," + QString::number(geometry_rect.y())
            + "," + QString::number(geometry_rect.width())
            + "," + QString::number(geometry_rect.height());
    geometry_label->setText(geometry_str);

    QRect rect_rect = this->rect();
    QString rect_str = QString::number(rect_rect.x())
            + "," + QString::number(rect_rect.y())
            + "," + QString::number(rect_rect.width())
            + "," + QString::number(rect_rect.height());
    rect_label->setText(rect_str);

    QPoint l_pos = this->pos();
    QString pos_str = QString::number(l_pos.x()) + "," + QString::number(l_pos.y());
    pos_label->setText(pos_str);

    QSize frameSize_size = this->frameSize();
    QString framesize_str = QString::number(frameSize_size.width()) + "," + QString::number(frameSize_size.height());
    frameSize_label->setText(framesize_str);

    QSize size_size = this->size();
    QString size_str = QString::number(size_size.width()) + "," + QString::number(size_size.height());
    size_label->setText(size_str);

上述实例中,对话框的尺寸大小,说明如下:
先来看下面一张图片,应该一目了然:

在这里插入图片描述
结合程序,看下面图片说明:
在这里插入图片描述

通过上面的实例,应该掌握:
1.位置大小相关:带边框,不带边框,获取和设置
2.QLabel,QKeyEvent
3.窗口相关事件处理函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

all of the time

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值