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 常用快捷键

相关推荐
娅娅梨6 分钟前
C++ 错题本--not found for architecture x86_64 问题
开发语言·c++
兵哥工控10 分钟前
MFC工控项目实例二十九主对话框调用子对话框设定参数值
c++·mfc
汤米粥11 分钟前
小皮PHP连接数据库提示could not find driver
开发语言·php
冰淇淋烤布蕾14 分钟前
EasyExcel使用
java·开发语言·excel
我爱工作&工作love我18 分钟前
1435:【例题3】曲线 一本通 代替三分
c++·算法
拾荒的小海螺21 分钟前
JAVA:探索 EasyExcel 的技术指南
java·开发语言
马剑威(威哥爱编程)1 小时前
哇喔!20种单例模式的实现与变异总结
java·开发语言·单例模式
娃娃丢没有坏心思1 小时前
C++20 概念与约束(2)—— 初识概念与约束
c语言·c++·现代c++
lexusv8ls600h1 小时前
探索 C++20:C++ 的新纪元
c++·c++20
lexusv8ls600h1 小时前
C++20 中最优雅的那个小特性 - Ranges
c++·c++20