指定父对象和信号与槽

文章目录

  • 指定父对象和信号与槽
  • 1.指定父对象
  • 2.信号与槽

1.指定父对象

  1. setWindowTitle函数:
void setWindowTitle(const QString &)

参数:const QString &相当于string类型
作用:给窗口设置标题

  1. setText函数:
void setText(const QString &text)

参数:const QString &相当于string类型
作用:给按钮设置内容

  1. move函数:
void move(int x, int y)

参数:整形值,是一个坐标
作用:设定位置,比如按钮默认是在窗口的左上角,我们通过该函数改变按钮的位置

  1. QWidget::setParent函数:
void QWidget::setParent(QWidget *parent)

参数QWidget *parent传递一个窗口类型的指针
作用:指定父对象

  1. 什么叫指定父对象???
    假设下面一种场景:
#include <QApplication>
#include <QWidget>//窗口基类
#include <QPushButton>//按钮类int main(int argc,char* argv[])
{QApplication app(argc,argv);//定义一个Qt应用程序对象QWidget w;//定义一个窗口对象w.setWindowTitle("hello QT!!!");//给窗口设置标题w.show();//显示窗口QPushButton b;//定义一个按钮b.setText("is me");//给按钮设置内容b.show();//显示按钮app.exec();//循环执行return 0;
}

a.如果没有指定父对象,对象和对象(窗口和窗口)之间没有任何关系,你会发现你的窗口和按钮分别是两个窗口,我们的目的是把按钮放在窗口当中,所以此处就需要指定父对象,将按钮放在窗口当中。
b.指定父对象的规则:a指定b为它的父对象,就将a放在b的上面
c.指定父对象的方法:1).setParent;2).通过构造函数传参
d.指定父对象后只需要父窗口显示,按钮就不需要show了

#include <QApplication>
#include <QWidget>
#include <QPushButton>int main(int argc,char* argv[])
{QApplication app(argc,argv);QWidget w;w.setWindowTitle("hello QT!!!");QPushButton b;b.setText("is me");b.setParent(&w);//通过setParent函数指定父对象b.move(100,100);QPushButton b1(&w);//通过构造函数指定父对象b1.setText("also me");b1.move(80,80);w.show();app.exec();return 0;
}

在QT中,父对象/父窗口/父控件是一个意思,子对象/子窗口/子控件是一个意思

2.信号与槽

1. 梳理一下基本流程:
main.cpp中:

#include "mainwidget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWidget w;w.show();return a.exec();
}

程序先执行QApplication a(argc, argv);完成引用程序基类的构造,再执行 MainWidget w;完成窗口对象的构造,再执行w.show();,显示主窗口,最后执行return a.exec();阻塞等待用户的操作。

2. 一些注意事项

a. 这就是main函数的基本框架,我们用户自定义的功能都是在w这个派生类的构造函数当中完成
b.一种错误的代码:
mainwidget.cpp:

#include "mainwidget.h"
#include <QPushButton>MainWidget::MainWidget(QWidget *parent): QWidget(parent)
{QPushButton b1;b1.setParent(this);b1.setText("b1");b1.move(10,10);
}MainWidget::~MainWidget()
{}

你们决定这个程序会在窗口上显示b1按钮吗???答案是不会,因为b1是构造函数的局部变量,出了这个作用域后就被销毁,即执行完MainWidget w; 后就销毁b1对象,还没来的及执行w.show();,所以不会显示b1按钮。
c.注意QT中的指针是必须要new对象的,否则就会出错。
mainwidget.h:

#ifndef MAINWIDGET_H
#define MAINWIDGET_H#include <QWidget>
#include <QPushButton>class MainWidget : public QWidget
{Q_OBJECTpublic:MainWidget(QWidget *parent = 0);~MainWidget();
private:QPushButton b1;QPushButton* b2;
};#endif // MAINWIDGET_H

mainwidget.cpp:

#include "mainwidget.h"MainWidget::MainWidget(QWidget *parent): QWidget(parent)
{b1.setParent(this);b1.setText("b1");b1.move(10,10);//b2->serParent(this);b2 = new QPushButton(this);b2->setText("b2");b2->move(99,99);
}MainWidget::~MainWidget()
{delete b2;
}

3. 信号与槽

到这里基本功能已经了解,但是我们有了按钮,但是点击按钮并没有反应,此处就引出信号与槽。

  1. 信号:当对象改变其状态时,信号就由该对象发射 (emit) 出去,而且对象只负责发送信号,它不知道另一端是谁在接收这个信号。这样就做到了真正的信息封装,能确保对象被当作一个真正的软件组件来使用
  2. 槽:用于接收信号,而且槽只是普通的对象成员函数。一个槽并不知道是否有任何信号与自己相连接。而且对象并不了解具体的通信机制

4. connect函数:

bool QObject::connect ( const QObject * sender, const char * signal, const QObject * receiver, const char * member ) [static]
参数 解释
const QObject * sender 信号谁发出的
const char * signal 发出什么信号 ,发送者的类名::信号的名字
const QObject * receiver 谁接收
const char * member 接受者干啥,信号处理函数,接受者的类名::槽函数名字
函数的作用 连接信号与槽,当信号发出者发出一个信号后,由接收者接收,当该信号被触发时,接收者执行信号处理函数
#include "mainwidget.h"//该函数的功能是当按下的时候发生的,接收者的处理是关闭窗口
MainWidget::MainWidget(QWidget *parent): QWidget(parent)
{b1.setParent(this);b1.setText("close");b1.move(10,10);//QPushButton::pressed:代表发送者发送的信号//MainWidget::close:代表接收者执行的动作/*[signal] void QAbstractButton::pressed()This signal is emitted when the button is pressed down.See also released() and clicked().*/connect(&b1,&QPushButton::pressed,this,&MainWidget::close);
}MainWidget::~MainWidget()
{delete b2;
}

5. 自定义槽函数

  1. 自定义槽函数(和普通函数用法基本一致)
  2. QT5的槽函数:任意的函数、普通全局函数、静态函数
  3. 槽函数需要和信号一致(参数,返回值)
  4. 由于信号是没有返回值的,所以槽一定是没有返回值的

mainwidget.h

#ifndef MAINWIDGET_H
#define MAINWIDGET_H#include <QWidget>
#include <QPushButton>class MainWidget : public QWidget
{Q_OBJECTpublic:MainWidget(QWidget *parent = 0);~MainWidget();void MySolt();//自定义槽函数声明
private:QPushButton b1;QPushButton* b2;
};#endif // MAINWIDGET_H

mainwidget.cpp

#include "mainwidget.h"MainWidget::MainWidget(QWidget *parent): QWidget(parent)
{b1.setParent(this);b1.setText("close");b1.move(10,10);//b2->serParent(this);b2 = new QPushButton(this);b2->setText("99999");b2->move(99,99);/*void QAbstractButton::released()This signal is emitted when the button is released.void QWidget::hide()Hides the widget. This function is equivalent to setVisible(false).Note: If you are working with QDialog or its subclasses and you              invoke the show() function after this function, the dialog will be  displayed in its original position.*///关联b2按钮和主窗口,当按钮抬起时执行MySolt自定义槽函数connect(b2,&QPushButton::released,this,&MainWidget::MySolt);//关联b2按钮和b1按钮,当按钮抬起时执行hide槽函数connect(b2,&QPushButton::released,&b1,&QPushButton::hide);
}void MainWidget::MySolt()//自定义槽函数实现
{//将b2按钮当中的内容换为666b2->setText("6666");
}MainWidget::~MainWidget()
{delete b2;
}

指定父对象和信号与槽相关推荐

  1. Qt学习:文件介绍+对象树+信号和槽

    Qt. 文章目录 Qt. 1.qr的优点 2.成功案例 3.QWidget.QMainWindow和QDialog之间的关系 4.mian.cpp文件 5..pro文件 6..h文件 7.命名规范+快 ...

  2. 【Qt教程】1.4 - Qt5第一个控件 按钮QPushButton 指定父对象

    目录 一.按钮 QPushButton 1.1 按钮帮助手册 1.2 按钮控件常用API 1.3 创建一个按钮 1.4 指定父对象 / 设置父窗口 1.5 其他API演示 一.按钮 QPushButt ...

  3. QT中信号与槽的常见使用

    一.标准信号与槽函数 有些信号和槽的函数模板都已经被写好了,只需要调用即可 下面是一个点击按钮关闭窗口的程序 .h文件 #ifndef MYWIDGET_H #define MYWIDGET_H#in ...

  4. Qt 信号与槽 讲解与案例

    文章目录 信号与槽 绑定信号与槽 简单案例:按钮的点击 自定义槽函数 自定义信号 信号和槽重载二义性问题 解决方案 案例: 实现两个窗口间的切换 信号与槽 所谓信号槽,实际就是观察者模式(发布-订阅模 ...

  5. QT学习笔记(4) 信号和槽

    一.代码编写 在上一次的学习中,我们把所有的控件布局和控制信息都放在主函数中,这样极其不方便开发和维护. 然后我们又发现在打开一个窗体时,其实最开始是先执行的构造函数.所以我们就想到可以把当前对象和子 ...

  6. Python 小白从零开始 PyQt5 项目实战(3)信号与槽的连接

    本系列面向 Python 小白,从零开始实战解说应用 QtDesigner 进行 PyQt5 的项目实战. 什么叫从零开始?从软件安装.环境配置开始.不跳过一个细节,不漏掉一行代码,不省略一个例图. ...

  7. QT Core | 信号槽03 - 自定义信号与槽

    文章目录 一.前言 二.新建一个QT控制台项目 2.1.New File or Project 2.2.Project Location 2.3.Define Build System 2.4.Kit ...

  8. python槽怎么用_PyQt4信号与槽详解

    GUI 的程序开发人员并非需要甚至根本不需要知道所有的控件实现的底层细节,我们只需要知道当按钮按下时能够适当的相应即可.基于这一原因,Qt 和 pyqt 提供了两种通信机制:低级事件处理机制和高级事件 ...

  9. Python深度学习实战PyQt5信号与槽的连接

    本文讲解信号与槽的连接机制,详细示范各种类型的信号/槽连接的实现方法,这是图形用户界面的核心内容.还将介绍面向对象的程序设计,这是图形用户界面的基本思想 目录 1. 信号与槽(Signals and ...

最新文章

  1. oracle 查询历史sql执行最慢和执行次数最多的sql
  2. JAVA实现包含main函数的栈问题(《剑指offer》)
  3. 【SSH框架】之Hibernate系列一
  4. POJ 2932 圆扫描线
  5. 汽车之家购买价格PC真正的原因阿拉丁
  6. 《剑指offer》给定一颗二叉搜索树,请找出其中的第k大的结点。
  7. 分布式系统认证方案_分布式系统认证方案_Spring Security OAuth2.0认证授权---springcloud工作笔记136
  8. [bzoj 3110] [ZJOI2013] K大数查询
  9. data-index在react里怎样表达_对牛弹琴,在英语里该怎样地道表达?
  10. grideh SelectedRows Bookmark
  11. 计算机五个盘,电脑分盘分几个盘合适,您知道吗?
  12. 解混淆/脱壳工具 - De4dot
  13. 揭开牙病之谜 与牙医说再见转
  14. 137.DOM效果实现:百度换肤
  15. 简单C语言程序的编写,c语言编写简单程序.doc
  16. java网络爬虫模拟登录案例教学2
  17. codesys工程ST语言学习笔记(一)建立工程与编译
  18. U-Net在2022年相关研究的论文推荐
  19. layim之整合WebSocket即时通讯
  20. python笔记(五)

热门文章

  1. (轉貼) ThinkPad鍵盤設計原理和哲學 (NB) (ThinkPad)
  2. docker-ce私有仓库搭建
  3. angular-ui-router路由备忘
  4. Linux学习日记——源码编译Apache
  5. Vue 2.3、2.4 知识点小结
  6. 第一章 简单工厂模式
  7. 常见问题kernel调优
  8. 【selenium】 selenium web测试工具介绍(一)
  9. CodeForces - 1454F Array Partition(线段树+二分)
  10. POJ - 2987 Firing(最大权闭合图)