QT
窗口的显示
- 内嵌窗口
依附于某一个大的窗口,作为了大窗口的一部分
大窗口就是这个内嵌窗口的父窗口
父窗口显示的时候, 内嵌的窗口也就被显示出来了
- 不内嵌窗口
这类窗口有边框,有标题栏
需要调用函数才可以显示

(内嵌窗口)

(不内嵌窗口)

QDialog类型的窗口特点
#if 1 //创建窗口对象,没有给w对象指定父对象,这个窗口是一个独立窗口 //要是显示这个独立窗口必须要进行show()操作 TestWidget* w = new TestWidget; //显示当前窗口 w->show(); #else //explicit TestWidget(QWidget *parent = nullptr); //如果创建一个窗口对象的时候给其指定了父对象,这个对象就不是一个独立窗口 //这样的话当前父窗口显示的时候,子窗口就一并被显示出来了 //这时候子窗口是没有边框的 TestWidget* w = new TestWidget(this); #endif #if 0 //创建对话框窗口 TestDialog* dlg = new TestDialog; //非模态 dlg->show(); #else //创建对话框窗口 TestDialog* dlg = new TestDialog; //模态 //阻塞程序的执行 dlg->exec();

QT中的坐标体系
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QPushButton> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //this->move(100, 100); //创建一个按钮,让这个按钮作为当前创建的子控件 QPushButton* btnA = new QPushButton(this); //移动按钮的位置 btnA->move(10,10); //给按钮设置固定大小 btnA->setFixedSize(200, 200); //创建第二个按钮,让这个按钮作为当前创建的子控件 QPushButton* btnB = new QPushButton(btnA); //移动按钮的位置 btnB->move(10,10); //给按钮设置固定大小 btnB->setFixedSize(100, 100); //创建第三个按钮,让这个按钮作为当前创建的子控件 QPushButton* btnC = new QPushButton(btnB); //移动按钮的位置 btnC->move(10,10); //给按钮设置固定大小 btnC->setFixedSize(50, 50); } MainWindow::~MainWindow() { delete ui; }

QT的日志输出




QString 和 QByteArray类的区别
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //(唐僧)有(3)个徒弟,分别是(孙悟空),(猪八戒),(沙僧) QString str = QString("(%1)有(%2)个徒弟,分别是(%3),(%4),(%5)") .arg("唐僧").arg(3).arg("孙悟空").arg("猪八戒").arg("沙僧"); qDebug() << "字符串的值: " << str; //计算对象中的字符串的长度 //长度是字符个数,一个汉字算一个字符 QString tmp = "hhh菜"; //长度是字符串占用的字节数,一个汉字3个字节 QByteArray tmp2="hhh菜"; qDebug() << "QString length: " << tmp.length(); qDebug() << "QByteArray length" << tmp2.length(); } MainWindow::~MainWindow() { delete ui; }

使用QVariant 对QT中标准类型数据进行处理
mainwindow.h
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); //两个变量进行加法运算,变量可能是整形,也可能是字符串 QVariant dataPlus(QVariant a, QVariant b); private: Ui::MainWindow *ui; }; #endif // MAINWINDOW_H
mainwindow.cpp
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //整形数 int value = dataPlus(10, 20).toInt(); //字符串 QString str = dataPlus("hello", " ccx").toString(); qDebug() << "int value:" << value; qDebug() << "string value:" << str; } MainWindow::~MainWindow() { delete ui; } QVariant MainWindow::dataPlus(QVariant a, QVariant b) { QVariant ret; //判断当前参数的类型是字符串还是整数型 if(a.type() == QVariant::Int && b.type() == QVariant::Int) { ret = QVariant(a.toInt() + b.toInt()); } else if(a.type() == QVariant::String && b.type() == QVariant::String) { ret.setValue(a.toString() + b.toString()); } return ret; }

QDate
mainwindow.cpp
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //获取当前的日期 QDate d = QDate::currentDate(); //第一种方式: qDebug() << "year: " << d.year() << ", moth:" << d.month() << ",day:" << d.day(); //第二种方式: -2000-01-01 QString str = d.toString("yyyy-MM-dd"); qDebug() << "datestr" << str; }

QTime

光标放到类名上按键盘上的 Alt + Enter。
#include "mainwindow.h" #include "ui_mainwindow.h" #include <QDebug> #include <QDate> #include <QTime> #include <QElapsedTimer> #include <QDateTime> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); //获取当前的日期 QDate d = QDate::currentDate(); //第一种方式: qDebug() << "year: " << d.year() << ", moth:" << d.month() << ",day:" << d.day(); //第二种方式: -2000-01-01 QString str = d.toString("yyyy-MM-dd"); qDebug() << "datestr" << str; //获取当前时间 QTime curtime = QTime::currentTime(); //方式1 qDebug() << "hour:" << curtime.hour() << ", minute: " << curtime.minute() << "seccond:" << curtime.second() << ", millisecond:" << curtime.msec(); //方式2 QString strtm = curtime.toString("hh:mm:ss.zzz"); qDebug() << "格式化日期:" << strtm; //统计函数运行的时间 QElapsedTimer tt; tt.start(); randNumbers(100); int ms = tt.elapsed(); qDebug() << "函数执行所用的时间长度为:" << ms << "毫秒"; } MainWindow::~MainWindow() { delete ui; } void MainWindow::randNumbers(int count) { srand(time(NULL)); for(int i = 0; i<count; ++i) { int num = rand() % 1000; qDebug() << num; } }
QDateTime
QWidget

QDialog






界面
#ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QMainWindow> #include <QLabel> #include <QImage> #include <QTimer> //#include "resource_minitor.h" QT_BEGIN_NAMESPACE namespace Ui { class MainWindow; } QT_END_NAMESPACE class MainWindow : public QMainWindow { Q_OBJECT public: MainWindow(QWidget *parent = nullptr); ~MainWindow(); private: Ui::MainWindow *ui; // resource_minitor *p_res; QTimer *monitor_timer__; private slots: //void on_Label_board_linkActivated(const QString &link); void show_Label_board(); void show_info(); }; #endif // MAINWINDOW_H
#include "mainwindow.h" #include "ui_mainwindow.h" #include "testwidget.h" #include <QApplication> #include <QPushButton> #include <QProcess> #define MB (1024 * 1024) MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindow) { ui->setupUi(this); QMainWindow mw; //p_res = new resource_minitor(this); //connect(p_res, &resource_minitor::get_resource__end, this, &MainWindow::show_Label_board); monitor_timer__ = new QTimer(this); connect(monitor_timer__, &QTimer::timeout, this, &MainWindow::show_info); monitor_timer__->start(2000); //show pictures QPixmap pix(":/hhh.png"); QPixmap dest=pix.scaled(ui->Label_video->size(),Qt::KeepAspectRatio); ui->Label_video->setPixmap(dest); ui->stackedWidget->setCurrentIndex(0); connect(ui->win1, &QPushButton::clicked, this , [=]() { ui->stackedWidget->setCurrentIndex(0); }); connect(ui->win2, &QPushButton::clicked, this , [=]() { ui->stackedWidget->setCurrentWidget(ui->page_2); }); QPushButton button("Quit"); QObject::connect(&button, &QPushButton::clicked, &QApplication::quit); button.show(); } MainWindow::~MainWindow() { delete ui; } void MainWindow::show_Label_board() { QString a = "dsfs"; ui->Label_board->setText(a); } void MainWindow::show_info() { QProcess process; static double m_cpu_total__; static double m_cpu_use__ = 0; double t_cpu_use__ = 0; char strt[30]= "asdasda"; process.start("cat /proc/stat"); process.waitForFinished(); QString str = process.readLine(); str.replace("\n",""); str.replace(QRegExp("( ){1,}")," "); auto lst = str.split(" "); if(lst.size() > 3) { double use = lst[1].toDouble() + lst[2].toDouble() + lst[3].toDouble(); double total = 0; for(int i = 1;i < lst.size();++i) total += lst[i].toDouble(); if(total - m_cpu_total__ > 0) { t_cpu_use__ = (use - m_cpu_use__) / (total - m_cpu_total__) * 100.0; m_cpu_total__ = total; m_cpu_use__ = use; } sprintf(strt, "cpu_rate:%0.2f", t_cpu_use__); ui->Label_board->setText(strt); } }

把QT程序打包成Windoew软件
How???
步骤一:点击左下角的电脑图标将 Debug 模式切换到 Release 模式。
步骤二:找到 release 模式构建的文件
步骤三:修改可执行程序图标。先把图标加到工程所在文件夹。然后在 pro 文件里面添加
RC_ICONS=serial_iocn.ico
步骤四:封包操作。需要用到 QT 的控制台,点击电脑左下角,在搜素栏搜索 qt,即可看到 qt 控制台,双击即可打开,如下图 :

我们需要电脑桌面上创建一个新的文件夹,注意千万不要有中文路径。然后把 .exe 文件拷贝到我们新创建的文件夹里面,在控制台进入可执行文件所在的目录。


步骤五:使用 windeployqt 工具把库加到我们新创建的这个文件夹里面。
格式:windeployqt Serial.exe
浙公网安备 33010602011771号