南安网站定制,网站建设基础课件,wordpress模板资源,佛山网站建设专业主修课程一、对话框
消息对话框、字体对话框、颜色对话框、文件对话框
1.1消息对话框 主要分为这四类对话及一种NoIcon无图标对话 而对话框也分为两种实现方式#xff0c;一种为基于属性分开初始化的方式#xff0c;这种方式更灵活#xff0c;更多元#xff0c;需要对exec的返回值…一、对话框
消息对话框、字体对话框、颜色对话框、文件对话框
1.1消息对话框 主要分为这四类对话及一种NoIcon无图标对话 而对话框也分为两种实现方式一种为基于属性分开初始化的方式这种方式更灵活更多元需要对exec的返回值进行判断才能得知是点击哪个按钮需要写出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 DescriptionQMessageBox::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;}
静态成员函数与之相比会更简洁无需实例化对象直接通过类名调用提供了information(), question(), warning(), critical()。无需使用exec直接展示对话框但与上一种方式相比也会更局限
[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); 目前对于登录框的完善已经基本完成
1.2 字体对话框QFontDialog、颜色对话框QColorDialog、文件对话框QFileDialog
字体对话框用来更改对话内字体大小通过对ok值的判断将用户选中的字体格式导入选中字体
可使用setCurrentFont或者setFont来对选中区域或全部区域进行更改
[static] QFont //函数返回值类型是用户选择的字体 该函数是一个静态成员函数QFontDialog::getFont( //函数名bool *ok, //返回用户是否选中字体const QFont initial, //初始字体QWidget *parent nullptr, //父组件const QString title QString()) //对话框标题
颜色对话框与字体对话框相似也是用来更改字体或字体背景颜色的
可以使用QColorDialog类中的静态成员函数getColor来调取颜色对话框
该函数返回用户选中的颜色如果用户选择了取消则返回一个非法的颜色可以通过成员函数isValid来进行判断
[static] QColor //返回用户选中的颜色 该函数是一个静态成员函数QColorDialog::getColor( //函数名const QColor initial Qt::white, //初始颜色QWidget *parent nullptr, //父组件const QString title QString()) //对话框标题
文件对话框对于文件的操作分为读写出了Open之外还有相似的Save类 [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)));
文件相关操作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.配置环境变量将两个bin文件配置到系统环境变量中 2.之后将程序release一次并将准备发布的文件夹内的可执行文件放到一个新文件夹中
3.在当前文件夹下调用终端
4.使用windeployqt.exe .\可执行文件名.exe命令即可将文件发布
三、事件处理机制
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 组件的使用者所关心的往往是定义什么样的槽处理什么样的信号而组件的实现者更关心覆盖哪些事件处理函数
事件处理函数的由来是有QObject类提供可改写的虚函数而QWidget类覆盖了继承而来的虚函数并提供了一批用于处理事件的时间处理函数也是虚函数这也意味着它们也可以被子类覆盖根据不同情况重写时间处理函数。
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);}
例如使用太阳左右移的示例便能看出
#include form.h
#include ui_form.hForm::Form(QWidget *parent) :QWidget(parent),ui(new Ui::Form)
{ui-setupUi(this);this - setWindowTitle(WeiFeng Talking Room);this - resize(831,840);//接收栏edit1 new QTextEdit(this);edit1 - resize(801,615);//edit1-setFixedHeight(30);edit1 - move(15,15);//发送栏edit2 new QTextEdit(this);edit2 - resize(edit1 - width(),165);edit2 - move(edit1 - x(),edit1 -height()45);//上传按键btn1 new QPushButton(上传, this);btn1 - resize(70,30);btn1 - move(edit1 - x() ,edit1-y() edit1-height());connect(btn1,QPushButton::clicked,this,Form::on_openBtn_clicked);//下载按键btn2 new QPushButton(下载, this);btn2 - resize(btn1 - size());btn2 - move(btn1 -x()btn1 - width() ,btn1 - y());connect(btn2,QPushButton::clicked,this,Form::on_saveBtn_clicked);btn3 new QPushButton(设置字体, this);btn3 - resize(btn1 - size());btn3 - move(btn2 -x()btn2 - width() ,btn1 - y());connect(btn3,QPushButton::clicked,this,Form::on_fontBtn_clicked);btn4 new QPushButton(设置颜色, this);btn4 - resize(btn1 - size());btn4 - move(btn3 -x()btn3 - width() ,btn1 - y());connect(btn4,QPushButton::clicked,this,Form::on_colorBtn_clicked);
}Form::~Form()
{delete ui;
}void Form::jump_slot(){this-show();
}void Form::on_fontBtn_clicked()
{//调用QFontDialog类的静态成员函数getFont函数来调取系统提供的字体对话框bool ok;//用于接受用户是否选选中的字体QFont f QFontDialog::getFont(ok,QFont(隶书,10,10,false),this,选择字体);//将选中的字体进行使用if(ok){edit1 - setCurrentFont(f);}else{QMessageBox::information(this,提示 ,您取消了选择字符 );}
}void Form::on_colorBtn_clicked()
{QColor c QColorDialog :: getColor(QColor(pink),this,color);if(c.isValid()){edit1 - setTextColor(c);//edit1 - setTextBackgroundColor(c);}else{QMessageBox::information(this,提示,您取消了选择颜色);}}void Form::on_openBtn_clicked()
{QString fileNameQFileDialog::getOpenFileName(this,上传,F:\\Shanghai\\QT\\QTfile\\QT DAY3,Image File(*.png *jpg *bmp);;Text File(*.txt);;All(*.*));if(fileName.isNull()){QMessageBox::information(this,提示,已取消);}else{qDebug() fileName;QFile file(fileName);if(!file.exists()){return;}else{}//以读写方式打开if(!file.open(QFile::ReadWrite)){return;}else{qDebug() fileName;QFile file(fileName);if(!file.exists()){return;}else{}if(!file.open(QFile::ReadWrite)){return;}else{}edit2 -clear();QFileInfo fileInfo(fileName);QString suffix fileInfo.suffix();if (suffix txt) {QByteArray msg file.readAll();edit1 -setText(QString::fromLocal8Bit(msg));} else if (suffix png || suffix jpg || suffix bmp) {edit1-insertHtml(QString(img src%1 /).arg(fileName));}}}
}void Form::on_saveBtn_clicked()
{QString fileName QFileDialog::getSaveFileName(this, 下载,F:\\Shanghai\\QT\\QTfile\\QT DAY3,Image File(*.png *jpg *bmp);;Text File(*.txt);;All(*.*));if (fileName.isNull()) {QMessageBox::information(this, 提示, 已取消);return;}QFile file(fileName);// 以只写方式打开文件如果文件不存在它会被创建。if (!file.open(QFile::WriteOnly | QFile::Text)) {QMessageBox::warning(this, 保存文件, 无法保存文件 fileName : file.errorString());return;}edit2 -clear();qDebug() fileName;QFileInfo fileInfo(fileName);QString suffix fileInfo.suffix(); // 获取文件后缀if (suffix txt) {QFile file(fileName);if (!file.open(QFile::WriteOnly | QFile::Text)) {return;}QTextStream out(file);out edit1-toPlainText();file.close();} else if (suffix png || suffix jpg || suffix bmp) {QPixmap pixmap this-grab(); // 抓取当前窗口的内容pixmap.save(fileName); // 保存为图片} else {}
}