2.1 QT随手简记(三)

新建QT工程
=====================================================
  1.方法
          第一种:点击new project按钮,弹出对话框,新建即可
          第二种;点击文件菜单,选择新建文件或者工程
  2.QT工程文件介绍
     (1).pro文件 --》QT工程配置文件  
       QT       += core gui //添加我要使用的QT库  core(核心库)  gui(图形用户交互库)

       greaterThan(QT_MAJOR_VERSION, 4): QT += widgets  //添加widgets窗口库

       TARGET = firstqt  //生成的可执行程序的名字
       TEMPLATE = app    //生成QT应用程序


       SOURCES += main.cpp\
                  mainwindow.cpp   //QT工程编译需要用到的源码

       HEADERS  += mainwindow.h    //QT工程编译需要的头文件

       FORMS    += mainwindow.ui   //QT工程中的界面文件
    (2)main.cpp --》QT工程主函数所在的源码
         int main(int argc, char *argv[])
        { 
            QApplication a(argc, argv);  //管理整个QT程序(管理QT的信号与槽,管理QT的事件响应)
            MainWindow w;  //创建了一个主窗口对象,叫做w
            w.show();   //显示主窗口
            return a.exec();  //进入事件循环,不断地帮你刷新主窗口
        }
 


QT设计师界面(QT designer)的使用--》
=====================================================
   所见即所得
   1.跳转到QT设计师界面
        双击.ui文件,自动跳转到设计师界面
        原理:你用ui设计师去设计,QT集成开发环境会自动帮你生成两种格式的代码
                 第一种格式:XML格式,保存到ui文件里面(不需要掌握)
                 第二种格式:C++代码,构造函数ui->setupUi(this);  //通过给组件对象(默认都是指针)
                             你拖过去的组件默认都是生成指针,然后使用new分配了堆空间
                             你拖过去的组件对象(指针)在ui设计师右上角类对象视图中都可以清清楚楚地看到名字
                             ctrl按住不松开,鼠标左键点击函数名字即可跳到函数的源码中
     使用组件(控件)
          点击要使用的组件,直接拖到窗口(点击组件,按下ctrl不松,拖动复制组件)
     所有组件对应类名都符合如下规律
          比如:按钮我见到的名字  Push Button --》类名QPushButton
                    标签我见到的名字  Label            --》类名QLabel

   2.常用的组件
        (1)display widgets组
           第一个:label 标签类名叫做QLabel  可以显示文字信息
                   常用的属性:
                             geometry 设置位置坐标,宽高
                             font          设置你喜欢的字体
                             某个同学想要了解老师没有讲过,一定要主动搜索查资料
                     
        (2)input widget组
           第一个:line edit 单行输入框类名QLineEdit  获取键盘输入的信息
                   常用的属性:
                             font --》设置你喜欢的字体
                             echoMode  --》normal   显示文字信息
                                                      password 隐藏文字信息
                             maxlength --》设置文字的位数,一个字母,一个数字,一个汉字都算一个位数
                             placeholdertext --》设置单行输入框默认提示信息
       
        (3)buttons 组
           第一个:push button 普通按钮类名QPushButton
                   常用的属性:
                             font --》设置你喜欢的字体
                              



   3.QT中的样式设计  
       (1)QT工程中添加资源文件
          1.1 资源文件:指的就是QT程序中需要用到的素材(比如:图片,音频,视频)
          1.2 添加步骤:
                第一步:在QT工程中新建一个文件夹,把需要的资源(图片)全部存放到该文件夹中
                第二步:右键点击工程名,选择添加add new--》选择QT--》QT resource file(资源文件)
                第三步:点击添加--》添加前缀,然后再次点击添加--》添加文件,把之前你准备好的资源添加进来即可
          1.3 新增资源文件以及删除现有的资源文件:
                新增资源文件:右键点击资源文件最顶层的目录名,选择添加现有文件即可
                删除现有的资源文件:右键点击资源文件名,选择删除文件即可
       (2)QT中的qss语句(样式设计语句)
          2.1 样式设计:指的是让你的界面设计得更加好看(比如:文字颜色,背景图片,改变倒角)
                        QT中的样式设计,就跟计算机前端(css)中设计网页的样式道理一样       
          2.2 常见的qss语句
                                          红  绿   蓝
                    background-color: rgb(85, 255, 255);   //设置背景颜色(按钮,标签的背景颜色)
                    color: rgb(85, 255, 255);             //设置前景色(文字的颜色)
                    background-image: url(:/new/prefix1/pic/3.jpg);  //设置背景图片(不会拉伸图片)
                        background-image: url(你需要的图片的绝对路径);
                    border-image: url(:/new/prefix1/pic/2.jpg);      //设置边框图片(边框图片跟组件的大小保持一致)
                        border-image: url(你需要的图片的绝对路径); 
                    border-radius:15px;    //把倒角设置为15个像素
                                             倒角的大小不能超过组件高度的一半
                    border:2px solid#ff0000;  //把边框的宽度设置为2个像素,颜色设置成ff0000
                    QPushButton:pressed{  设置按钮按下的时候背景图片,主界面的样式中使用
                        background-image: url(:/button_down.png);
                    }
                    QPushButton:pressed#regBt{ 设置指定按钮regBt按钮按下时候背景图片,主界面的样式中使用
                        background-image: url(:/button_down.png);
                    }
                    QPushButton:hover{  主界面的样式中使用
                        background-color:#ff00ff;  鼠标进入控件设置背景颜色
                    }
                    QMainWindow{border-image: url(:/new/prefix1/pic/3.jpg);}  //让图片只作用于主窗口
          注意注意注意:QT中路径的写法跟window不一样
                        比如:window路径       C:\Users\PC\Desktop\share   
                              QT中要求改写成: C:/Users/PC/Desktop/share  
                        QT工程存储的路径不可以使用中文路径,但是QT的代码中可以使用中文路径


QT中的信号与槽函数
======================================
  1.信号与槽函数的作用
        用来在组件和组件,组件和窗口之间通信
         Linux中进程间通信signal(你要捕捉的信号,函数指针)
                   当前进程收到指定信号,函数指针对应的函数自动调用
        同样的道理:QT中信号触发之后,对应的槽函数也会自动调用
                    类比linux: connect(信号发送者,信号,信号接收者,槽函数) 仅仅只是类比
                    区别:linux中的信号是一个宏定义
                          QT中的信号是个函数

        信号:QT中给每个组件都定义了信号,每个信号都有它特定的触发条件
              QT中所有的信号,本质上都是个函数,但是有点特殊,信号只有声明,没有源代码
              比如:以按钮为例,常用的信号如下
                     [signal] void QAbstractButton::clicked(bool checked = false)  //当按钮按下去,然后松开的时候自动触发这个信号
                     [signal] void QAbstractButton::released()  //按钮松开会触发该信号
                     [signal] void QAbstractButton::pressed()   //按钮按下去触发该信号
        槽函数:当某个信号触发的时候,跟这个信号对应的槽函数会被自动调用执行

  2.如何关联信号与槽函数
        第一种方法:借助集成开发环境,右键转到槽函数
             头文件中会自动生成槽函数的声明
                      private slots:   //声明了一个私有的槽函数
                          void on_pushButton_clicked();  //槽函数的原型声明
             在源码.cpp文件中自动生成的槽函数,命名有规律
                      on_对象的名字_信号的名字();

        第二种方法:程序员调用connect函数手动关联信号与槽函数
           写法一:connect(QObject *sender, PointerToMemberFunction signal,QObject *receiver, PointerToMemberFunction method)
           写法二:connect(发送者指针,&类的名字::信号的名字,接收者,&类的名字::槽函数)
                    参数:sender --》信号的发送者,指针
                          signal --》发送什么信号
                          receiver --》信号的接收者
                          method --》需要调用的槽函数
                                    槽函数命名时候,可以跟自动生成的槽函数命名规律保持一致,也可以自行单独命名
           比如:connect(ui->handlebt,SIGNAL(clicked(bool)),this,SLOT(fun())); //关联了handlebt这个按钮的clicked信号和槽函数fun()
           QT使用技巧:头文件中声明了函数,右键选择refactor,可以在.cpp生成函数的定义                  


多界面跳转以及界面之间传递参数
=======================================
   主窗口设置在最小化任务栏显示的图标:setWindowIcon()
   1.多界面跳转总结为两种情况
       情况一:A界面跳到B界面,不需要返回
             //创建主界面对象
             MainWindow *newwin=new MainWindow(); //堆空间
             //把主界面显示出来
             newwin->show();
            //把登录界面关闭
             this->close();
       情况二:A界面跳到B界面,需要返回
            //创建主界面对象
            MainWindow *newwin=new MainWindow(this); //此时必须传递this,原因是返回的时候需要根据这个this找到上一级窗口的地址
            qDebug()<<"登录界面的首地址是: "<<this;
            //把主界面显示出来
            newwin->show();
           //把登录界面隐藏--》把登录界面转入系统后台运行
            this->hide();
           重要函数:
               QWidget *QWidget::parentWidget() const  
                    返回值:返回上一级窗口的指针

   2.在QT工程中添加新的界面
       右键点击工程名--》选择add new--》QT--》QT设计师界面类--》模板选择MainWindow

   3.界面之间传递参数
       A界面传递参数给B界面(A是第一个界面,B是第二个界面)
       方法1:B界面的类中定义了一个公有的方法,通过调用这个公有方法把参数传递过去
       方法2:通过自定义信号来传递参数(发送信号,信号带参数)



布局管理器
=======================================
   1.作用
        让你的组件在水平和垂直方向对齐,好看
   2.常用的布局管理器
        水平布局管理器 --》让组件在水平方向形成一个整体,对齐
        垂直布局管理器 --》让组件在垂直方向形成一个整体,对齐
        栅格布局管理器 --》可以把组件嵌套到主窗口中
                          点击主窗口,选择栅格布局即可实现
   3.布局管理器使用技巧
       技巧一:固定组件的长和宽
               修改属性,把最小尺寸和最大尺寸改成一样的值,就固定了
               修改属性,把最小尺寸和最大尺寸改成某个范围,组件就会在指定范围内变动
       技巧二:使用水平和垂直弹簧(分隔器)
               水平和垂直方向伸缩
   4.代码实现布局
       水平布局管理器 --》QHBoxLayout
              重要方法:
                    (1)往布局管理器中添加组件
                       void QLayout::addWidget(QWidget *w)
                                参数:w --》你要添加的组件
                    (2)往布局管理器中添加其他的布局管理器
                       void QBoxLayout::addLayout(QLayout *layout, int stretch = 0)
                                参数:layout --》你要添加的布局管理器
                                      stretch --》布局管理器之间的间隔距离
       垂直布局管理器 --》QVBoxLayout
              重要方法:
                    (1)构造函数
                       QVBoxLayout(QWidget *parent)
                    (2)往布局管理器中添加其他的布局管理器
                       void QBoxLayout::addLayout(QLayout *layout, int stretch = 0)
                                参数:layout --》你要添加的布局管理器
                                      stretch --》布局管理器之间的间隔距离        

       栅格(网格)布局管理器 --》QGridLayout 
             重要方法:
                    (1)构造函数
                       QGridLayout(QWidget *parent)
                                 参数:parent --》中心窗口区域(如果该布局管理器是最顶层的情况下)
                    (2)往布局管理器中添加其他的布局管理器
                       addWidget(QWidget *widget, int row, int column)
                                 参数:widget --》你要添加的组件
                                       row --》行,从0开始
                                       column --》列,从0开始

       注意:用代码实现布局,最顶层的布局管理器必须作用于中心窗口,不能作用于主窗口 


               

消息盒子和对话框(重点)
=======================================
  1.消息盒子QMessageBox
      常用方法:
             (1)弹出警告盒子
             [static] StandardButton QMessageBox::warning(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
                     返回值:你点击了盒子里面的哪个按钮,返回值就返回这个按钮
                       参数:parent --》this,父窗口
                             title --》消息盒子的标题
                             text --》盒子里面的文本内容 
                             buttons --》盒子默认使用哪些按钮,默认使用ok按钮
                                         如果你想添加多个按钮,多个按钮之间使用按位或连接起来
                             defaultButton --》当你按下回车键,默认选中的按钮
            (2)致命错误盒子
             [static] StandardButton QMessageBox::critical(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = Ok, StandardButton defaultButton = NoButton)
            (3)帮助盒子
             [static] StandardButton QMessageBox::question(QWidget *parent, const QString &title, const QString &text, StandardButtons buttons = StandardButtons( Yes | No ), StandardButton defaultButton = NoButton)
      如何判断点击了哪个按钮
            方法:通过warning函数的返回值判断,具体参见例子代码
                  if(ret==QMessageBox::Ok)
                  {

                  }
                  else  //其他按钮
                  {

                  }

   2.QT中自带的对话框
         颜色对话框  QColorDialog
            (1)重要方法
                  [static] QColor QColorDialog::getColor(const QColor &initial = Qt::white, QWidget *parent = Q_NULLPTR, const QString &title = QString())
                                返回值:你选中的颜色
                                  参数:initial --》颜色对话框默认选中的颜色
                                                //依据RGB的值新建颜色对象
                                                QColor(int r, int g, int b)   
                                            parent --》父窗口 this
                                            title --》颜色对话框的标题
              如何判断用户是否选中了某个颜色
                  bool QColor::isValid() const
                         返回值:如果用户点击ok  --》颜色就是合法,返回true
                                 反之,返回false
                                        
         字体对话框  QFontDialog
             (1)重要方法
                  [static] QFont QFontDialog::getFont(bool *ok, QWidget *parent = Q_NULLPTR)
                                返回值:你选中的字体
                                  参数:ok --》保存你是否选中了某个字体,选中了 --》true  没有选中 --》false
                                        parent --》父窗口 this
                  QString QFont::family() const
                                返回值:返回你选中的字体名字
                  int QFont::pointSize() const 
                                返回值:返回你选中的字体大小
                如何判断用户是否选中了某个字体
                        方法:判断getFont的第一个参数是否为真

         文件对话框  QFileDialog
            (1)重要方法
               //弹出文件对话框,让用户可以选择某个具体的文件
               [static] QString QFileDialog::getOpenFileName(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString(), const QString &filter = QString())
                                返回值:你选中的某个文件的绝对路径名
                                  参数:parent --》父窗口 this
                                            caption --》文件对话框的标题
                                            dir --》你指定要打开的目录路径
                                            filter --》文件过滤器,过滤掉你不需要的文件
                                                   比如: "*.txt"        表示我只想查看文件夹中的记事本
                                                              "*.txt  *.bmp"  表示我想查看文件夹中的记事本和bmp图片
               //弹出目录对话框,只能让用户选择目录,不可以选择目录中具体文件  
               [static] QString QFileDialog::getExistingDirectory(QWidget *parent = Q_NULLPTR, const QString &caption = QString(), const QString &dir = QString())
                                返回值:你选中的某个目录的绝对路径名
                                  参数:parent --》父窗口 this
                                        caption --》目录对话框的标题
                                        dir --》你指定要打开的目录路径

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/22759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

QNX 7.0.0开发总结

1 QNX编译 1.1 基本概念 QNX可以直接使用Linux Makefile编译库和二进制&#xff0c;在Makefile文件中指定CCaarch64-unknown-nto-qnx7.0.0-g&#xff0c;或者CCx86_64-pc-nto-qnx7.0.0-g&#xff0c;保存退出后&#xff0c;运行source /qnx_sdk_path/qnxsdp-env.sh&#xff0c;…

前端canvas绘图,利用canvas在图片上面绘制标记以及给canvas添加点击事件。

前端canvas绘图&#xff0c;利用canvas在图片上面绘制标记以及给canvas添加点击事件。 需要实现的效果如下图: 首先需要一个承载的核心画布 <canvas id"canvas" width"800" height"600"></canvas>全部代码&#xff1a; <!DOCT…

程序员职业素养的探索与实践

在数字化飞速发展的今天&#xff0c;程序员作为技术创新的核心力量&#xff0c;其职业素养的重要性愈发凸显。那么&#xff0c;对于程序员而言&#xff0c;什么样的职业素养是至关重要的呢&#xff1f;在我的职业生涯中&#xff0c;我深刻体会到&#xff0c;除了扎实的技术功底…

LabVIEW减压阀和温控阀综合测试系统

在使用LabVIEW开发阀门测试软件时&#xff0c;特别是针对减压阀和温控阀&#xff0c;测试内容和注意事项包括以下方面&#xff1a; 测试内容 压力测试&#xff1a; 入口压力&#xff1a;测量阀门在不同入口压力下的表现。 出口压力&#xff1a;确保减压阀能够将出口压力控制在…

k8s系列-使用containerd下载镜像并导入

1. 使用 containerd 下载镜像 首先&#xff0c;确保 containerd 已经安装并运行。然后使用 ctr 命令来拉取镜像&#xff1a; sudo ctr image pull docker.io/rancher/rancher-webhook:v0.4.32. 导出镜像 将拉取的镜像导出为 tar 文件&#xff1a; sudo ctr image export ra…

Spring AI 第二讲 之 Chat Model API 第五节HuggingFace Chat

HuggingFace Inference Endpoints 允许您在云中部署和提供机器学习模型&#xff0c;并通过 API 对其进行访问。 开始使用 有关 HuggingFace Inference Endpoints 的更多详细信息&#xff0c;请访问此处。 前提条件 添加 spring-ai-huggingface 依赖关系&#xff1a; <d…

systemctlm-cosim-demo项目分析

概述 systemctlm-cosim-demo项目是Xilinx的systemc库的demo工程。 环境安装 qemu安装 cd xilinx_proj/Downloads git clone https://github.com/Xilinx/qemu.git cd qemu git checkout 74d70f8008# Configure and build # zynq7000 # ./configure --target-list"arm-s…

【乐吾乐3D可视化组态编辑器】用开关控制巡检车和路灯

一、运动设备开关控制 3D组态编辑器地址&#xff1a;3D可视化组态 - 乐吾乐Le5le 1.在场景中新建模拟运动设备及控制面板&#xff1a;启动/停止 2.单击巡检车设备新建模拟动画 3.设置模拟动画属性 4.单击启动面板&#xff0c;新建交互事件 5.设置交互触发类型&#xff0c;新建…

JavaSE——【逻辑控制】(习题)

一、分支结构 2.1 if 语句 【练习】2.1.1 小明&#xff0c;如果这次考到90分以上&#xff0c;给你奖励一个大鸡腿&#xff0c;否则奖你一个大嘴巴子 int score 92;if(score > 90){System.out.println("吃个大鸡腿!!!");}else{System.out.println("挨大嘴…

PS系统教程11

HUD拾色器 作用&#xff1a;它可以帮助使用者更加高效地选择和使用颜色&#xff0c;从而提高工作效率和设计质量。 先确定色相值改变饱和度改变亮度使用HUD拾色器选中画笔工具画笔模式-正常shiftAlt右键 色相轮 上下移动从黑到白亮度变化左右移动从浅到深饱和度的变化选中颜…

【小海实习日记】PHP安装

## PHP环境搭建(Mac) ### php安装 使用brew需要安装homebrew >brew tap shivammathur/php >brew install shivammathur/php/php7.3 >brew link php7.3 这里可以需要homebrew使用代理进行下载&#xff0c;如果代理下载速度还是太慢&#xff0c;建议直接更该国内镜像…

数据分析必备:一步步教你如何用Pandas做数据分析(17)

1、Pandas 连接 Pandas 连接的操作实例 Pandas具有与SQL等关系数据库非常相似的功能齐全的高性能内存中连接操作。 Pandas提供单个功能merge作为DataFrame对象之间所有标准数据库联接操作的入口点 pd.merge(left, right, howinner, onNone, left_onNone, right_onNone,left_i…

新手必看!现货伦敦金新手容易犯的两个错

对很多刚进入现货伦敦金市场的朋友来说&#xff0c;炒伦敦金是十分令人兴奋的&#xff0c;但兴奋归兴奋&#xff0c;我们还是要注意&#xff0c;由于现货伦敦金投资者过分的热情&#xff0c;很容易让自己跌入一些陷阱&#xff0c;犯下一些错误&#xff0c;下面我们就来介绍两个…

Linux 命令 FIO:深入理解磁盘性能测试工具

Linux 命令 FIO&#xff1a;深入理解磁盘性能测试工具 在 Linux 系统中&#xff0c;磁盘 I/O 性能对于系统的整体性能至关重要。为了准确、快速地评估磁盘性能&#xff0c;我们需要一个强大的工具来模拟各种磁盘读写场景。FIO&#xff08;Flexible I/O Tester&#xff09;就是…

C++关于拷贝构造函数的一些理解

定义&#xff1a; 拷贝构造函数是C中的一种特殊的构造函数&#xff0c;用于创建一个对象的副本。它的作用是在对象之间进行拷贝初始化。拷贝构造函数通常以引用的方式接受同类型的对象作为参数&#xff0c;以完成对象的拷贝。程序中如果没有定义拷贝构造函数系统会生成一个默认…

echarts 数据重新加载,原数据依然存在图表上

watch: {data: {deep: true,handler(val) {this.resizeHandler();this.initChart(); 主要是这步this.render(val);}}},监听数据是否真正变化了 在数据变化的时候在重新初始化图表实例对象。 // 初始化渲染initChart() {chart this.$echarts.init(this.$refs.myChart);this.r…

智能楼宇安防3D数据可视化平台满足日益增长的安防需求

在当今社会&#xff0c;安全是每个人和企业最为关心的问题。为满足日益增长的安防需求&#xff0c;3D可视化公司深圳华锐视点隆重推出安防平台3D可视化管理系统&#xff0c;以先进的三维技术为您的安全保驾护航。 安防平台3D可视化管理系统通过创新的三维可视化技术&#xff0c…

纷享销客BI智能分析平台技术架构介绍

纷享销客BI智能分析平台致力于降低用户上手门槛&#xff0c;无缝继承纷享销客PaaS平台的对象关系模型和权限体系&#xff0c;让使用纷享CRM的营销人员、销售人员、服务人员等各类角色人员都能够将分析场景与业务场景相融合&#xff0c;将数据思维融合到自己的日常工作、团队工作…

SpringCloud-面试篇(二十三)

&#xff08;1&#xff09;SpringCloud常见组件有那些 有无数微服务需要相互调用&#xff1a;可以用远程调用组件OpenFeign组件&#xff0c;也可以用Dobble 这么多微服务相互调用怎么管理&#xff1a;就用到注册中心组件Nacos&#xff0c;Eureka 所有的服务去找注册中心做注…

TCP协议与UDP协议区别

举个列子&#xff1a; 三次握手&#xff1a;为了解决网络信道不可靠的问题&#xff1b;防止客户端向服务端发送两次数据&#xff0c;客户端一直处于接收的状态。 四次挥手是一样的。当客户端提出关闭请求&#xff0c;服务端处于关闭等待状态&#xff0c;此时客户端可以发送数据…