三、实例三
接昨天实例,链接如下:
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.窗口相关事件处理函数