Qt中QTabWidget添加控件(按钮,label等)以及使用方法
今天遇到了一个问题,已经在QTabWidget每一行添加了一个按钮,我有一个需求就是,点击每一行的按钮都有各自的响应
首先说一下添加控件代码:
添加文字可以用setItem,添加控件就得用setCellWidget了。
self.checkButton = QtWidgets.QPushButton('查看')
self.abnor_act_rec_table.setCellWidget(i, 4, self.checkButton)
我的QTabWidget的表名是abnor_act_rec_table,i表示表格的第i行。
现在我想要每一行的checkButton都得有自己对应的响应,我肯定先要获得每一行的按钮,通过搜索后可以使用cellWidget方法获得,响应又需要槽函数,所以代码如下:
self.abnor_act_rec_table.cellWidget(i, 4).clicked.connect(self.checkPic)
槽函数是checkPic。
然后问题就来了,槽函数怎么知道是我点击的哪个按钮呢,我尝试给checkPic加一个参数,然后emit一个数字,发现发送的全是True和False,这是因为clicked只有True和False两个值。
然后,然后,我乱七八糟的搜索了解到了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等)以及使用方法的更多相关文章
- Android 在布局容器中动态添加控件
这里,通过一个小demo,就可以掌握在布局容器中动态添加控件,以动态添加Button控件为例,添加其他控件同样道理. 1.addView 添加控件到布局容器 2.removeView 在布局容器中删掉 ...
- VC中动态添加控件
VC中动态添加控件 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件: 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立一个 ...
- 在Qt中使用ActiveX控件
Qt的windows商业版本提供了ActiveQt这个framework,使用这个组件我们可以在Qt中使用ActiveX控件,并且也开发基于Qt的ActiveX控件.ActiveQt包含了两个组件QA ...
- Qt中使用ActiveX控件
(转自:http://blog.csdn.net/tingsking18/article/details/5403038) 在Qt中使用ActiveX控件 Qt的windows商业版本提供了Activ ...
- WPF-在Grid中编程添加控件
摘要: 在Grid中编程添加控件,布局控件的位置用到的代码是: gridLayout.Children.Add(textblock); Grid.SetRow(textblock, ); Grid.S ...
- MFC中动态添加控件----寻找多年的秘籍,吐血推荐
原文作者tianwaik 动态控件是指在需要时由Create()创建的控件,这与预先在对话框中放置的控件是不同的. 一.创建动态控件 为了对照,我们先来看一下静态控件的创建. 放置静态控件时必须先建立 ...
- 结合ItemsControl在Canvas中动态添加控件的最MVVM的方式
今天很开心的收获: ItemsControl 中 ItemsPanel的重定义和 ItemContainerStyle 以及 ItemTemplate 三者的巧妙结合,在后台代码不实例化任何控件的前提 ...
- android 在布局中动态添加控件
第一步 final LayoutInflater inflater = LayoutInflater.from(this); 第二步:获取需要被添加控件的布局 final LinearLayout l ...
- 怎样在不对控件类型进行硬编码的情况下在 C#vs 中动态添加控件
文章ID: 815780 最近更新: 2004-1-12 这篇文章中的信息适用于: Microsoft Visual C# .NET 2003 标准版 Microsoft Visual C# .NET ...
- 可以装一把——c#中手动添加控件
TextBox txt = new TextBox(); //文本框控件 //如果想在移动控件位置 point(x,y) txt.Location = new Point(50,50); this.C ...
随机推荐
- 安装.NET Framework4.5以上版本受阻怎么办?
安装和卸载 .NET Framework 受阻疑难解答 - .NET Framework | Microsoft Learn Windows RT 8.1.Windows 8.1 和 Windows ...
- 自用 .net C# List集合和DataTable互转,可自定义表头
using System; using System.Collections.Generic; using System.Data; using System.Linq; using System.R ...
- 浅谈php伪协议的运用
浅谈php伪协议的运用 (133条消息) PHP Filter伪协议Trick总结_php伪协议rot13的用法_swtre33的博客-CSDN博客 php死亡exit()绕过 - xiaolong' ...
- 解决pandas 读取csv文件报错
使用encoding参数: pd.read_csv(path,sep=",",encoding='utf-16') 注意:该参数之后的编码格式,并不是固定的,需要用记事本打开csv ...
- C# CEFSharp WCF开发桌面程序实现“同一网站多开”
前言 孔乙己显出极高兴的样子,将两个指头的长指甲敲着柜台,点头说:"对呀,对呀!CEFSharp,你用过么?访问同一网址实现多开怎么实现?比如我有3个淘宝店,我想同时登录维护,就像传说中的指 ...
- 八万乌云漏洞库——Ubuntu本地Docker搭建环境
环境准备 ubuntu16.04虚拟机 换国内源 vi /etc/apt/sources.list 阿里源 deb http://mirrors.aliyun.com/ubuntu/ xenial m ...
- RobotFrameWork环境搭建及使用
RF环境搭建 首先安装python并且配置python环境变量 pip install robotframework pip install robotframework-ride 生产桌面快捷方式 ...
- [jenkins]连接git仓库
连接gitlab 在jenkins添加全局凭据,类型为"ssh username with private key",填写git用户名和ssh私钥信息(注意是git客户端所在机器的 ...
- Unity的AssetPostprocessor之Model:深入解析与实用案例 1
Unity AssetPostprocessor模型相关函数详解 在Unity中,AssetPostprocessor是一个非常有用的工具,它可以在导入资源时自动执行一些操作.在本文中,我们将重点介绍 ...
- numpy和pandas的基本用法
安装numpy模块 pip install numpy 可以通过导入numpy模块来使用它 import numpy as np 1.创建数组: a = np.array([1, 2, 3, 4, 5 ...