首页 > 其他分享 >QT自定义带参数信号与槽函数

QT自定义带参数信号与槽函数

时间:2024-03-21 17:33:25浏览次数:25  
标签:20 QT 自定义 int 函数 setGeometry port col row

        我的软件界面是这样的,点击图标按钮后进入子项的参数配置。

        由于按钮众多,每个按钮都有点击事件,一个个去写是在太多麻烦,而且我的这个配置软件各个子项的参数配置页面基本是差不多的,只是传递的参数有差异而已。

        通过自定义一个信号,用于传递按钮按下事件,同时传递被点击按钮的行列号,便于后续处理。

        首先是头文件,用于实现布局及定义信号及槽函数。在这里我们自定义一个信号void port_clicked(int col,int row)以及对应的槽函数void port_setting(int col,int row),其它的则是软件布局涉及到的一些控件。

class mainWidget : public QWidget
{
    Q_OBJECT

public:
    mainWidget(QWidget *parent = nullptr);
    ~mainWidget();

signals:
    void port_clicked(int col,int row);
private:

    QGroupBox *groupBox;
    QGridLayout *gridLayout;
    QPushButton      *portbtn[28][8];
    QLabel      *titlelabel[4];
    QLabel      *subHtitlelabel[28];
    QLabel      *subVtitlelabel[8];

private slots:
    void port_setting(int col,int row);
};

        接下来是cpp文件,首先是创建一个widget,然后在widget里又放了一个groupbox用于放置按钮。按钮使用grid布局后,添加标签字符。然后在布局时用到的循环里发送信号,将各个按钮的点击汇总为port_clicked(int col,int row),再使用connet绑定该信号与槽函数,接下来就可以在port_setting(int col,int row)里统一处理了。

mainWidget::mainWidget(QWidget *parent)
    : QWidget(parent)
{
    this->setGeometry(200,100,1440,810);

    groupBox=new QGroupBox(this);
    groupBox->setGeometry(100,100,1200,600);
    gridLayout=new QGridLayout(this->groupBox);

    QList <QString>list;
    list<<"CON.OUT"<<"NET.OUT"<<"CON.IN"<<"NET.IN";
    QFont ft;
    ft.setPointSize(18);
    for (int i=0;i<4;i++)
    {
        titlelabel[i]=new QLabel(this);
        titlelabel[i]->setText(list[i]);
        titlelabel[i]->setFont(ft);
    }
    titlelabel[0]->setGeometry(400,70,120,20);
    titlelabel[1]->setGeometry(980,70,120,20);
    titlelabel[2]->setGeometry(20,310,120,20);
    titlelabel[3]->setGeometry(20,600,120,20);

    QFont subft;
    subft.setPointSize(18);
    QList <QString>subVlist;
    subVlist<<"1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"1"<<"2";
    QList <QString>subHlist;
    subHlist<<"1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"7"<<"8"<<"9"<<"10"<<"11"<<"12"<<"13"<<"14"<<"15"<<"16"
              <<"1"<<"2"<<"3"<<"4"<<"5"<<"6"<<"7"<<"8"<<"9"<<"10"<<"11"<<"12";
    for (int col=0;col<28;col++)
    {
        for (int row=0;row<8;row++)
        {
            portbtn[col][row]=new QPushButton(this->groupBox);
            portbtn[col][row]->setFlat(true);
            portbtn[col][row]->setIconSize(QSize(24,24));
            if(row<6&&col<16)
                portbtn[col][row]->setIcon(QPixmap(":/image/portB.png"));
            else if(row<8&&col<16)
                portbtn[col][row]->setIcon(QPixmap(":/image/portR.png"));
            else if(col<28&&row<6)
                portbtn[col][row]->setIcon(QPixmap(":/image/portG.png"));
            else
                portbtn[col][row]->setIcon(QPixmap(":/image/portH.png"));

            gridLayout->addWidget(portbtn[col][row],row,col);
            gridLayout->setRowStretch(row,1);
            if(col==0)
            {
                subVtitlelabel[row]=new QLabel(this);
                subVtitlelabel[row]->setText(subVlist[row]);
                subVtitlelabel[row]->setFont(subft);
                subVtitlelabel[row]->setGeometry(100,145+69*row,20,20);
            }
            if(row==0)
            {
                subHtitlelabel[col]=new QLabel(this);
                subHtitlelabel[col]->setText(subHlist[col]);
                subHtitlelabel[col]->setFont(subft);
                subHtitlelabel[col]->setAlignment(Qt::AlignVCenter);
                subHtitlelabel[col]->setGeometry(120+42*col,120,36,20);
            }
            connect(portbtn[col][row], &QPushButton::clicked, this,[=]()
            {
                emit port_clicked(col,row);
            });
        }

        gridLayout->setColumnStretch(col,1);
    }
    groupBox->setLayout(gridLayout);
    connect(this, SIGNAL(port_clicked(int,int)), this, SLOT(port_setting(int,int)));
}

mainWidget::~mainWidget()
{

}

void mainWidget::port_setting(int col,int row)
{
    portbtn[col][row]->setVisible(false);
}

        我这里测试用了setVisible函数,可以看到被点击的按钮都消失了,证明功能有效。

标签:20,QT,自定义,int,函数,setGeometry,port,col,row
From: https://blog.csdn.net/u011436603/article/details/136852241

相关文章

  • 毕业设计——基于PyQT的即时通信软件的设计与实现
    基于PyQT的即时通信软件的设计与实现如有源码需要欢迎联系博主,可提供远程部署支持服务端所需环境名称版本python3.9.12redis-server6.0.18redis4.5.1Flask2.3.2flask-babel3.1.0Flask-RESTful0.3.9功能列表序号功能名称1注册2登录3获取当前用户信......
  • 【HarmonyOS NEXT】解决自定义Dialog跳转新页面返回后原Dialog关闭的问题
    ​关键字:自定义Dialog、Dialog消失、关闭、NEXT 1、问题描述在开发鸿蒙应用的过程中,遇到了这样一个问题:有两个页面A和B,首先在页面A中有一个按钮,点击这个按钮会在页面A中弹出一个自定义的Dialog,在自定义的Dialog中也有一个按钮,点击这个按钮跳转到页面B,在页面B中按返回键返回......
  • Qt QPolarChart极坐标图(阿基米德线、四叶曲线、六叶花瓣、三叶花瓣、心形曲线)
    QChart还有专门画极坐标的类QPolarChart,它的界面是一个圆盘。注意在使用之前,包括命名空间QT_CHARTS_USE_NAMESPACE,.pro文件中也要增加QT+=charts.1#include<QApplication>2#include<QDebug>3#include<QtCharts/QScatterSeries>4#include<QtCharts/QLineSer......
  • Oracle函数7—日期函数(sysdate 、to_date、add_months、last_day......)
    文章目录1、日期获取(sysdate、current_date)2、设置时间格式(to_date、to_char)3、两个日期的差(直接加减)4、月份加减(add_months)5、取某月最后一天(last_day)6、两个日期相差月份数(months_between)7、获取下个周几是几号(next_day)8、获取指定时间的年或月或日(extract)9、时间的四......
  • 前端基础之JavaScript函数
    一、什么是函数在JavaScript中,函数是一种可重复使用的代码块,用于执行特定任务或计算。函数可以接受参数,执行特定的操作,并返回一个值。二、函数的声明函数可以通过函数声明、函数表达式或箭头函数来定义。函数声明:functionfunctionName(parameters){//函数体......
  • C++ 纯虚函数
    纯虚函数优点防止派生类忘记实现虚函数,纯虚函数使得派生类必须实现基类的虚函数。在某些场景下,创建基类对象是不合理的,含有纯虚拟函数的类称为抽象类,它不能直接生成对象。声明方法:在基类中纯虚函数的方法的后面加=0。virtualvoidfuntion()=0;virtualstd::stringGetN......
  • SQL Server分页的内置函数
    SQLServer提供了几个内置函数来实现数据分页,以下是其中常用的函数:ROW_NUMBER():ROW_NUMBER()函数可以为结果集中的每一行添加一个序号,按照指定的排序方式进行排序。结合ROW_NUMBER()函数和WHERE子句,可以实现简单的分页效果。示例:SELECT*FROM(SELECT*,ROW_NUMBER()OV......
  • python 函数(解包、互相调用、作用域、函数的封装、内置函数:eval()、zip()、open())
    函数解包"""1、函数的注释:参数和返回值在注释里可以自动添加显示,只需手动加说明。2、函数的解包【拆包】:函数的参数要传递数据有多个值的时候,中间步骤拿到数据保存在元组或者列表或者字典里。-传递参数的时候加一个*或者**解包-一次拿到元组列表字典的......
  • 实现一个自定义MVC
    在Spring核心思想之AOP:在自定义容器基础上实现AOP功能的容器上实现类似SpringMVC的功能。先分析下SpringMVC功能,在SpringMVC快速搭建初体验中:1、web.xml配置的功能被实现了WebApplicationInitializer的类替代,即不用解析web.xml配置文件直接执行WebApplicationIniti......
  • 若依基本框架内容介绍、多数据源配置、命令、自定义打包脚本
    若依是一个能够帮助我们快速搭建一个管理平台的开发框架官网地址:https://doc.ruoyi.vip/ruoyi/ 一、基本框架内容介绍二、多数据源配置三、命令、自定义打包脚本 一、基本框架内容1.文件结构Common:用的比较多的是utils包中的工具(处理字符串、日期、获取ip、发送请求、......