114.QTimer类和QWidget类

2024-01-13 16:20
文章标签 114 qtimer qwidget

本文主要是介绍114.QTimer类和QWidget类,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

一、QTimer类

定时器使用举例:

二、QWidget类 

2.1设置父对象

2.2窗口位置

2.3窗口尺寸

2.4窗口标题和图标

2.5信号

2.6槽函数

示例代码:


一、QTimer类

   QTimer 是 Qt 中用于实现定时器的类。它可以在一定的时间间隔内发射信号,用于执行一些特定的操作。要使用它,只需创建一个QTimer类对象,然后调用其 start() 函数开启定时器,此后QTimer对象就会周期性的发出 timeout() 信号。我们先来了解一下这个类的相关API。

// 构造函数
// 如果指定了父对象, 创建的堆内存可以自动析构
QTimer::QTimer(QObject *parent = nullptr);// 设置定时器时间间隔为 msec 毫秒
// 默认值是0,一旦窗口系统事件队列中的所有事件都已经被处理完,一个时间间隔为0的QTimer就会触发
void QTimer::setInterval(int msec);
// 获取定时器的时间间隔, 返回值单位: 毫秒
int QTimer::interval() const;// 根据指定的时间间隔启动或者重启定时器, 需要调用 setInterval() 设置时间间隔
[slot] void QTimer::start();
// 启动或重新启动定时器,超时间隔为msec毫秒。
[slot] void QTimer::start(int msec);
// 停止定时器。
[slot] void QTimer::stop();// 设置定时器精度
/*
参数: - Qt::PreciseTimer -> 精确的精度, 毫秒级- Qt::CoarseTimer  -> 粗糙的精度, 和1毫秒的误差在5%的范围内, 默认精度- Qt::VeryCoarseTimer -> 非常粗糙的精度, 精度在1秒左右
*/
void QTimer::setTimerType(Qt::TimerType atype);
Qt::TimerType QTimer::timerType() const;	// 获取当前定时器的精度// 如果定时器正在运行,返回true; 否则返回false。
bool QTimer::isActive() const;// 判断定时器是否只触发一次
bool QTimer::isSingleShot() const;
// 设置定时器是否只触发一次, 参数为true定时器只触发一次, 为false定时器重复触发, 默认为false
void QTimer::setSingleShot(bool singleShot);

定时器使用举例:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QTimer>
#include <QTime>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//创建定时器对象QTimer* timer=new QTimer(this);//修改定时器对象的精度timer->setTimerType(Qt::PreciseTimer);//按钮点击事件connect(ui->loopBtn,&QPushButton::clicked,this,[=](){//启动定时器if(timer->isActive()){timer->stop();//关闭定时器ui->loopBtn->setText("开始");}else{ui->loopBtn->setText("关闭");timer->start(1000);//1000ms=1s}});connect(timer,&QTimer::timeout,this,[=](){QTime tm=QTime::currentTime();//格式化当前得到的系统时间QString tmstr=tm.toString("hh:mm:ss.zzz");//设置要显示的时间ui->curTime->setText(tmstr);});//发射一次信号connect(ui->onceBtn,&QPushButton::clicked,this,[=](){//获取2s以后的系统时间QTimer::singleShot(2000,this,[=](){QTime tm=QTime::currentTime();//格式化当前得到的系统时间QString tmstr=tm.toString("hh:mm:ss.zzz");//设置要显示的时间ui->onceTime->setText(tmstr);});});
}MainWindow::~MainWindow()
{delete ui;
}

这段代码创建了一个简单的Qt窗口应用程序,其中包含了两个按钮("开始"和"关闭"按钮,分别由ui->loopBtn表示),以及两个标签(ui->curTimeui->onceTime表示当前时间和一次性定时器的时间)。这个应用程序使用了QTimer类来实现定时功能。

下面是代码的主要功能和流程:

  1. 创建了一个 QTimer 对象 timer,并设置了其精度为 Qt::PreciseTimer
  2. 通过 lambda 表达式连接 "开始"/"关闭" 按钮的点击事件,以实现定时器的启动和停止。
  3. 连接 timertimeout 信号到 lambda 表达式,每次定时器超时时更新当前时间标签 ui->curTime
  4. 连接 "一次性" 按钮的点击事件,使用 QTimer::singleShot 实现一次性的定时器,延迟2秒后更新一次 ui->onceTime 标签。

这个应用程序演示了 QTimer 的基本用法,用于处理定时事件和一次性定时操作。当用户点击 "开始" 按钮时,定时器启动,每秒更新一次当前时间。点击 "一次性" 按钮时,延迟2秒后更新一次一次性时间。点击 "关闭" 按钮时,定时器停止。

需要确保在 Qt 项目中添加了 QTimer 头文件的引用。这段代码在构造函数中完成了信号和槽的连接,并在析构函数中释放了 ui 对象。

二、QWidget类 

        QWidget类是所有窗口类的父类(控件类是也属于窗口类), 并且QWidget类的父类的QObject, 也就意味着所有的窗口类对象只要指定了父对象, 都可以实现内存资源的自动回收。

2.1设置父对象

// 构造函数
QWidget::QWidget(QWidget *parent = nullptr, Qt::WindowFlags f = Qt::WindowFlags());// 公共成员函数
// 给当前窗口设置父对象
void QWidget::setParent(QWidget *parent);
void QWidget::setParent(QWidget *parent, Qt::WindowFlags f);
// 获取当前窗口的父对象, 没有父对象返回 nullptr
QWidget *QWidget::parentWidget() const;

2.2窗口位置

//------------- 窗口位置 -------------
// 得到相对于当前窗口父窗口的几何信息, 边框也被计算在内
QRect QWidget::frameGeometry() const;
// 得到相对于当前窗口父窗口的几何信息, 不包括边框
const QRect &geometry() const;
// 设置当前窗口的几何信息(位置和尺寸信息), 不包括边框
void setGeometry(int x, int y, int w, int h);
void setGeometry(const QRect &);// 移动窗口, 重新设置窗口的位置
void move(int x, int y);
void move(const QPoint &);

2.3窗口尺寸

//------------- 窗口尺寸 -------------
// 获取当前窗口的尺寸信息
QSize size() const
// 重新设置窗口的尺寸信息
void resize(int w, int h);
void resize(const QSize &);
// 获取当前窗口的最大尺寸信息
QSize maximumSize() const;
// 获取当前窗口的最小尺寸信息
QSize minimumSize() const;
// 设置当前窗口固定的尺寸信息
void QWidget::setFixedSize(const QSize &s);
void QWidget::setFixedSize(int w, int h);
// 设置当前窗口的最大尺寸信息
void setMaximumSize(const QSize &);
void setMaximumSize(int maxw, int maxh);
// 设置当前窗口的最小尺寸信息
void setMinimumSize(const QSize &);
void setMinimumSize(int minw, int minh);// 获取当前窗口的高度    
int height() const;
// 获取当前窗口的最小高度
int minimumHeight() const;
// 获取当前窗口的最大高度
int maximumHeight() const;
// 给窗口设置固定的高度
void QWidget::setFixedHeight(int h);
// 给窗口设置最大高度
void setMaximumHeight(int maxh);
// 给窗口设置最小高度
void setMinimumHeight(int minh);// 获取当前窗口的宽度
int width() const;
// 获取当前窗口的最小宽度
int minimumWidth() const;
// 获取当前窗口的最大宽度
int maximumWidth() const;
// 给窗口设置固定宽度
void QWidget::setFixedWidth(int w);
// 给窗口设置最大宽度
void setMaximumWidth(int maxw);
// 给窗口设置最小宽度
void setMinimumWidth(int minw);

2.4窗口标题和图标

//------------- 窗口图标 -------------
// 得到当前窗口的图标
QIcon windowIcon() const;
// 构造图标对象, 参数为图片的路径
QIcon::QIcon(const QString &fileName);
// 设置当前窗口的图标
void setWindowIcon(const QIcon &icon);//------------- 窗口标题 -------------
// 得到当前窗口的标题
QString windowTitle() const;
// 设置当前窗口的标题
void setWindowTitle(const QString &);

2.5信号

// QWidget::setContextMenuPolicy(Qt::ContextMenuPolicy policy);
// 窗口的右键菜单策略 contextMenuPolicy() 参数设置为 Qt::CustomContextMenu, 按下鼠标右键发射该信号
[signal] void QWidget::customContextMenuRequested(const QPoint &pos);
// 窗口图标发生变化, 发射此信号
[signal] void QWidget::windowIconChanged(const QIcon &icon);
// 窗口标题发生变化, 发射此信号
[signal] void QWidget::windowTitleChanged(const QString &title);

2.6槽函数

//------------- 窗口显示 -------------
// 关闭当前窗口
[slot] bool QWidget::close();
// 隐藏当前窗口
[slot] void QWidget::hide();
// 显示当前创建以及其子窗口
[slot] void QWidget::show();
// 全屏显示当前窗口, 只对windows有效
[slot] void QWidget::showFullScreen();
// 窗口最大化显示, 只对windows有效
[slot] void QWidget::showMaximized();
// 窗口最小化显示, 只对windows有效
[slot] void QWidget::showMinimized();
// 将窗口回复为最大化/最小化之前的状态, 只对windows有效
[slot] void QWidget::showNormal();//------------- 窗口状态 -------------
// 判断窗口是否可用
bool QWidget::isEnabled() const; // 非槽函数
// 设置窗口是否可用, 不可用窗口无法接收和处理窗口事件
// 参数true->可用, false->不可用
[slot] void QWidget::setEnabled(bool);
// 设置窗口是否可用, 不可用窗口无法接收和处理窗口事件
// 参数true->不可用, false->可用
[slot] void QWidget::setDisabled(bool disable);
// 设置窗口是否可见, 参数为true->可见, false->不可见
[slot] virtual void QWidget::setVisible(bool visible);

示例代码:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>MainWindow::MainWindow(QWidget *parent): QMainWindow(parent), ui(new Ui::MainWindow)
{ui->setupUi(this);//设置窗口的最大尺寸//setMaximumSize(600,600);//设置窗口的最小尺寸//setMinimumSize(300,300);//设置窗口的固定尺寸//setFixedSize(500,500);//设置窗口标题setWindowTitle("xinwei");//给显示的窗口设置图标setWindowIcon(QIcon("D:\\我的简历\\微信图片_20240112145734.jpg"));connect(this,&MainWindow::windowTitleChanged,this,[=](const QString &title){qDebug()<<"新的标题:"<<title;});connect(this,&MainWindow::windowIconChanged,this,[=](const QIcon &icon){qDebug()<<"当前窗口的图标被修改了";});setContextMenuPolicy(Qt::CustomContextMenu);connect(this,&MainWindow::customContextMenuRequested,this,[=](const QPoint &pos){QMenu meun;meun.addAction("西红柿");meun.addAction("黄瓜");meun.addAction("西瓜");meun.exec(QCursor::pos());});
}MainWindow::~MainWindow()
{delete ui;
}void MainWindow::on_moveButt_clicked()
{QRect rect=this->frameGeometry();move(rect.topLeft()+QPoint(10,20));
}void MainWindow::on_positionBut_clicked()
{QRect rect=this->frameGeometry();qDebug()<<"左上角:"<<rect.topLeft();qDebug()<<"右上角:"<<rect.topRight();qDebug()<<"左下角:"<<rect.bottomLeft();qDebug()<<"右下角:"<<rect.bottomRight();qDebug()<<"宽度:"<<rect.width();qDebug()<<"高度:"<<rect.height();
}void MainWindow::on_geomeryBto_clicked()
{int x=100+rand()%500;int y=100+rand()%500;int width=this->width()+10;int height=this->height()+10;setGeometry(x,y,width,height);
}void MainWindow::on_motiButton_clicked()
{setWindowTitle("你好,世界");setWindowIcon(QIcon("D:\\我的简历\\微信图片_20240112145725.jpg"));
}

这篇关于114.QTimer类和QWidget类的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/602074

相关文章

QT:QWidget 控件属性的介绍

控件属性介绍 🌴enabled 状态属性🌴geometry 几何属性示例一:改变控件尺寸示例二:更变控件位置window frame 的影响 🌴windowTitle 窗口标题🌴windowIcon 窗口图标🌴 qrc机制🌴windowOpacity 窗口透明度🌴cursor 修改鼠标显示样式示例一:通过编辑区直接修鼠标显示样式示例二:通过代码的方式设置鼠标在控件的显示效果示例

Flink实例(114):自定义时间和窗口的操作符(十三)自定义窗口分配器之设定窗口开始与结束时刻

1. 自定义窗口分配器(flink1.11.2) package com.atguigu.exercise.ETL.caiutilimport java.text.SimpleDateFormatimport java.utilimport java.util.{Collections, Date}import org.apache.flink.api.common.Executio

关于QWidget和QDialog窗体居中的问题

最近开发中,遇到了窗体不能居中的问题,看了网上的很多文章,窗口居中,无非都是move至窗口的中心目标; 有两种方式, 一种在构造函数中直接计算中心坐标; 另一种是在窗口show后再move至相应坐标。但是自己在构造函数中添加了对应的句子以后,窗体不在窗口的(0,0)点显示,反而在右下角显示,自己很是郁闷。网上的两种方法,基本操作如下: 方法一:在窗口(QWidget类及派生类)的构造函数中

【SGU】 114. Telecasting station 中位数

传送门:【SGU】 114. Telecasting station 题目分析:一个位置多个城市可以看成多个城市在同一位置,然后就可以求中位数了,易知最优的位置一定在中位数上。 代码如下 : #include <map>#include <vector>#include <cstdio>#include <cstring>#include <iostream>

leetcode 114:二叉树展开为链表

二叉树的题,使用递归的方式 TreeNode *last(TreeNode*root){while(root->right!=NULL){root=root->right;}return root;}TreeNode *fla(TreeNode *root){if(root==NULL)return NULL;if(root->left==NULL&&root->right==NULL)re

Python酷库之旅-第三方库Pandas(114)

目录 一、用法精讲 501、pandas.DataFrame.mode方法 501-1、语法 501-2、参数 501-3、功能 501-4、返回值 501-5、说明 501-6、用法 501-6-1、数据准备 501-6-2、代码示例 501-6-3、结果输出 502、pandas.DataFrame.pct_change方法 502-1、语法 502-2、参数 5

Qt是不是经常写个QWidget输入参数?

发现Qt自带的一个输入控件QInputDialog类 QInputDialog类提供了一个简单方便的对话框,用于从用户获取单个值。 输入值可以是字符串、数字或列表中的项。必须设置一个标签来告诉用户他们应该输入什么。 提供了五个静态方便函数:getText()、getMultiLineText()、getInt()、getDouble()和getItem()。所有的函数都可以以类似的方式使用

qtimer 测试研究

------------------------------------------------------------ author: hjjdebug date: 2024年 08月 25日 星期日 09:58:23 CST description: qtimer 测试研究 ------------------------------------------------------------

QTimer备忘

1、定时器是在当前线程中执行的,实际上,它处于当前线程的事件循环中,如果想定时器放在单独的线程中执行,可以借助于moveToThread实现。 你可以把QTimer看作是一个能够产生定时事件的对象。当你启动一个QTimer时,你实际上是在告诉事件循环:“请在指定的时间后向我发送一个定时器超时事件(Timer Timeout Event)”。当事件循环检测到这个时间已经到达,它就会创建一个定时器超

Qt-QWidget的windowIcon属性(14)

目录 描述 相关API 使用 并不需要在堆上创建  不要带中文路径 运行观察 不要使用绝对路径 描述 这个其实就是你打开窗口的左上角那个图标,这个就是用来设置那个的 相关API 使用   创建一个新的项目,如下,添加一个设置图片的代码  并不需要在堆上创建  要注意的是,这个对象并不需要使用堆来创建,因为不影响 不要带中文路径 还需要知