QT怎么学,qt多久能学会

  QT怎么学,qt多久能学会

  永远的神干货盘点

  一、QPainter绘图1.整个绘图系统基于Qpainter,QPianterDevice和QPainEngine三个类

  2 .问画师用来执行绘制的操作,QPaintDevice是一个二维空间的抽象,这个二维空间允许q画师在上面进行绘制,也就是q画师的工作空间。

  3.QPiantEngine提供了画笔(QPianter)在不同设备上绘制统一的接口100 .QPaintEngine类应用于q画师和QPaintDevice之间,使用人员不必了解其细节。

  可以将QPianter理解成一个画家,将QPainterDevice理解为纸张或者是屏幕。

  4.夸脱的绘图系统实际上就是使用QPianter在QPainterDevice上进行绘制,它们之间使用QPainEngine进行通讯(也就是翻译q画师的指令)。

  矩形:矩形结构

  矩形:区域

  画笔:笔刷

  椭圆:椭圆

  setPen:设置画笔画出的边框的颜色

  setBrush:设置画笔画出的区域的颜色

  5 .问画师有很多以画开头的函数,用于各种图形的绘制,比如:drawLine()、drawRect()、drawEllipse()等

  6 .问画师绘图主要属性

  Qpen:画笔,用来控制线条的颜色和宽度等

  QBrush:画刷,用来填充颜色、渐变特性等

  QFont:字体的属性,用来绘制文字时,设置文字的样式和大小等等

  练习一:在窗口中设置背景图片第一步:widget.h文件中重写绘图事件

  #ifndef WIDGET_H

  #定义WIDGET_H

  #包含窗口

  #包含QPaintEvent

  #包含图片

  #包括q画师

  QT _ BEGIN _命名空间

  命名空间Ui {类小部件;}

  QT _ END名称空间

  类小部件:公共窗口

  {

  q _对象

  公共:

  widget(q widget * parent=nullptr);

  ~ Widget();

  受保护:

  void paint事件(QPaintEvent *);

  //重写绘图事件虚函数

  //如果在窗口绘图,必须放在放在绘图事件里实现

  //窗口需要重绘时(窗口放大缩小时),绘图事件自动调用(背景图片也作出相应的变化)

  私人:

  ui:Widget * ui;

  };

  #endif //WIDGET_H

  第二步:在widget.cpp中实现绘图事件

  #include widget.h

  #include ui_widget.h

  Widget:Widget(QWidget *parent)

  :QWidget(父级)

  ,用户界面(新Ui:小部件)

  {

  ui- setupUi(这个);

  }

  空的小部件* paint event(qpaint event *)

  {

  q画师p(这个);

  //实例化一个画家,并将此窗口作为他的画图设备

  QPixmap像素

  pix.load(./图片/图片。png’);

  //图片放在和项目同级的文件夹中

  p.drawPixmap(0,0,width(),height(),pix);

  //p.darwPixmap(0.0.width()、height()、Qpixmap(./图片/图片。png’));

  //从原点出发,指定高度为窗口的高度,指定宽度为窗口的宽度

  }

  Widget:~Widget()

  {

  删除ui;

  }

  第三步:结果显示

  练习二:在窗口中绘制直线、圆形和矩形、显示文字等#ifndef WIDGET_H

  #定义WIDGET_H

  #包含窗口

  #包含QPaintEvent

  #包括q画师

  #包括QPen

  #包含图片

  QT _ BEGIN _命名空间

  命名空间Ui {类小部件;}

  QT _ END名称空间

  类小部件:公共窗口

  {

  q _对象

  公共:

  widget(q widget * parent=nullptr);

  ~ Widget();

  受保护:

  void paint事件(QPaintEvent *);

  私人:

  ui:Widget * ui;

  };

  # endif//WIDGET _ H # include 小部件。 h

  #include ui_widget.h

  Widget:Widget(QWidget *parent)

  :QWidget(父级)

  ,用户界面(新Ui:小部件)

  {

  ui- setupUi(这个);

  }

  空的小部件* paint event(qpaint event *)

  {

  q画师p(这个);

  p.drawPixmap(0,0,width(),height(),QPixmap(./image/p . png ));

  QPen笔;

  //定义画笔

  钢笔。设置宽度(5);

  钢笔。设置颜色(Qt:red);//设置颜色

  //pen.setColor(QColor(14,9,23));

  //rgb设置颜色

  p.setPen(钢笔);

  p.drawEllipse(40,40,100,100);

  p.drawEllipse(80,80,100,100);

  p。拉线(50,80,90,40);

  //从坐标点(50,80)到坐标点(90,40)

  p.drawRect(180,180,50,80);

  p.drawLine(500,500,80,90);

  QBrush bursh

  伯什。设置颜色(Qt:blue);

  伯什。设置样式(Qt:solid pattern);

  p.setBrush(伯什);

  p.drawRect(500,500,80,90);

  QFont字体;

  字体。setpointsize(40);

  字体。设置为粗体(true);

  p.setFont(字体);

  p.drawText(600,600,QString(多云));

  }

  Widget:~Widget()

  {

  删除ui;

  }

  二。绘图设备(QPixmap,QImage,QBitmap,QPicture)1。绘图设备是指继承QPainterDevice的子类。Qt一共提供了四个这样的类,分别是QPixmap、QBitmap、QImage和QPicture。

  2.QPixmap专门优化图像在屏幕上的显示,因此它与底层显示设备密切相关。这里的底层显示设备不是硬件,而是操作系统提供的原生绘图引擎。

  3.QBitmap是QPixmap的一个子类,它的颜色深度限制为1。您可以使用QPixmap的isQBitmap()函数来确定这个QPixmap是否是QBitmap。

  4.QImage专门针对图像的像素级访问进行了优化。它是一个独立于硬件的绘图系统,实际上是自己绘图。

  5.QPicture可以记录和重现QPainter的各种命令。

  三。文件操作(QFile,QFileInfo,QDataStream,QTextStream,QBuffter)

  1.Qt作为一个通用开发库,提供了跨平台的文件操作能力。

  2.Qt通过QIODevice提供了I/O设备的抽象,这些设备具有读写字节块的能力。

  QIODevice:所有I/O设备类的父类,提供读写字节块的一般操作和基本接口;

  QFileDevice:Qt5是一个新添加的类,它提供了文件操作的一般实现。

  qfile:访问本地文件或嵌入资源;

  创建和访问本地文件系统的临时文件;

  QBuffer:读写内存文件QbyteArray

  QProcess:运行外部程序处理进程间通信;

  QAbstractSocket:所有套接字类的父类;

  QTcpSocket:TCP协议网络数据传输;

  QUdpSocket:传输UDP消息;

  QSslSocket:使用SSL/TLS传输数据;

  四。文件系统分类1。顺序设备

  意味着它们的数据只能访问一次:从头到尾,从第一个字节到最后一个字节,中间不能回读最后一个字节。QProcess、QTcpSocket、QUdpSocket和QSslScoket是顺序访问设备。

  2.随机访问设备

  您可以多次访问任何位置,还可以使用QIODevice:seek()函数来重新定位文件访问位置指针。QFile、QTemporaryFile和QBuffer是随机存取设备。

  动词(verb的缩写)基本文件操作。QFile提供了读写文件的能力。通常文件路径作为参数传递给QFile的构造函数。创建对象后,还可以使用setFileName修改对象。QFile需要使用/作为文件分隔符,但是,它会自动将其转换成操作系统要求的格式。比如像C:/Windows这样的路径,在Windows平台下也是可以的。

  QFile主要提供关于文件的各种操作,比如打开、关闭、刷新文件。我们可以使用QDataStream或者QTextStream类来读写文件,也可以使用QIODevice类提供的read()、readLine()、readAll()和write()等函数。值得注意的是关于文件本身的信息,比如文件名,文件所在目录的名称等。是通过QFileInfo获取的,而不是自己分析文件路径字符串。

  QFile提供了各种相关的文件操作,比如打开文件、关闭文件、刷新文件等。可以使用QDataStream和QTextStream读写文件,也可以使用QIODevice类提供的read()、readline()、readall()和write()等函数。但是,关于文件本身的信息需要通过使用QFileInfo来获取,而不是自己去分析文件路径字符串。

  int main(int argc,char *argv[])

  {

  QApplication app(argc,argv);

  QFile文件(“in . txt”);

  //使用QFile创建一个名为in.txt的file对象。

  如果(!file . open(QIODevice:ReadOnly QIODevice:Text)){

  qDebug()“打开文件失败。”;

  return-1;

  //使用open函数以只读方式打开该文件。

  }否则{

  而(!file.atEnd()) {

  qDebug()file . readline();

  }

  }

  QFileInfo info(文件);

  qDebug()info . isdir();

  //文件是否是目录

  qDebug()info . isexecutable();

  //文件是否是可执行文件

  qDebug()info . basename();

  //直接获取文件名

  qDebug()info . complete basename();

  //获取完整的文件名

  qDebug()info . suffix();

  //获取文件后缀名称

  qDebug()info . complete suffix();

  //获取完整的文件后缀。

  返回app。exec();

  }

  练习三:选择文件,在入条和文本编辑中输入字符串,点击提交按钮写入到选择的文件中//主窗口。h文件

  #ifndef MAINWINDOW_H

  #定义主窗口_H

  #包含主窗口

  QT _ BEGIN _命名空间

  命名空间Ui {类主窗口}

  QT _ END名称空间

  类主窗口:公共主窗口

  {

  q _对象

  公共:

  主窗口(q widget * parent=nullptr);

  ~主窗口();

  公共插槽:

  void onfile已单击();

  //选择相应的文件

  void onSubmitTextClicked();

  void onsubmitserialicked();

  私人:

  ui:主窗口* ui

  };

  #endif //MAINWINDOW_H//logger.h文件

  #ifndef LOGGER_H

  #定义记录器_H

  void set日志文件(const char * name);

  void log init();

  #endif //LOGGER_H//logger.cpp文件

  #include qdebug.h

  #包括Qmutex

  #包含QTextStream

  #包含QFile

  #包含QDateTime

  #包括输入输出流

  #包含问题

  #包含"主窗口. h "

  使用命名空间标准

  静态字符*日志文件名称=空

  QMutex logMutex

  void SetLogFile(const char *name)

  {

  日志互斥。lock();

  日志文件名=(char *)名称;

  printf(name=%s\n ,日志文件名);

  日志互斥。unlock();

  }

  void outputMessage(QtMsgType类型,const QMessageLogContext上下文,const QString消息)

  //const QString消息

  {

  如果(日志文件名称==NULL)

  返回;

  转文本;

  开关(类型)

  {

  案例QtDebugMsg:

  text=QString( Debug:);

  打破;

  案例QtWarningMsg:

  text=QString( Warning:);

  打破;

  案例QtCriticalMsg:

  text=QString( Critical:);

  打破;

  案例QtFatalMsg:

  text=QString( Fatal:);

  打破;

  案例信息消息:

  text=QString( Info:);

  }

  QString context _ info=QString( File:(% 1)Line:(% 2)).arg(QString(context.file)).arg(上下文。行);

  QString current _ date _ time=QDateTime:current datetime().toString( yyyy-MM-DD hh:MM:ss );

  QString current _ date=QString( % 1 ).参数(当前日期时间);

  QString message=QString( % 1% 2% 3% 4 ).参数(当前日期)。参数(上下文信息)。参数(文本)。arg(msg);

  日志互斥。lock();

  QFile文件(日志文件_名称);

  文件。open(QIODevice:只写 QIODevice:Append);

  QTextStream text_stream(文件);

  文本流。设置编解码器(qtext codec:codec for name( utf-8 );

  //QTextCodec * codec=QTextCodec:codecForName( utf-8 );

  //QTextCodec:setCodecForLocale(编解码器);

  文本流消息”\ r \ n”;

  文件。flush();

  文件。close();

  日志互斥。unlock();

  }

  void LogInit()

  {

  qInstallMessageHandler(输出消息);

  }//mainwidow.cpp文件

  #包含"主窗口. h "

  #include ui_mainwindow.h

  #include logger.h

  #包含QFileDialog

  #包含提示框

  #包含QByteArray

  #包含转

  #包含问题

  主窗口:主窗口(q widget * parent)

  :QMainWindow(父)

  ,用户界面(新Ui:主窗口)

  {

  ui- setupUi(这个);

  QTextCodec * codec=QTextCodec:codecForName( GDK );

  ui-line edit _ file-set enabled(false);

  //关闭写功能,只能选择文件

  connect(ui- pushButton_file,QPushButton:clicked,this,main window:on file clicked);

  connect(ui- pushButton_serial,QPushButton:clicked,this,main window:onsubmitserial clicked);

  connect(ui- pushButton_text,QPushButton:clicked,this,main window:onSubmitTextClicked);

  }

  主窗口:~主窗口()

  {

  删除ui;

  }

  void MainWindow:onFileClicked()

  {

  QString fileName=QFileDialog:get open fileName(

  这个,

  tr(打开文件),

  D:/,

  tr(* .txt*.log’));

  if (fileName.isEmpty()) {

  QMessageBox:警告(这个,’警告!,无法打开文件!);

  }

  否则{

  ui- lineEdit_file- setText(文件名);

  char *ch=fileName.toLatin1().data();

  setlog文件(ch);

  //QByteArray byte=filename。to Latin 1();

  //设置日志文件(字节。data());

  }

  }

  void主窗口:onsubmitserialicked()

  {

  QString ser=ui-line edit _ serial-text();

  qInfo(Serial=%s ,q printable(ser));

  }

  void主窗口:onSubmitTextClicked()

  {

  QString text=ui-textEdit _ text-toPlainText();

  qInfo(text=%s ,q printable(text));

  ui-textEdit _ text-clear();

  }//main.cpp文件

  #包含"主窗口. h "

  #包括q应用

  #include logger.h

  int main(int argc,char *argv[])

  {

  QApplication a(argc,argv);

  主窗口w;

  LogInit();

  设置日志文件( d://XXX。txt’);

  //设置默认的日志文件为xxx.txt

  qDebug(“测试日志");

  qWarning(测试日志警告);

  w。show();

  返回a . exec();

  }

  //实现将输入的内容通过按钮添加到文本文件中

  //写入到文本文件中出现乱码

  //试着能不能从文件中读取到信息再添加到这个文本文件中

  结果显示:

  存在的问题:写入中文字符出现乱码,还未解决

  练习四:输入互联网协议(互联网协议的缩写)地址,测试能否砰通//widget.h文件

  #ifndef WIDGET_H

  #定义WIDGET_H

  #包含窗口

  #包含调试器

  #包括进程

  #包含问题

  #包含QRegExpValidator

  #包含QStringList

  #包含转

  QT _ BEGIN _命名空间

  命名空间Ui {类小部件;}

  QT _ END名称空间

  类小部件:公共窗口

  {

  q _对象

  公共:

  widget(q widget * parent=nullptr);

  ~ Widget();

  公共插槽:

  void Myping();

  私人:

  ui:Widget * ui;

  };

  #endif //WIDGET_H//widget.cpp文件

  #include widget.h

  #include ui_widget.h

  Widget:Widget(QWidget *parent)

  :QWidget(父级)

  ,用户界面(新Ui:小部件)

  {

  ui- setupUi(这个);

  //使用正则表达式限制输入

  ui-line edit _ IP-set validator(new QRegExpValidator(QRegExp( \ \ b(?(?25[0-5]2[0-4][0-9][01]?[0-9][0-9]?)\\.){3}(?25[0-5]2[0-4][0-9][01]?[0-9][0-9]?)\ \ b ))))));

  connect(ui- pushButton_ip,QPushButton:clicked,this,Widget:Myping);

  }

  空的小部件* Myping()

  {

  qDebug() QStringLiteral(开始点击);

  ui-文本浏览器-clear();

  ui-text browser-setText(qstring literal(请等待));

  ui-文本浏览器-update();

  QProcess myProcess(这个);

  QString program= C:/Windows/System32/cmd。exe ;

  QStringList参数;

  QString ipaddr

  //正则表达式限制输入

  IP addr=ui-line edit _ IP-text();

  //用户输入的内容

  QString message= ping ipaddr

  //和砰命令拼接,字符串的拼接直接链接就可

  qDebug()消息;

  //将拼接后的结果在应用程序输出的位置打印一下

  //用于占位

  //arguments=ui-line edit _ IP-set input mask( 000。000 .000 .000;);

  //参数/c ping www .百度一下。com’;

  参数"/c "消息;

  myProcess.start(程序,参数);

  而(我的过程。waitforfinished(100)==false){

  QByteArray qByteRead=我的进程。readall标准输出();

  如果(!qByteRead.isEmpty()) {

  ui-文本浏览器-append(QString:from local 8 bit(qByteRead));

  repaint();

  }

  }

  QByteArray qByteRead=我的进程。readall标准输出();

  ui-文本浏览器-append(QString:from local 8 bit(qByteRead));

  qDebug()QString:from local 8 bit(qByteRead);

  //输出应用程序输出上

  qDebug()结束点击;

  }

  Widget:~Widget()

  {

  删除ui;

  }

  结果显示:

  练习五:选择文件,然后将文件中的内容读出到文本框中//widge.h文件

  #ifndef WIDGET_H

  #定义WIDGET_H

  #包含窗口

  #包含QFileDialog

  #包含提示框

  #包括QMutex

  #包含调试器

  #包含QFile

  QT _ BEGIN _命名空间

  命名空间Ui {类小部件;}

  QT _ END名称空间

  类小部件:公共窗口

  {

  q _对象

  公共:

  widget(q widget * parent=nullptr);

  ~ Widget();

  void set日志文件(const char * name);

  私人:

  ui:Widget * ui;

  };

  # endif//WIDGET _ H # include 小部件。 h

  #include ui_widget.h

  静态char *文件名=空

  QMutex logMutex

  Widget:Widget(QWidget *parent)

  :QWidget(父级)

  ,用户界面(新Ui:小部件)

  {

  ui- setupUi(这个);

  ui-line edit-set enabled(false);

  连接(ui-button,q button:clicked,this,

  [=]()

  {

  QString fileName=QFileDialog:get open fileName(

  这个,

  tr(打开文件),

  D:/,

  tr(* .txt*.log’));

  if (fileName.isEmpty()) {

  QMessageBox:警告(这个,’警告!,无法打开文件!);

  }

  否则{

  ui- lineEdit- setText(文件名);

  char *ch=fileName.toLatin1().data();

  setlog文件(ch);

  }

  }

  );

  connect(ui- pushButton_r,QPushButton:pressed,this,

  [=]()

  {

  QFile文件(文件名);

  如果(!文件。open(qio device:ReadOnly qio device:Text)){

  qDebug()"打开文件失败。";

  返回;

  }否则{

  而(!file.atEnd()) {

  ui-文本浏览器-setText(文件。read all());

  }

  }

  });

  }

  空的小部件* set log file(const char * name)

  {

  日志互斥。lock();

  filename=(char *)name;

  printf(name=%s\n ,文件名);

  log mutex . unlock();

  }

  Widget:~Widget()

  {

  删除ui;

  }

  6.读写二进制文件1。QDataStream基于QIODevice提供二进制数据的序列化。数据流是二进制流。数据流是二进制流,完全独立于底层操作系统、CPU或字节顺序(大端或小端)。

  ,转载请联系作者获得转载授权,否则将追究法律责任。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

相关文章阅读

  • office2010激活密钥大全 怎么永久激活office2010
  • project2010产品密钥免费_project2010激活密钥永久激活码
  • c语言调用退出函数 c语言退出整个程序怎么写
  • c语言中怎么给函数初始化 c语言的初始化语句
  • c语言编写函数计算平均值 c语言求平均函数
  • chatgpt是什么?为什么这么火?
  • ChatGPT为什么注册不了?OpenAI ChatGPT的账号哪里可以注册?
  • OpenAI ChatGPT怎么注册账号?ChatGPT账号注册教程
  • chatgpt什么意思,什么是ChatGPT ?
  • CAD中怎么复制图形标注尺寸不变,CAD中怎么复制图形线性不变
  • cad中怎么创建并使用脚本文件,cad怎么运行脚本
  • cad中快速计算器的功能,cad怎么快速计算
  • cad中快速修改单位的方法有哪些,cad中快速修改单位的方法是
  • cad中心点画椭圆怎么做,cad轴测图怎么画椭圆
  • CAD中常用的快捷键,cad各种快捷键的用法
  • 留言与评论(共有 条评论)
       
    验证码: