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

Qt 工程文件分离

不含 UI 的文件分离

以堆栈窗体的代码为例。

firstpagewidget.h
cpp 复制代码
#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
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
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
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
cpp 复制代码
#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
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
cpp 复制代码
#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
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 常用快捷键

相关推荐
终极定律17 分钟前
qt:输入控件操作
开发语言·qt
FL162386312925 分钟前
[C++]使用纯opencv部署yolov12目标检测onnx模型
c++·opencv·yolo
JenKinJia32 分钟前
Windows10配置C++版本的Kafka,并进行发布和订阅测试
开发语言·c++
煤炭里de黑猫34 分钟前
Lua C API :lua_insert 函数详解
开发语言·lua
笨鸟笃行36 分钟前
爬虫第七篇数据爬取及解析
开发语言·爬虫·python
编程乐趣37 分钟前
一文掌握DeepSeek本地部署+Page Assist浏览器插件+C#接口调用+局域网访问!全攻略来了!
开发语言·c#
java1234_小锋42 分钟前
一周学会Flask3 Python Web开发-response响应格式
开发语言·python·flask·flask3
Jelena1577958579242 分钟前
使用Java爬虫获取1688 item_get_company 接口的公司档案信息
java·开发语言·爬虫
java1234_小锋44 分钟前
一周学会Flask3 Python Web开发-flask3模块化blueprint配置
开发语言·python·flask·flask3
wen__xvn1 小时前
每日一题洛谷P1914 小书童——凯撒密码c++
数据结构·c++·算法