今天遇到了一个问题,已经在QTabWidget每一行添加了一个按钮,我有一个需求就是,点击每一行的按钮都有各自的响应

首先说一下添加控件代码:

添加文字可以用setItem,添加控件就得用setCellWidget了。

self.checkButton = QtWidgets.QPushButton('查看')
self.abnor_act_rec_table.setCellWidget(i, 4, self.checkButton)

我的QTabWidget的表名是abnor_act_rec_tablei表示表格的第i行。

现在我想要每一行的checkButton都得有自己对应的响应,我肯定先要获得每一行的按钮,通过搜索后可以使用cellWidget方法获得,响应又需要槽函数,所以代码如下:

self.abnor_act_rec_table.cellWidget(i, 4).clicked.connect(self.checkPic)

槽函数是checkPic

然后问题就来了,槽函数怎么知道是我点击的哪个按钮呢,我尝试给checkPic加一个参数,然后emit一个数字,发现发送的全是TrueFalse,这是因为clicked只有TrueFalse两个值。

然后,然后,我乱七八糟的搜索了解到了sender(), 这玩意就用于判断是什么信号给槽发送了信号,于是我在槽函数checkPic中打印了以下self.sender(),发现点击不同按钮打印的是按钮对象以及在内存中的地址,类似<PyQt5.QtWidgets.QPushButton object at 0x000001DDE6F54160>这种东西,确实是分辨出来了,但是我没法用啊,我想知道是哪一行的按钮。

然后我又偶然想到了前几天看代码的一个东西叫做setObjectName(),那么sender()既然是一个对象,那它肯定有个名字,搜了以下可以用objectName()函数获得,因此就解决了,可以用setObjectName()给每个按钮自定义一个名字啊,我给它的名字就是行号,代码如下:

self.checkButton.setObjectName('btn{}'.format(id))

然后在槽函数checkPic中可以直接利用self.sender().objectName()知道是哪一行的按钮发来的信号了。

sender还有很多作用,比如还可以判断是什么对象发来的信号。

Qt中QTabWidget添加控件(按钮,label等)以及使用方法的更多相关文章

  1. Android 在布局容器中动态添加控件

    这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理. 1.addView 添加控件到布局容器 2.removeView 在布局容器中删掉 ...

  2. VC中动态添加控件

    VC中动态添加控件 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个 ...

  3. 在Qt中使用ActiveX控件

    Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件,并且也开发基于Qt的ActiveX控件.ActiveQt包含了两个组件QA ...

  4. Qt中使用ActiveX控件

    (转自:http://blog.csdn.net/tingsking18/article/details/5403038) 在Qt中使用ActiveX控件 Qt的windows商业版本提供了Activ ...

  5. WPF-在Grid中编程添加控件

    摘要: 在Grid中编程添加控件,布局控件的位置用到的代码是: gridLayout.Children.Add(textblock); Grid.SetRow(textblock, ); Grid.S ...

  6. MFC中动态添加控件----寻找多年的秘籍,吐血推荐

    原文作者tianwaik 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立 ...

  7. 结合ItemsControl在Canvas中动态添加控件的最MVVM的方式

    今天很开心的收获: ItemsControl 中 ItemsPanel的重定义和 ItemContainerStyle 以及 ItemTemplate 三者的巧妙结合,在后台代码不实例化任何控件的前提 ...

  8. android 在布局中动态添加控件

    第一步 final LayoutInflater inflater = LayoutInflater.from(this); 第二步:获取需要被添加控件的布局 final LinearLayout l ...

  9. 怎样在不对控件类型进行硬编码的情况下在 C#vs 中动态添加控件

    文章ID: 815780 最近更新: 2004-1-12 这篇文章中的信息适用于: Microsoft Visual C# .NET 2003 标准版 Microsoft Visual C# .NET ...

  10. 可以装一把——c#中手动添加控件

    TextBox txt = new TextBox(); //文本框控件 //如果想在移动控件位置 point(x,y) txt.Location = new Point(50,50); this.C ...

随机推荐

  1. 洛谷 Luogu P1038 [NOIP2003 提高组] 神经网络

    这题看着很吓人实则很简单.求输出层,正着求很麻烦,因为知不道谁连向这个点,所以可以反向建边,反着求. 拓扑+dfs,时间复杂度 \(\text{O(n + m)}\) #include <ios ...

  2. 图像阈值_有cv2.threshold,cv2.adaptiveThreshold 等。

    1.简单阈值 使用的函数:cv2.threshold (src, thresh, maxval, type) 注释: 与名字一样,这种方法非常简单.但像素值高于阈值时,我们给这个像素赋予一个新值(可能 ...

  3. 解决AccessDatabaseEngine.exe 32位64位安装失败问题

    cmd下执行 你的路径\AccessDatabaseEngine.exe /quiet 转载于:https://www.cnblogs.com/64mb/p/10844676.html

  4. Flutter系列文章-Flutter UI进阶

    在本篇文章中,我们将深入学习 Flutter UI 的进阶技巧,涵盖了布局原理.动画实现.自定义绘图和效果.以及 Material 和 Cupertino 组件库的使用.通过实例演示,你将更加了解如何 ...

  5. uniapp APP微信登录、支付、分享以及支付宝支付 实战踩坑记录

    1.微信支付和支付宝支付   先上代码.封装好了的组件    html部分      <template> <view class="rows"> < ...

  6. Python操作Redis大全

    一.字符串 string Python操作Redis的redis模块对字符串(string)的主要操作函数包括:SET.GET.GETSET.SETEX.SETNX.MSET.MSETNX.INCR( ...

  7. C# MySqlHelp类 "DbModel.MySql"数据库操作类

    以前做易语言/PHP的. 最近刚入门C#, 就简单的封装了一个类库, 边学边玩才容易学到东西嘛, 比起sqlserver, 我还是觉得mysql更加有亲切感; 于是模仿ThinkPHP编写了一个&qu ...

  8. 【Qt6】列表模型——抽象基类

    列表模型(Item Model),老周没有翻译为"项目模型",因为 Project 和 Item 都可以翻译为"项目",容易出现歧义.干脆叫列表模型.这个模型也 ...

  9. 五分钟k8s实战-使用Ingress

    背景 前两章中我们将应用部署到了 k8s 中,同时不同的服务之间也可以通过 service 进行调用,现在还有一个步骤就是将我们的应用暴露到公网,并提供域名的访问. 这一步类似于我们以前配置 Ngin ...

  10. 斜率优化DP 学习笔记

    斜率优化 DP 适用情况 适用于求解最优解(最大.最小)问题. 上凸壳与下凸壳 求解步骤 对于任意状态转义方程,设 \(A_i\),\(B_i\),使状态转移方程转化为 \(f_i = \min(f_ ...