首页 > 其他分享 >Qt-day02

Qt-day02

时间:2023-08-01 13:23:09浏览次数:43  
标签:SubWidget Qt day02 void connect QPushButton include MainWidget

 调用重载的信号

 

 

#ifndef MAINWIDGET_H
#define MAINWIDGET_H

#include <QWidget>
#include <QPushButton>
#include <QDebug>
#include "subwidget.h"

class MainWidget : public QWidget
{
    Q_OBJECT

public:
    MainWidget(QWidget *parent = 0);
    ~MainWidget();

    void cancelHandle();
    void slotForWWindow();
    void slotHidenMe();
    void showMe();
    void soltSubMsg(int num,QString msg);

private:
    QPushButton *okBtn;
    QPushButton *cancelBtn;
    QPushButton *helpBtn;
    QPushButton *closeBtn;

    QPushButton *btn3;
    //子窗口对象
    SubWidget subW;
};

#endif // MAINWIDGET_H

 

#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include <QWidget>
#include <QPushButton>
class SubWidget : public QWidget
{
    Q_OBJECT
public:
    explicit SubWidget(QWidget *parent = nullptr);

signals:
    //自定义信号 必须使用signals声明   信号不用实现。如果不加signals关键词就需要实现,不实现就会报错  加上以后就不需要实现了
    /**
      // 1、信号的返回值必须为void
      2、可以有参数
      3、可以重载
      4、信号发送 emit + 信号名
     * @brief signSub
     */
    void signSub();
    void signSub(int,QString);

public slots:
    void mySolt();

private:
    QPushButton *b1;
};

#endif // SUBWIDGET_H

 

 

#include "mainwidget.h"

MainWidget::MainWidget(QWidget *parent)
    : QWidget(parent)
{
    okBtn = new QPushButton(this);
    okBtn->setText("确定按钮");
    okBtn->move(20,100);

    cancelBtn = new QPushButton("取消按钮",this);
    cancelBtn->move(100,100);

    helpBtn = new QPushButton;
    helpBtn->setParent(this);
    helpBtn->setText("帮助");
    helpBtn->move(200,100);


    closeBtn = new QPushButton("关闭按钮",this);
    closeBtn ->move(300,100);

    // cancelBtn 关闭窗口
    connect(closeBtn,&QPushButton::clicked,this,&MainWidget::close);
    connect(cancelBtn,&QPushButton::clicked,this,this->cancelHandle);
    // 自定义槽函数
    /**
      1、QT5中可以是任意的类成员函数,全局函数,静态函数,lambda表达式
      2、槽函数需要与信号对应(返回值,参数)
      3、信号是没有返回值的,即槽函数返回值void
          void mySig(int,double,QString)
          void mySolt(int,double,QString)
     * @brief connect
     */
//    connect(helpBtn,&QPushButton::clicked,this,this->cancelHandle);

    connect(helpBtn,&QPushButton::released,this,&MainWidget::slotForWWindow);



    btn3 = new QPushButton("打开子窗口",this);
    btn3->resize(100,50);
    btn3->move(200,200);
    connect(btn3,&QPushButton::clicked,this,&MainWidget::slotHidenMe);

//    // 接口子页面的信号
//    connect(&subW,&SubWidget::signSub,this,&MainWidget::showMe);
    // 信号重载调用
    /**
      * @brief connect
      */
    void (SubWidget::*MySigSub)() = &SubWidget::signSub;
    // 接口子页面的信号
    connect(&subW,MySigSub,this,&MainWidget::showMe);
    void (SubWidget::*MySigSubPlus)(int,QString) = &SubWidget::signSub;
     connect(&subW,MySigSubPlus,this,&MainWidget::soltSubMsg);



}

MainWidget::~MainWidget()
{

}

void MainWidget::cancelHandle(){
    qDebug() << "您点击了取消按钮" ;
}
void MainWidget::slotForWWindow(){
    qDebug() << "册数传入的值:" ;
    closeBtn->setText("new 关闭");
}
void MainWidget::slotHidenMe()
{
    this->hide();
    subW.show();
}
void MainWidget::showMe()
{
subW.hide();
this->show();
}

void MainWidget::soltSubMsg(int num,QString msg)
{
    qDebug() << "数字:" << num << ",内容:" << msg <<endl;
}

 

#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent) : QWidget(parent)
{

    b1 = new QPushButton("中腾",this);
    b1->resize(100,40);
    setWindowTitle("软件园");

    // 子页面 对 父页面进行操作 自定义信号 间接操作

    resize(400,600);

    connect(b1,&QPushButton::clicked,this,&SubWidget::mySolt);

}

void SubWidget::mySolt()
{
    emit signSub();
    emit signSub(200,"hello 200!!");
}

 

标签:SubWidget,Qt,day02,void,connect,QPushButton,include,MainWidget
From: https://www.cnblogs.com/Mengchangxin/p/17596185.html

相关文章

  • ESP01S刷MQTT固件
    刷个ESP01S把我卡了将近一天,特难受,记录一下正确的烧录固件方式。之前刷了固件总是没一点返回值(输入AT\r\n),只是在电源重接时才会接收到一些乱码,总以为是CH340接出的3.3V电压不稳,换成PL2303HXD串口也没是一样没反应,改成用MCU里提供的电源照样没反应,其实就是刷固件的某些细节弄......
  • qtCreator 读取utf8文本中文乱码
    总是碰到乱码,已经写了(抄了)好几篇关于中文乱码的文章,以为能解决乱码问题了,又又碰到了乱码。是这样的:用的qt5.9.8,编译了一个小程序(mingw),是读取txt文件(utf8),ui->txtEdit->setText(str);显示出来时乱码。后来试了一圈,用下面方法解决了乱码(如果读取超大文件,用这种方法好不好使,我没试过......
  • 《VTK学习笔记》-01 VS2017+QT5.14.2+VTK9.2.6 环境搭建
    参考win10下在Qt中使用VTK(安装VS2017+安装QT5.9.9+编译配置VTK8.2.0)_如何在qt中使用vtk_HBybhy的博客-CSDN博客其他问题就不说了,主要是VS打开cmaker编译后的代码,先生成,等待半个小时完成后,选择右击INSTALL-->仅用于项目-->仅生成INSTALL,等进度条走完vtk_res文件夹里出现了一些文件......
  • Qt将程序打包成.exe文件,并添加图标
    1、在工程中添加一个QtResourceFile,文件名任意2、将.ico后缀的图片放到跟工程文件(.pro)文件同目录下,并在QtResourceFile文件中添加该.ico文件3、添加相关代码,设置窗口图标4、双击打开.pro文件,并在文件末添加上添加完成后ctrl+s保存,此时可以尝试run一下看看窗口图标有没有修......
  • qt的安装
    一、QT在线安装包下载1.官方网站: https://www.qt.io/download2.国内镜像: https://mirrors.tuna.tsinghua.edu.cn/qt/  二、QT安装1.安装界面上面步骤没问题的话,我们已经打开了安装文件(如果第一次安装没有QT账号需要先创建再进行下一步操作,自己输入邮箱和密码然后接收......
  • day02_springboot综合案例
    day02_springboot综合案例订单操作查询所有订单查询所有订单流程查询订单,要把订单对应的产品也要查出来Orders实体类@DatapublicclassOrders{privateStringid;privateStringorderNum;@DateTimeFormat(pattern="yyyy-MM-ddHH:mm")privateDateorderTi......
  • QT信号槽Connect最后一个参数
    connect函数最后一个参数是Qt::ConnectionType,该参数指明信号槽的连接方式。   1.先说说什么是信号槽吧:  当一个对象发生变化,想让与之相关联的其他对象对这个变化做出响应,这时候我们就需要不同对象(这些对象可能在不同线程)的通信。    qt不同于其他框架的最主......
  • 关于使用Qt.labs.platform在arch中报错 ERROR: No native FileDialog implementation
    当跟着QtBook的章节QtQuickControls编写一个ImageViewer,运行时报错:ERROR:NonativeFileDialogimplementationavailable.QtLabsPlatformrequiresQtWidgetsonthissetup.Add'QT+=widgets'to.proandcreateQApplicationinmain().尝试过搜索在cmake中引入Q......
  • 解决QT QGraphicsView提升到QChartView报错的问题
    使用QT提供的QChartView来绘制图表,提升QGraphicsView控件继承QChartView后,然后将QGraphicsView提升到我们自己写的类,怎么才能确保提升后编译不报错呢。[问题描述]使用QGraphicsView显示图表的时候,我们需要将它提升为QChartView.但提升后再此运行一般会发生编译报错,错误发生在......
  • 【VS Code 与 Qt6】QAction 类的一些事
    QAction类表示用户命令的一种抽象,包括命令文本、图标、命令触发后要执行的代码。菜单、工具栏按钮往往存在相同的功能,将这些命令独立抽出来,放到QAction以象上,可避免编写重复的代码。比如“文件”菜单下有“保存”命令,工具栏上也会有“保存”按钮。因此,创建一个表示“保存”的Q......