嵌入式项目之QT页面制作

发布于:2025-05-26 ⋅ 阅读:(35) ⋅ 点赞:(0)

学习一下QT的基本语法以及基本操作

基本语法

设置title名字

this->setWindowTitle("xxxx");

设置具体字体型号

Qfont f("仿宋" , 14); //创建字体对象
ui->lineEdit->setFont(f);

按钮上设置图片

QIcon con("D:\\xxx\\xxx\\xxx\\xxx.png");
ui->xxxButton->setIcon(con);

改变按钮颜色

ui->equalButton->setStyleSheet("background:blue");

定时器事件

1、使用QObject成员函数
this->startTimer(Timeout); //返回成功创建的定时器id
设置timerEvent事件函数
timerEvent(QTimerEvent *event)
killTimer(id)

2、使用Qtimer这个类  
#include <QTimer>
QTimer->start(Timeout);
connect(timer , &QTimer::timeout , this ,&Widget::timeoutSlot);
timer->stop()

用Qt做一个简单的notepad

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->newaction , &QAction::triggered , this , &MainWindow::newactionslot);
    connect(ui->openaction , &QAction::triggered , this , &MainWindow::openactionslot);
    connect(ui->saveoption , &QAction::triggered , this , &MainWindow::saveactionslot);
}

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


void MainWindow::newactionslot()
{
    ui->textEdit->clear();
    this->setWindowTitle("新建文件夹.txt");
}

void MainWindow::openactionslot()
{
    QString fileName = QFileDialog::getOpenFileName(this, "选择一个文件",
                                                    QCoreApplication::applicationFilePath(),
                                                    "*.cpp , *.c , *.txt");
    if(fileName.isEmpty())
    {
        QMessageBox::warning(this , "警告" , "请选择一个文件");
    }else{
        //qDebug() << fileName;
        QFile file(fileName);         //创建文件对象
        file.open(QIODevice::ReadOnly);
        QByteArray ba = file.readAll();
        ui->textEdit->setText(QString(ba));
        file.close();
    }
}

void MainWindow::saveactionslot()
{
    QString fileName = QFileDialog::getSaveFileName(this, "选择一个文件",
                                                    QCoreApplication::applicationFilePath());
    if(fileName.isEmpty())
    {
        QMessageBox::warning(this , "警告" , "请选择一个文件");
    }else{
        QFile file(fileName);
        file.open(QIODevice::WriteOnly);
        //ui->textEdit->toPlainText(); //显示
        QByteArray ba;
        ba.append(ui->textEdit->toPlainText().toUtf8());
        file.write(ba);
        file.close();
        QMessageBox::information(this, "保存成功", "文件已成功保存!");
    }
}

上述代码不能实现CTRL+S自动保存功能,接下 来要实现其功能,在QT中都被封装成事件,我们要重写虚函数,实现热键功能

void MainWindow::keyPressEvent(QKeyEvent * k)
{
    if(k->modifiers() == Qt::ControlModifier && k->key() == QT::key_S)
    {
        saveactionslot();
    }
}

QT网络部分

为了兼容Windows和Linux,QT将网络接口封装成类。这样既可以在Linux和Windows运行。

在QT里面使用网络要在.pro文件的第一行加上network。

Client端

#include <QTcpSocket>
#include "widget.h"
#include "ui_widget.h"

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

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

void Widget::on_cancelButton_clicked()
{
    this->close();
}


void Widget::on_connectButton_clicked()
{
    QString ip = ui->iplineEdit->text();
    QString port = ui->portlineEdit->text();

    // qDebug() << ip;
    // qDebug() << port;

    socket->connectToHost(QHostAddress(ip), port.toShort());

    qDebug() << ip;
    qDebug() << port;

    connect(socket , &QTcpSocket::connected , [this](){
        QMessageBox::information(this , "连接提示" , "连接服务器成功");
    });
    connect(socket , &QTcpSocket::disconnected , [this](){
        QMessageBox::warning(this , "连接提示" , "连接异常 网络断开");
    });
}

Server端

服务器端需要包含两个头文件

#include <QTcpServer>
#include <QTcpSocket>
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);
    server = new QTcpServer;
    server->listen(QHostAddress::AnyIPv4 , PORT);

    connect(server , &QTcpServer::newConnection , this , &Widget::newclienthandler);
}

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

void Widget::newclienthandler()
{
    //建立TCP连接
    QTcpSocket*socket = server->nextPendingConnection();
    //socket->peerAddress();
    //socket->peerPort();

    ui->IPlineEdit->setText(socket->peerAddress().toString());
    ui->IPlineEdit->setText(QString::number(socket->peerPort()));
}


网站公告

今日签到

点亮在社区的每一天
去签到