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
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);
    }

}
mainwindow.cpp

 

 

 

把QT程序打包成Windoew软件

How???

步骤一:点击左下角的电脑图标将 Debug 模式切换到 Release 模式。

步骤二:找到 release 模式构建的文件

步骤三:修改可执行程序图标。先把图标加到工程所在文件夹。然后在 pro 文件里面添加
RC_ICONS=serial_iocn.ico

步骤四:封包操作。需要用到 QT 的控制台,点击电脑左下角,在搜素栏搜索 qt,即可看到 qt 控制台,双击即可打开,如下图 :

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

 

 

 

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

 

posted on 2022-04-29 20:02  ccxwyyjy  阅读(98)  评论(0)    收藏  举报