学习一下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()));
}