步步高学习机进网站怎么做怎样不花钱做网站
- 作者: 五速梦信息网
- 时间: 2026年03月21日 10:08
当前位置: 首页 > news >正文
步步高学习机进网站怎么做,怎样不花钱做网站,公众号链接转wordpress,上海网站制作公司报价目录
一、对话框
1.1 消息对话框#xff08;QMessageBox#xff09;
1 消息对话框提供了一个模态的对话框#xff0c;用来提示用户信息#xff0c;或者询问用户问题并得到回答
2 基于属性版本的API
3 基于静态成员函数版本
4 对话框案例
1、ui界面 …目录
一、对话框
1.1 消息对话框QMessageBox
1 消息对话框提供了一个模态的对话框用来提示用户信息或者询问用户问题并得到回答
2 基于属性版本的API
3 基于静态成员函数版本
4 对话框案例
1、ui界面
2、头文件
3、源文件
练习完善登录框 form.h
widget.h
form.cpp
main.cpp
widget.cpp
form.ui
运行结果
1.2 字体对话框QFontDialog、颜色对话框QColorDialog、文件对话框QFileDialog
1.3 对话框案例文本编辑器
1 ui界面
2 头文件
3 源文件
二、发布软件
1 配置系统环境变量将QT安装路径中的相关bin目录放入系统环境变量中
2 将自己的程序以release的形式运行一次
3 将发布后的relsaes文件夹内的可执行程序复制到一个新的文件夹中
4 在新文件夹的空白处按shift右键 —-选择“在此处打开powershell窗口”
5 在窗口中输入指令windeployqt.exe .\可执行文件名.exe
6 此时就可以执行可执行程序也可以打包发给朋友
三、事件处理核心机制
3.1 事件处理简介
3.2 事件处理函数由来
3.3 鼠标和键盘事件
头文件
源文件
练习
1.Qt文本编辑实现字体和颜色的改变可进行打开读取和另存为的操作 widget.h
main.cpp
widget.cpp
widget.ui
演示
2.实现一个lable 通过键盘控制 wasd 实现上下左右移动
sbjp.h
main.cpp
sbjp.cpp
sbjp.ui
演示 一、对话框
消息对话框、字体对话框、颜色对话框、文件对话框
1.1 消息对话框QMessageBox
1 消息对话框提供了一个模态的对话框用来提示用户信息或者询问用户问题并得到回答
2 基于属性版本的API
1、使用该类调用构造函数构造一个类对象
2、调用成员函数exec进入执行态
3、对用户点击的按钮进行进一步处理即可通过对exec的返回值得到用户点击的按钮
QMessageBox::QMessageBox( //有参构造函数名QMessageBox::Icon icon, //图标const QString title, //对话框标题const QString text, //对话框提示信息文本QMessageBox::StandardButtons buttons NoButton, //对话框提供的按钮QWidget *parent nullptr) //父组件参数1的介绍是对话框提供的图标内容 值 描述
QMessageBox::NoIcon 0 没有任何图标的对话框
QMessageBox::Question 4 带一个问号的对话框
QMessageBox::Information 1 带一个i符号图标的对话框
QMessageBox::Warning 2 带一个感叹号图标的对话框
QMessageBox::Critical 3 带一个叉号图标的对话框参数4的介绍对话框提供的按钮Constant Value Description
QMessageBox::Ok 0x00000400 提供确定按钮
QMessageBox::Open 0x00002000 提供打开按钮.
QMessageBox::Save 0x00000800 提供保存按钮.
QMessageBox::Cancel 0x00400000 提供取消按钮.举个例子QMessageBox msgBox;msgBox.setText(The document has been modified.);msgBox.setInformativeText(Do you want to save your changes?);msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard | QMessageBox::Cancel);msgBox.setDefaultButton(QMessageBox::Save);int ret msgBox.exec();switch (ret) {case QMessageBox::Save:// Save was clickedbreak;case QMessageBox::Discard:// Dont Save was clickedbreak;case QMessageBox::Cancel:// Cancel was clickedbreak;default:// should never be reachedbreak;}
3 基于静态成员函数版本
1、由于静态成员函数独立于类对象而存在所以无需实例化对象直接通过类名进行调用
2、静态成员函数版本提供四个分别是information(), question(), warning(), and critical()
3、静态成员函数调用后之间展示对话框无需使用exec
3、解析其中warning()
[static] QMessageBox::StandardButton //函数返回值类型返回的是对话框上用户按下的按钮QMessageBox::warning( //函数名QWidget *parent, //父组件const QString title, //对话框标题const QString text, //对话框文本内容QMessageBox::StandardButtons buttons Ok, //提供的按钮QMessageBox::StandardButton defaultButton NoButton) //默认按钮
举个例子int ret QMessageBox::warning(this, tr(My Application),tr(The document has been modified.\nDo you want to save your changes?),QMessageBox::Save | QMessageBox::Discard| QMessageBox::Cancel,QMessageBox::Save); 4 对话框案例
1、ui界面 2、头文件 #ifndef WIDGET_H
#define WIDGET_H#include QWidget
#includeQMessageBox //消息对话框类
#includeQDebugQT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();private slots:void on_infoBtn_clicked();void on_warnBtn_clicked();private:Ui::Widget *ui;
};
#endif // WIDGET_H
3、源文件
#include widget.h
#include ui_widget.hWidget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui-setupUi(this);
}Widget::~Widget()
{delete ui;
}//信息按钮对应的槽函数
void Widget::on_infoBtn_clicked()
{//1、使用QMessageBox实例化一个类对象QMessageBox box(QMessageBox::Information, //图标信息, //对话框标题中午一起吃个饭, //对话框提示信息QMessageBox::Yes|QMessageBox::No, //对话框的提供的按钮this); //父组件box.setDefaultButton(QMessageBox::No); //将no设置成默认按钮//box.setDetailedText(啦啦啦拉拉阿拉啦);box.setButtonText(QMessageBox::No,拒绝);//2、执行对话框int ret box.exec();//3、对用户点击的按钮进行判断if(ret QMessageBox::Yes){qDebug()好的没问题老地方见;}else{qDebug()不好意思我已经有约了下次一定;}
}//警告按钮对应的槽函数
void Widget::on_warnBtn_clicked()
{//无需实例化对象直接调用静态成员函数即可int ret QMessageBox::warning(this, //父组件警告, //对话框标题放学别走等着哈, //对话框文本内容QMessageBox::Yes|QMessageBox::No, //提供的按钮QMessageBox::Yes); //默认选中的按钮//对用户点击的按钮进行判断if(ret QMessageBox::Yes){qDebug()等着就等着荤的还是素的尽你挑;}else{qDebug()你永远是我大哥;}
}
练习完善登录框 点击登录按钮后判断账号admin和密码123456是否一致如果匹配失败则弹出错误对话框文本内容“账号密码不匹配是否重新登录”给定两个按钮ok和cancel点击ok后会清除密码框中的内容继续进行登录如果点击cancel按钮则关闭界面。 如果账号和密码匹配则弹出信息对话框给出提示信息为“登录成功”,给出一个按钮ok点击ok后关闭整个登录界面跳转到其他界面 点击取消按钮后弹出问题对话框询问是否确定要退出登录给出两个按钮yes|no,点击yes则直接关闭整个登录界面如果点击no则进行进行登录 要求对象版和静态成员函数版至少各实现一个 form.h
#ifndef FORM_H
#define FORM_H#include QWidgetnamespace Ui {
class Form;
}class Form : public QWidget
{Q_OBJECTpublic:explicit Form(QWidget *parent nullptr);~Form();signals:void jump();
public slots:void jump_slot();private slots:void on_pushButton_clicked();private:Ui::Form *ui;
};#endif // FORM_Hwidget.h
#ifndef WIDGET_H
#define WIDGET_H#include QWidget
#include QPushButton
#include QDebug
#include QIcon
#include QLabel
#include QPixmap
#include QLineEdit
#include QMessageBox
class Widget : public QWidget
{Q_OBJECT //信号与槽的元对象
signals://自定义信号函数void jump();//void btn_1_clicked();public slots://自定义的槽函数void btn_1_clicked();void btn_2_clicked();void jump_slot();
public:Widget(QWidget *parent nullptr);~Widget();private:QLabel *lab2;QLabel *lab3;QLabel *lab1;QLineEdit *edit1;QLineEdit *edit2;QPushButton *btn1;QPushButton *btn2;
};
#endif // WIDGET_Hform.cpp
#include form.h
#include ui_form.hForm::Form(QWidget *parent) :QWidget(parent),ui(new Ui::Form)
{ui-setupUi(this);
}Form::~Form()
{delete ui;
}void Form::jump_slot()
{this-show();
}void Form::on_pushButton_clicked()
{emit jump();this-close();
}main.cpp
#include widget.h
#include form.h
#include QApplication
int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();Form m;QObject::connect(w,Widget::jump ,m,Form::jump_slot);QObject::connect(m,Form::jump ,w,Widget::jump_slot);return a.exec();
}widget.cpp
#include widget.h
#include form.h
Widget::Widget(QWidget *parent): QWidget(parent)
{this-setFixedSize(900, 800); //设置固定尺寸//3、窗口标题this-setWindowTitle(My First Window);//4、设置窗口的iconthis-setWindowIcon(QIcon(:/new/prefix1/icon/wodepeizhenshi.png));//5、设置背景色一般使用样式表完成this-setStyleSheet(background-color:rgb(226,227,228););//标签lab1 new QLabel(this);lab1-setGeometry(0, 0, 900, 458);lab1-setPixmap(QPixmap(:/new/prefix1/icon/logo1.png));lab1-setScaledContents(true);lab2 new QLabel(this);lab2-setGeometry(270, 500, 40, 40);lab2-setPixmap(QPixmap(:/new/prefix1/icon/userName.jpg));lab2-setScaledContents(true);lab3 new QLabel(this);lab3-setGeometry(270, 580, 40, 40);lab3-setPixmap(QPixmap(:/new/prefix1/icon/passwd.jpg));lab3-setScaledContents(true);//行编辑器//1、构造一个行编辑器构造时给定父组件edit1 new QLineEdit(this);edit2 new QLineEdit(this);edit1-setPlaceholderText(QQ/手机/邮箱); //设置编辑器的占位文本edit2-setPlaceholderText(密码);edit1-resize(200,40); //设置尺寸edit2-resize(200,40);edit1-move(350,500); //移动位置edit2-move(350,580);edit2-setEchoMode(QLineEdit::Password); //设置回显模式//按钮组件btn1 new QPushButton(登录, this);btn2 new QPushButton(取消, this);btn1-resize(110,60);btn1-move(320,650);btn2-resize(110,60);btn2-move(450,650);btn1-setIcon(QIcon(:/new/prefix1/icon/login.png));btn2-setIcon(QIcon(:/new/prefix1/icon/cancel.png));//使用qt5版本连接connect(btn1,QPushButton::clicked,this,Widget::btn_1_clicked);//使用qt4版本连接connect(btn2,SIGNAL(pressed()),this,SLOT(close()));
}Widget::~Widget()
{
}
void Widget::btn_1_clicked()
{if(edit1-text() admin edit2-text() 123456){//使用QMwssageBox实例化一个类对象QMessageBox msgbox1(QMessageBox::Information, //图标信息, //对话框标题登录成功, //对话框提示信息QMessageBox::Ok|QMessageBox::Cancel, //对黄框的提供的按钮this); //父组件msgbox1.setDefaultButton(QMessageBox::Ok); //将no设置成默认按钮 ,该按键会有蓝色框标识//msgbox.setDetailedText(啦啦啦啦); //很少会用到这个提示框//执行对话框int ret msgbox1.exec();//对用户点击的按钮进行判断if(ret QMessageBox::Ok){emit jump();this-close();}else{//使用QMwssageBox实例化一个类对象QMessageBox msgbox2(QMessageBox::Information, //图标问题, //对话框标题是否确定要退出登录, //对话框提示信息QMessageBox::Yes|QMessageBox::No, //对黄框的提供的按钮this); //父组件msgbox2.setDefaultButton(QMessageBox::Yes); //将no设置成默认按钮 ,该按键会有蓝色框标识//msgbox.setDetailedText(啦啦啦啦); //很少会用到这个提示框//执行对话框int ret msgbox2.exec();//对用户点击的按钮进行判断if(ret QMessageBox::Yes){this-close();}else{emit jump();this-close();}}}else{//无需实例化对象直接调用静态成员函数即可int ret QMessageBox::warning(this, //父组件警告, //对话框标题账号密码不匹配是否重新登录, //对话框文本内容QMessageBox::Ok|QMessageBox::Cancel, //提供的按钮QMessageBox::Ok); //默认选中的按钮//对用户点击的按钮进行判断if(ret QMessageBox::Ok){edit1-clear();edit2-clear();}else{this-close();}}
}void Widget::btn_2_clicked()
{this-close();
}
void Widget::jump_slot()
{this-show();
}form.ui 运行结果 1.2 字体对话框QFontDialog、颜色对话框QColorDialog、文件对话框QFileDialog
1、字体对话框可以使用QFontDialog类提供的静态成员函数getFont来完成当调用了该函数后就会弹出一个字体选择框该函数返回的是用户选择的字体如果用户取消了选择则参数1为假如果用户选择了字体则参数1的值为真所需类QFontDialog、QFont
[static] QFont //函数返回值类型是用户选择的字体 该函数是一个静态成员函数QFontDialog::getFont( //函数名bool *ok, //返回用户是否选中字体const QFont initial, //初始字体QWidget *parent nullptr, //父组件const QString title QString()) //对话框标题
举个例子bool ok;QFont font QFontDialog::getFont(ok, QFont(Times, 12), this);if (ok) {// font is set to the font the user selected} else {// the user canceled the dialog; font is set to the initial// value, in this case Times, 12.}2、颜色对话框可以使用QColorDialog类中的静态成员函数getColor来调取颜色对话框该函数返回用户选中的颜色如果用户选择了取消则返回一个非法的颜色可以通过成员函数isValid来进行判断
[static] QColor //返回用户选中的颜色 该函数是一个静态成员函数QColorDialog::getColor( //函数名const QColor initial Qt::white, //初始颜色QWidget *parent nullptr, //父组件const QString title QString()) //对话框标题
举个例子//调用静态成员函数获取系统中的颜色对话框QColor c QColorDialog::getColor(QColor(pink),this,选择颜色);//对选中的颜色判断合法性if(c.isValid()){//颜色合法直接使用即可//ui-textEdit-setTextColor©;ui-textEdit-setTextBackgroundColor©;}else{//颜色不合法QMessageBox::information(this,提示,您取消了选择颜色);}3、文件对话框可以通过QFileDialog类中的静态成员函数来获取要打开的文件路径所需类QFileDialog[static] QString //返回值类型是用户选中的文件的路径QFileDialog::getOpenFileName( //函数名QWidget *parent nullptr, //父组件const QString caption QString(), //对话框标题const QString dir QString(), //起始路径const QString filter QString(), //过滤器QString selectedFilter nullptr) //默认选中的过滤器注意该函数返回的是选中文件的路径过滤器如果有多个中间使用两个分号隔开Images (.png *.xpm .jpg);;Text files (.txt);;XML files (.xml)
举个例子QString fileName QFileDialog::getOpenFileName(this, tr(Open File),/home,tr(Images (.png *.xpm *.jpg)));获取保存文件路径的函数[static] QString QFileDialog::getSaveFileName(QWidget *parent nullptr, const QString caption QString(), const QString dir QString(), const QString filter QString()) 4、文件相关操作1 使用QFile类实例化一个对象通过该对象可以操作整个文件该类的构造函数需要给定文件的路径2 可以使用exists函数判断文件是否存在如果存在则可以对文件进行相关操作3 使用该类中的成员函数open函数用于打开文件打开时需要给定打开模式4 可以使用read、readLine、readAll从文件中读取数据使用write函数将数据写入文件5 使用成员函数close关闭文件6 所需类QFile
举个例子//1、实例化一个文件对象QFile file(fileName); //使用获取到的文件路径实例化一个文件对象后期对文件的操作都是基于该对象//2、判断文件是否存在if(!file.exists()){return;}//3、打开文件if(!file.open(QFile::ReadWrite)){return;}//4、读取文件中的内容QByteArray msg file.readAll();//将内容展示到ui界面ui-textEdit-setText(msg); //获取文本编辑器中的内容//ui-textEdit-toPlainText();//5、关闭文件file.close();
1.3 对话框案例文本编辑器
1 ui界面 2 头文件
#ifndef WIDGET_H
#define WIDGET_H#include QWidget
#includeQFont //字体类
#includeQFontDialog //字体对话框类
#includeQDebug
#includeQMessageBox //消息对话框类
#includeQColor //颜色类
#includeQColorDialog //颜色对话框类
#includeQFileDialog //文件对话框
#includeQFile //文件类QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();private slots:void on_fontBtn_clicked();void on_colorBtn_clicked();void on_openBtn_clicked();private:Ui::Widget *ui;
};
#endif // WIDGET_H
3 源文件
#include widget.h
#include ui_widget.hWidget::Widget(QWidget parent): QWidget(parent), ui(new Ui::Widget)
{ui-setupUi(this);
}Widget::~Widget()
{delete ui;
}//字体按钮对应的槽函数
void Widget::on_fontBtn_clicked()
{//调用QFontDialog类中的静态成员函数getFont函数来调取系统提供的字体对话框bool ok; //用于接受用户是否选中了字体QFont f QFontDialog::getFont(ok, //返回是否选中字体QFont(隶书, 10, 10, false), //初始字体this, //父组件选择字体); //对话框标题//将选中的字体进行使用if(ok){//选中了字体将字体设置到文本上//ui-textEdit-setFont(f);ui-textEdit-setCurrentFont(f);}else{//没选中字体QMessageBox::information(this, 提示, 您取消了选择字体);}
}//颜色按钮对应的槽函数
void Widget::on_colorBtn_clicked()
{//调用静态成员函数获取系统中的颜色对话框QColor c QColorDialog::getColor(QColor(pink), //初始颜色this, //父组件选择颜色); //对话框标题//对选中的颜色判断合法性if(c.isValid()){//颜色合法直接使用即可//ui-textEdit-setTextColor©;ui-textEdit-setTextBackgroundColor©;}else{//颜色不合法QMessageBox::information(this,提示,您取消了选择颜色);}
}//打开文件按钮对应的槽函数
void Widget::on_openBtn_clicked()
{//调用QFileDialog的静态成员函数getOpenFileName来获取选中文件的路径QString fileName QFileDialog::getOpenFileName(this, //父组件选择文件, //对话框标题./, //起始路径Image File(.png *.jpg bmp);;Text File(.txt);;All(.)); //过滤器//判断是否选中文件if(fileName.isNull()){QMessageBox::information(this,提示,您取消了选择文件);return;}//输出文件路径qDebug()fileName;//1、实例化一个文件对象QFile file(fileName); //使用获取到的文件路径实例化一个文件对象后期对文件的操作都是基于该对象//2、判断文件是否存在if(!file.exists()){return;}//3、打开文件if(!file.open(QFile::ReadWrite)){return;}//4、读取文件中的内容QByteArray msg file.readAll();//将内容展示到ui界面ui-textEdit-setText(msg);//获取文本编辑器中的内容//ui-textEdit-toPlainText();//5、关闭文件file.close();}
二、发布软件
1 配置系统环境变量将QT安装路径中的相关bin目录放入系统环境变量中 2 将自己的程序以release的形式运行一次 3 将发布后的relsaes文件夹内的可执行程序复制到一个新的文件夹中 4 在新文件夹的空白处按shift右键 —-选择“在此处打开powershell窗口” 5 在窗口中输入指令windeployqt.exe .\可执行文件名.exe 6 此时就可以执行可执行程序也可以打包发给朋友 三、事件处理核心机制
3.1 事件处理简介
- 什么是事件 (重点)事件是由窗口系统或者自身产生的用以响应所发生的 各类事情比如用户按下并释放了键盘或者鼠标、窗口因 暴露而需要重绘、定时器到时而应有所动作等等从某种意义上讲事件比信号更原始甚至可以认为大多 数信号其实都是由事件产生的。比如一个下压式按钮首先 感受到的是鼠标事件在进行必要的处理以产生按钮下沉 继而弹起的视觉效果之后才会发射 clicked()信号2. 如何处理事件 (重点)myWnd(自定义类) -继承- QWidget -继承- QObject 1 当事件发生时首先被调用的是QObject类中的虚函数event()其 QEvent型参数标识了具体的事件类型bool QObject:: event (QEvent* e){if (e mouseEvent){void QWidget::mousePressEvent (QMouseEvent* e)void QWidget:: mouseReleaseEvent (QMouseEvent* e)}if(e keyEvent){void QWidget::keyPressEvent (QMouseEvent* e)void QWidget:: keyReleaseEvent (QMouseEvent* e)}}2 作为QObject类的子类 QWidget类覆盖了其基类中的event()虚函数并根据具体事件调用具体事件处理函数void QWidget::mousePressEvent (QMouseEvent* e)void QWidget::mouseReleaseEvent (QMouseEvent* e)void QWidget::keyPressEvent (QMouseEvent* e)void QWidget:: keyReleaseEvent (QMouseEvent* e)void QWidget::paintEvent (QPaintEvent* e):3 而这些事件处理函数同样也是虚函数也可以被 QWidget类的子类覆盖以提供针对不同窗口部件类型的事件处理4 组件的使用者所关心的往往是定义什么样的槽处理什么样的信号而组件的实现者更关心覆盖哪些事件处理函数3.2 事件处理函数由来 QObject类 提供了那些可以重写的虚函数[virtual] bool QObject::event(QEvent *e) // 参数事件的类型QWidgets类 提供了那些可以重写的虚函数[override virtual protected] bool QWidget::event(QEvent *event)[virtual protected] void QWidget::keyPressEvent(QKeyEvent *event)[virtual protected] void QWidget::keyReleaseEvent(QKeyEvent *event)[virtual protected] void QWidget::mouseMoveEvent(QMouseEvent *event)[virtual protected] void QWidget::mousePressEvent(QMouseEvent *event)[virtual protected] void QWidget::mouseReleaseEvent(QMouseEvent *event)[virtual protected] void QWidget::mouseDoubleClickEvent(QMouseEvent *event)[virtual protected] void QObject::timerEvent(QTimerEvent *event)QPainter类 — 画家类void SimpleExampleWidget::paintEvent(QPaintEvent *){QPainter painter(this);painter.setPen(Qt::blue);painter.setFont(QFont(Arial, 30));painter.drawText(rect(), Qt::AlignCenter, Qt);}3.3 鼠标和键盘事件 头文件 #ifndef WIDGET_H #define WIDGET_H#include QWidget #includeQKeyEvent //键盘事件处理头文件 #includeQDebugQT_BEGIN_NAMESPACE namespace Ui { class Widget; } QT_END_NAMESPACEclass Widget : public QWidget {Q_OBJECTpublic:Widget(QWidget *parent nullptr);~Widget();void keyPressEvent(QKeyEvent *event) override; //键盘按下事件处理函数void keyReleaseEvent(QKeyEvent *event) override; //键盘抬起事件处理函数private:Ui::Widget *ui; }; #endif // WIDGET_H 源文件 #include widget.h #include ui_widget.hWidget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget) {ui-setupUi(this); }Widget::~Widget() {delete ui; }//键盘按下事件处理函数的定义 void Widget::keyPressEvent(QKeyEvent *event) {//qDebug()键盘被按下了event-text()键值为event-key();switch(event-key()){case W:{if(ui-label-y() 0-ui-label-height()){ui-label-move(ui-label-x(), this-height());}ui-label-move(ui-label-x(), ui-label-y()-1);}break;}}//键盘抬起事件处理韩寒说的定义 void Widget::keyReleaseEvent(QKeyEvent *event) {} 练习 1.Qt文本编辑实现字体和颜色的改变可进行打开读取和另存为的操作 widget.h #ifndef WIDGET_H #define WIDGET_H#include QMainWindow #include QFont //字体类 #include QFontDialog //字体对话框类 #include QDebug #include QMessageBox //消息对话框 #include QColor //颜色类 #include QColorDialog //颜色对话框类 #include QFileDialog //文件对话框 #include QFile //文明类 #include QTextCodec QT_BEGIN_NAMESPACE namespace Ui { class widget; } QT_END_NAMESPACEclass widget : public QMainWindow {Q_OBJECTpublic:widget(QWidget *parent nullptr);~widget();private slots:void on_fontBtn_clicked();void on_colorBtn_clicked();void on_openBtn_clicked();void on_pushButton_4_clicked();private:Ui::widget *ui; }; #endif // WIDGET_Hmain.cpp #include widget.h#include QApplicationint main(int argc, char *argv[]) {//解决汉字乱码问题QTextCodec *codec QTextCodec::codecForName(UTF-8);QTextCodec::setCodecForLocale(codec);QApplication a(argc, argv);widget w;w.show();return a.exec(); }widget.cpp #include widget.h #include ui_widget.hwidget::widget(QWidget parent): QMainWindow(parent), ui(new Ui::widget) {ui-setupUi(this); }widget::~widget() {delete ui; }//字体按钮的槽函数 void widget::on_fontBtn_clicked() {//调用QFontDialog类中的静态成员函数getFont函数来调取系统提供的对话框bool ok; //用于接收用户是否选中了字体QFont f QFontDialog::getFont(ok, //返回是否选中字体QFont(楷体,10,10,false), //初始字体this, //父组件选择字体); //对话框标题//将选中的字体进行使用if(ok) //选中了字体将字体设置到文本上{//ui-textEdit-setFont(f);ui-textEdit-setCurrentFont(f);}else //没选中字体{QMessageBox::information(this,提示,您取消了字体);} } //颜色按钮对应的槽函数 void widget::on_colorBtn_clicked() {//调用静态成员函数获取系统中的颜色对话框QColor c QColorDialog::getColor(QColor(pink),this,选择颜色);//对选中的颜色判断合法性if(c.isValid()){//颜色合法直接使用即可//ui-textEdit-setTextColor©;ui-textEdit-setTextBackgroundColor©;}else{//颜色不合法QMessageBox::information(this,提示,您取消了选择颜色);} } //打开文件按钮对应的槽函数 void widget::on_openBtn_clicked() {//调用QFileDialog的静态成员函数getOpenFileName来获取选中文件的路径QString fileName QFileDialog::getOpenFileName(this, //父组件选择文件, //对话框标题./, //起始路径Image File(.png *.jpg bmp);;Text File(.txt);;All(.)); //过滤器//判断是否选中文件if(fileName.isNull()){QMessageBox::information(this,提示,您取消了选择文件);return;}//输出文件路径qDebug() fileName;//1.实例化一个文件对象QFile file(fileName); //使用获取到的文件路径实例化一个文件对象后期对文件的操作都是基于该对象//2.判断文件是否存在if(!file.exists()){return;}//3.打开文件if(!file.open(QFile::ReadWrite)){return;}//4.读取文件中的内容QByteArray msg file.readAll();//5.将读取到的内容展示到ui界面ui-textEdit-setText(QString::fromLocal8Bit(msg));//6.关闭文件file.close();//获取文本编辑器中的内容返回是Qstring//ui-textEdit-toPlainText(); } //另存为文件按钮对应的槽函数 void widget::on_pushButton_4_clicked() {//调用QFileDialog的静态成员函数getOpenFileName来获取选中文件的路径QString fileName QFileDialog::getSaveFileName(this, //父组件选择文件, //对话框标题./, //起始路径Image File(*.png *.jpg bmp);;Text File(.txt);;All(.)); //过滤器//判断是否选中文件if(fileName.isNull()){QMessageBox::information(this,提示,您取消了选择文件);return;}//输出文件路径qDebug() fileName;//1.实例化一个文件对象QFile file(fileName); //使用获取到的文件路径实例化一个文件对象后期对文件的操作都是基于该对象//2.判断文件是否存在if(!file.exists()){return;}//3.打开文件if(file.open(QFile::ReadWrite|QFile::Truncate)){//获取文本编辑器中的内容返回是QstringQString msg ui-textEdit-toPlainText();file.write(msg.toLocal8Bit());QMessageBox::information(this,提示,文件保存成功);}else {QMessageBox::information(this,提示,文件保存失败);}//6.关闭文件file.close(); }widget.ui 演示 2.实现一个lable 通过键盘控制 wasd 实现上下左右移动 sbjp.h #ifndef SBJP_H #define SBJP_H#include QWidget #includeQKeyEvent //键盘事件处理头文件 #includeQDebug QT_BEGIN_NAMESPACE namespace Ui { class SBJP; } QT_END_NAMESPACEclass SBJP : public QWidget {Q_OBJECTpublic:SBJP(QWidget *parent nullptr);~SBJP(); public:void keyPressEvent(QKeyEvent *event) override; //键盘按下事件处理函数void keyReleaseEvent(QKeyEvent *event) override; //键盘抬起事件处理函数void sahbi(); private:Ui::SBJP *ui; }; #endif // SBJP_Hmain.cpp #include sbjp.h#include QApplicationint main(int argc, char *argv[]) {QApplication a(argc, argv);SBJP w;w.show();return a.exec(); }sbjp.cpp #include sbjp.h #include ui_sbjp.hSBJP::SBJP(QWidget *parent): QWidget(parent), ui(new Ui::SBJP) {ui-setupUi(this); }SBJP::~SBJP() {delete ui; } //键盘按下时间处理函数的定义 void SBJP::keyPressEvent(QKeyEvent *event) {//qDebug()键盘被按下了event-text()键值为event-key();//qDebug() this-height();switch(event-key()){case W:{if(ui-label-y() 0-ui-label-height()){ui-label-move(ui-label-x(), this-height());}ui-label-move(ui-label-x(), ui-label-y()-10);qDebug() ui-label-pos().x() ui-label-pos().y();}break;case S:{if(ui-label-y() this-height()ui-label-height()){ui-label-move(ui-label-x(),0);}ui-label-move(ui-label-x(), ui-label-y()10);qDebug() ui-label-pos().x() ui-label-pos().y();}break;case A:{if(ui-label-x() 0-ui-label-width()){ui-label-move(this-width(),ui-label-y());}ui-label-move(ui-label-x()-10, ui-label-y());qDebug() ui-label-pos().x() ui-label-pos().y();}break;case D:{if(ui-label-x() this-width()){ui-label-move(0-ui-label-width(),ui-label-y());}ui-label-move(ui-label-x()10, ui-label-y());qDebug() ui-label-pos().x() ui-label-pos().y();}break;}} //键盘抬起事件处理函数说的定义 void SBJP::keyReleaseEvent(QKeyEvent *event) {} sbjp.ui 演示
- 上一篇: 布吉网站建设wordpress 最近登录
- 下一篇: 部队网站建设李静做的化妆品网站
相关文章
-
布吉网站建设wordpress 最近登录
布吉网站建设wordpress 最近登录
- 技术栈
- 2026年03月21日
-
布吉建设网站快捷的网站建设排行榜
布吉建设网站快捷的网站建设排行榜
- 技术栈
- 2026年03月21日
-
不做百度了 百度做的网站手机网站建设的价格
不做百度了 百度做的网站手机网站建设的价格
- 技术栈
- 2026年03月21日
-
部队网站建设李静做的化妆品网站
部队网站建设李静做的化妆品网站
- 技术栈
- 2026年03月21日
-
部门网站 法规制度 建设情况五金机械设备网站模板建设
部门网站 法规制度 建设情况五金机械设备网站模板建设
- 技术栈
- 2026年03月21日
-
部门网站的开发 意义登录中国沈阳网站
部门网站的开发 意义登录中国沈阳网站
- 技术栈
- 2026年03月21日






