QT基础之——ui文件以及信号和槽机制

这篇具有很好参考价值的文章主要介绍了QT基础之——ui文件以及信号和槽机制。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

 ui文件以及信号和槽机制

ui文件

        上一节我们讲了除界面文件ui文件其他的所有文件,这一节我们来介绍一下ui文件:在文件目录中我们能看到界面文件这一栏,点击展开我们可以看到一个以".ui"结尾的文件,双击我们会看到如下界面:

qt ui,qt,ui,开发语言

        我们在右侧选中label和PushButton拖入到工作台上的窗口中,并双击输入名字

qt ui,qt,ui,开发语言

qt ui,qt,ui,开发语言

然后点击运行

qt ui,qt,ui,开发语言

        随后就可以看到我们拖拽进去的label和button显示在窗口上了,那么就会有这样一个疑问,在我们点击运行之后,其他文件中的代码没有被改变,那么这是如何实现的呢?

下面我来解答一下:在运行完之后系统会在我们的存储路径中新生成一个开头为"build"的文件:

 qt ui,qt,ui,开发语言

双击点进去会看到一个 ui开头.h结尾的文件

qt ui,qt,ui,开发语言

双击点进去之后我们会看到一大坨代码,不要着急,我们来依次解释一下:

qt ui,qt,ui,开发语言

首先 我们先看Ui MainWindow类中设置的几个指针对象:

qt ui,qt,ui,开发语言

它们分别对应着

  • 中心窗口:就是运行之后弹出的窗口中间灰色的那部分
  • label: 后拖拽进来的label部分,如果没拖拽就不会有这个指针
  • Button:后拖拽进来的Button部分,没拖拽的话同上
  • menuBar:菜单栏
  • mainToolBar:工具栏
  • statusBar:状态栏

不知道大家是否还记得上一节我们在.h头文件中简单介绍过ui指针

qt ui,qt,ui,开发语言

在.h头文件中我们私有定义了一个Ui作用域中的MainWindow类型的ui指针,下面我们先来解释一下:

我们回到本节提到的.ui文件:可以看到有一部分代码为

qt ui,qt,ui,开发语言

我们在Ui作用域中将MainWindow类公有继承Ui_MainWindow,但是没有写其他的东西,那么我们就可以认为MainWindow类和Ui_MainWindow类中的内容是一样的;然后我们再回到.h头文件中:

qt ui,qt,ui,开发语言

在文件的开头部分我们申明了一下Ui作用域,并在MainWindow类中私有创建了一个Ui作用域中的MainWindow类型的ui指针(MainWindow继承了Ui_MainWindow);下面我们再来看一下MainWindow.cpp文件:

qt ui,qt,ui,开发语言

在MainWindow.cpp文件中我们将头文件中定义的ui指针初始化,并将ui指针调用了MainWindow从Ui_MainWindow中继承的函数"setupUi"函数,将MainWindow的this指针传入进去。

接下来我们再看ui文件中其他部分:

 qt ui,qt,ui,开发语言

剩下这部分理解起来就很简单了,注意一下这个retranslateUi函数中的代码作用是设置label和Button所显示的数据:

qt ui,qt,ui,开发语言

信号和槽机制

        信号槽是Qt框架中非常重要的一个机制,它实际上就是观察者模式;当某个时间发生之后,例如对象A检测到自己被点击了一下,那么它就会发出一个信号(signal)。这种发出是没有目标的,也就是没有指向的,类似于广播。但是如果有个对象B对这个信号感兴趣,那么它就会使用连接(connect)函数,意思就是:将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。

qt ui,qt,ui,开发语言

下面我们来用代码举一个例子:

qt ui,qt,ui,开发语言

因为要创建一个按钮,我们在main.cpp文件中引入了一个QPushButton头文件,随后创建了一个QPushButton对象,并让其显示出来,但是在运行的时候却出现了两个窗口——一个按钮窗口,一个主窗口,并且两个窗口是相互独立的,那么我们要如何解决这一问题呢 ?这就要提到Qt的对象处理机制了。

首先我们把鼠标放在QPushButton上按一下键盘上的F2进入,我们可以看到QPushButton的构造函数,一个构造函数中有一个QWidget类型(QWidget是所有窗口类的基类)的parent指针,当我们把主窗口对象的地址传给QPushButton的构造函数时,我们的主窗口就是QPushButton创造对象的"父亲",在这个主窗口对象里就会生成一个链表,链表会存储它的孩子——QPushButton对象,当主窗口销毁时会和QPushButton对象一起销毁:

qt ui,qt,ui,开发语言

qt ui,qt,ui,开发语言 这样按钮和主窗口就会出现在一个窗口上了,当主窗口关闭的时候按钮也会随之一起关闭 。

下面我们来利用槽函数来实现:点击按钮关闭窗口这一功能:

我们要用到QObject作用域里的connect函数,connect函数中前四个参数分别为:信号发出者--信号--信号接收者--槽函数,connect()函数最常用的一般形式:connect(sender,signal,receiver,slot);

qt ui,qt,ui,开发语言

qt ui,qt,ui,开发语言

这样,我们就实现了点击按钮关闭窗口这一功能了。

学完了信号和槽,我们再来看一下MainWindow.cpp文件中的Q_OBJECT是什么:

qt ui,qt,ui,开发语言

首先有信号槽的机制必须有Q_OBJECR,QObject是所有类的基类(也包括Qwidget)。

接下来,我们再来做一个有挑战性的:实现点击按钮之后按钮在窗口上随机位置显示:

因为QPushButton没有随机显示按钮这一函数,我们可以自己写一个类继承QPushButton,并在其中写一个随机移动的函数步骤如下:

  • 实现(按钮,点击,按钮,随机移动)这一流程
  • 建立一个MyButton类,类中引入QPushButton头文件,共有继承QPushButton
  • 然后在MyButton.h中声明一下我们自己要写的ReMove()函数

qt ui,qt,ui,开发语言

  • 在MyButton.cpp文件中将初始化参数列表中显示父类构造改成显示QPushButton构造

qt ui,qt,ui,开发语言

  • 在main.cpp中引入我们自己写的MyButton.h头文件注意用双引号
  • 因为是随机显示,所以在main.cpp文件中也要引入时间头文件time.h,然后写入srand(time(0))
  • 将主窗口扩大一些,使用resize()函数设置1500*1000像素大小
  • 定义MyButton类型的对象

qt ui,qt,ui,开发语言

  • 并在MyButton.cpp文件中实现ReMove()函数:定义x,y变量且分别在主窗口范围内,所以x = rand()%1500,y = rand()%1000,接着用this指针调用QPushButton中的move(x,y)函数

qt ui,qt,ui,开发语言

 这样就实现了点击按钮->按钮随机出现这一功能:

qt ui,qt,ui,开发语言

qt ui,qt,ui,开发语言文章来源地址https://www.toymoban.com/news/detail-844678.html

到了这里,关于QT基础之——ui文件以及信号和槽机制的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt】信号和槽

     需要云服务器等云产品来学习Linux的同学可以移步/--腾讯云--/--阿里云--/--华为云--/官网,轻量型云服务器低至112元/年,新用户首次下单享超低折扣。   目录 一、Qt中的信号和槽 1、信号 2、槽 3、Q_OBJECT 二、Qt中的connect函数 三、自定义信号、自定义槽 1、自定义槽函数 1.1使

    2024年01月21日
    浏览(44)
  • QT之信号和槽

    一、什么是信号和槽? 我们经常看到的功能,点击一个按钮实现窗口关闭。 这一过程发生了什么?是怎么实现的 按钮相当于一个信号,点击相当于发送一个信号,窗口是个接收者,关闭窗口是个槽函数 信号:各种事件 槽:响应信号的动作 当一个按钮(信号)被触发(发送

    2024年02月07日
    浏览(32)
  • 【QT】信号和槽(15)

    前面的内容说了很多不同的控件如何使用,今天来看下QT的核心, 信号与槽(Signals and slots) ! 简单理解一下,就是我们的信号与槽连接上了之后,发射一个信号给到槽,槽函数接收到了这个信号之后,槽函数会被调用。 1.python 3.7.8   可直接进入官网下载安装:Download Pyt

    2024年02月10日
    浏览(52)
  • 七、Qt 信号和槽

    在QT4以上的版本,在窗体上用可以通过选中控件,然后点击鼠标右键单击按钮,选择“转到槽”。可以自动创建信号和槽。 选择clicked(),并点击 ok Qt Creator会给头文件和代码文件自动添加 这个按钮的单击事件(信号和槽)。 不同的控件,信号不全是一样的,根据控件的使用场

    2024年01月19日
    浏览(38)
  • 07.QT信号和槽-2

            在Qt中,允许⾃定义信号的发送⽅以及接收⽅,即可以⾃定义信号函数和槽函数。但是对于⾃定义的信号函数和槽函数有⼀定的书写规范。 1.1 自定义信号 (1)⾃定义信号函数必须写到\\\"signals\\\"下; (2)返回值为void,只需要声明,不需要实现; (3)可以有参数,

    2024年04月14日
    浏览(38)
  • Qt6.2教程——3.Qt信号和槽

    信号和槽是Qt中一个强大的特性,用于处理对象之间的通信。它们是一种事件处理机制,允许一个对象在某个事件发生时通知另一个对象。 定义 : 信号是一个QObject的成员函数,当某个特定事件发生时,它被自动调用。它可以与一个或多个槽关联。 声明 : 在Qt类的声明中,信号

    2024年02月10日
    浏览(52)
  • [Qt的学习日常]--信号和槽

    前言 作者 :小蜗牛向前冲 名言 :我可以接受失败,但我不能接受放弃   如果觉的博主的文章还不错的话,还请 点赞,收藏,关注👀支持博主。如果发现有问题的地方欢迎❀大家在评论区指正 本期学习:什么是信号和槽,自定义槽函数和信号函数,信号和槽的传参,断开,

    2024年04月28日
    浏览(32)
  • 02 qt基本控件及信号和槽

    功能:显示一个字符串内容 主要接口函数 构造函数: 赋值运算符重载: 功能函数: 1)基本数据类型(int,float,double,char*)转换成字符串 number(long , int ) : QString number(int , int ) : QString number(uint , int ) : QString number(ulong , int ) : QString number(qlonglong , int ) : QString number(qulonglong , int

    2024年02月12日
    浏览(42)
  • qt信号和槽避免多次连接

    qt同一个信号和槽多次连接,则槽函数 会触发多次 (默认),可能不是我们想要的结果。 有3种方法可以解决这个问题: 因为初始化函数在在整个程序中只运行一次,所以这里面连接信号和槽,就能避免重复连接问题了。 Qt::UniqueConnection 的作用是:如果该信号以前没连接过

    2024年02月10日
    浏览(42)
  • 20221210 QT----信号和槽的使用

    什么是信号(signal) 以QPushButton为例: (1)按下按钮时,会触发一个mousePressEvent事件,此时会发出一个pressed信号; (2)松开按钮时,会触发一个mouseReleaseEvent事件,此时会发出released和clicked信号。 事件的种类有很多,不同的事件都对应着不同的信号,当事件发生时,对应

    2024年02月15日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包