当前位置: 首页 > article >正文

Qt工程文件分离、Qtimer定时器、Qt Creator 常用快捷键

Qt 工程文件分离

不含 UI 的文件分离

以堆栈窗体的代码为例。
在这里插入图片描述

firstpagewidget.h
#ifndef FIRSTPAGEWIDGET_H
#define FIRSTPAGEWIDGET_H

#include <QtWidgets>				// 记得修改

class firstPageWidget : public QWidget
{
    Q_OBJECT
public:
    explicit firstPageWidget(QWidget *parent = 0);

signals:

public slots:

};

#endif // FIRSTPAGEWIDGET_H
firstpagewidget.cpp
#include "firstpagewidget.h"

firstPageWidget::firstPageWidget(QWidget *parent) :
    QWidget(parent)
{
    QWidget *firstPageWidget = new QWidget;
    QPushButton *btn1 = new QPushButton("Page 1", this);		// 记得改 this
        // button 在后期可能实现较多的逻辑,需要将其分离出来
}
widget.cpp
#include "widget.h"
#include "firstpagewidget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
{
    firstPageWidget *first = new firstPageWidget;
    QWidget *secondPageWidget = new QWidget;
    QWidget *thirdPageWidget = new QWidget;

	// 去新分离出的文件中定义 button
    QPushButton *btn2 = new QPushButton("Page 2", secondPageWidget);
    QPushButton *btn3 = new QPushButton("Page 3", thirdPageWidget);

    QStackedWidget *stackedWidget = new QStackedWidget;
    stackedWidget->addWidget(first);
    stackedWidget->addWidget(secondPageWidget);
    stackedWidget->addWidget(thirdPageWidget);


//    QListWidget *listWidget = new QListWidget;
//    QListWidgetItem *firstItem = new QListWidgetItem(tr("First"), listWidget);
//    QListWidgetItem *secondItem = new QListWidgetItem(tr("Sencond"), listWidget);
//    QListWidgetItem *thirdItem = new QListWidgetItem(tr("Third"), listWidget);


//    listWidget->insertItem(0, firstItem);
//    listWidget->insertItem(1, secondItem);
//    listWidget->insertItem(2, thirdItem);

    QListWidget *listWidget = new QListWidget;
    listWidget->addItem(tr("First"));
    listWidget->addItem(tr("Second"));
    listWidget->addItem(tr("Third"));


    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(listWidget, 1);
    layout->addWidget(stackedWidget, 3);
    this->setLayout(layout);

    connect(listWidget, SIGNAL(currentRowChanged(int)), \
    		stackedWidget, SLOT(setCurrentIndex(int)));
    this->resize(960, 600);

}

Widget::~Widget()
{
}

带 UI 的文件分离

以 UI 实现堆栈窗体为例。
在这里插入图片描述

form.cpp
#include "form.h"
#include "ui_form.h"

Form::Form(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Form)
{
    ui->setupUi(this);

    ui->pushButton->setText("Page 1");		// 先往 UI界面 拖入一个 pushButton,然后写此行
    // 其他逻辑
}

Form::~Form()
{
    delete ui;
}
widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QtWidgets>
#include "form.h"
//#include "form2.h"
//#include "form3.h"

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
    Form form1;
//    Form2 form2;
//    Form3 form3;
};

#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    f1 = new Form;
//    f2 = new Form2;
//    f3 = new Form3;

    ui->stackedWidget->addWidget(f1);

    QObject::connect(ui->listWidget, SIGNAL(currentRowChanged(int)), \
                                        ui->stackedWidget, SLOT(setCurrentIndex(int)));
}

Widget::~Widget()
{
    delete ui;
}

QTimer 定时器

QTimer(QObject * parent = 0);  
		// parent 可以传界面的指针,但是没有父子窗体关系,仅用作内存管理
    	// 建议参数填上 this,否则需要在析构函数中 delete

void	start(int msec);  		// 参数为 ms,定时一次,永久生效
void	stop();  				// 停止定时器


Signals:
void	timeout();


// 一次定时
void QTimer::singleShot(int msec, const QObject *receiver, const char *member) [static]
    receiver:接收者
	member:执行函数		

1s = 1000ms 		1ms = 1000μs  		1μs = 1000ns

在这里插入图片描述

💡

做一个时间显示 Label / LCDNumber,增加“开始”和“结束”按钮,点击开始,每 1s 记录一次时间。

QDateTime

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

QDateTime time = QDateTime::currentDateTime();				// 获取系统此刻的日期和时间
QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd");	// 将系统时间转换成字符串类型

// QTime 同理。

QTime

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

QLCDNumber

在这里插入图片描述
在这里插入图片描述

实现

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

widget.h
#ifndef WIDGET_H
#define WIDGET_H

#include <QtWidgets>

namespace Ui {
class Widget;
}

class Widget : public QWidget
{
    Q_OBJECT

public:
    explicit Widget(QWidget *parent = 0);
    ~Widget();

private:
    Ui::Widget *ui;
    QTimer *timer;

public slots:
    void mySlot();
    void recvSlot(QString);

signals:
    void sendSignal(QString);

private slots:
    void on_startBtn_clicked();			// 自动生成的槽
    void on_stopBtn_clicked();			// 自动生成的槽
};

#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);
    timer = new QTimer(this);			// 必须填上 this,否则需要在析构函数中 delete
    connect(timer, SIGNAL(timeout()), this, SLOT(mySlot()));
    connect(this, SIGNAL(sendSignal(QString)), this, SLOT(recvSlot(QString)));
}

void Widget::mySlot()
{
    QTime time = QTime::currentTime();
    QString str = time.toString("hh:mm:ss");
    
//    QDateTime time = QDateTime::currentDateTime();    
//	  QString str = time.toString("yyyy-MM-dd hh:mm:ss dddd"); 
    
    emit sendSignal(str);
}

void Widget::recvSlot(QString str)
{
    ui->lcdNumber->setDigitCount(12);		// 设置显示的数字位数
    ui->lcdNumber->display(str);
}

Widget::~Widget()
{
    delete ui;
}

void Widget::on_startBtn_clicked()			// 自动生成的槽函数
{
    timer->start(1000);			// 自加内容
}

void Widget::on_stopBtn_clicked()			// 自动生成的槽函数
{
    timer->stop();				// 自加内容
}

在这里插入图片描述

Qt Creator 常用快捷键

在这里插入图片描述


http://www.kler.cn/a/163398.html

相关文章:

  • 快速掌握序列化工具:Protobuf Boost.Serialization
  • docker镜像文件导出导入
  • 封装的数字滚动组件的实现代码
  • 教程:FFmpeg结合GPU实现720p至4K视频转换
  • Kubernetes-编排工具篇-01-Kustomize与Helm对比
  • 量化交易系统开发-实时行情自动化交易-数据采集流程
  • jsp 个人网站系统Myeclipse开发mysql数据库web结构java编程计算机网页项目
  • Hazel引擎学习(十二)
  • C++初阶-string类的模拟实现
  • Linux中的文件系统
  • 26、pytest使用allure解读
  • 12.8 作业
  • 基于ssm志愿者招募网站源码和论文
  • JS中call()、apply()、bind()改变this指向的原理
  • Ultimate VFX
  • css中2D和3D的区别
  • ELK(五)—集群搭建
  • Linux--学习记录(2)
  • Web学习路线
  • 【ET8】0.ET8入门-ET框架介绍
  • 交付《啤酒游戏经营决策沙盘》的项目
  • vue2 el-input里实现打字机 效果
  • 深入理解 Promise:前端异步编程的核心概念
  • 29 水仙花数
  • 【后端学前端学习记录】学习计划
  • 【Azure 架构师学习笔记】- Azure Databricks (2) -集群