qt “sender”: 找不到标识符
时间: 2023-04-02 15:04:51 浏览: 533
这个问题可能是由于您没有包含正确的头文件或没有正确地声明变量导致的。您可以检查一下代码中是否有正确的 #include 和变量声明。如果问题仍然存在,您可以尝试在 Qt 的官方文档或社区中寻找解决方案。
相关问题
不使用self.sender(
如果你不想使用`self.sender()`来确定哪个按钮被点击,那么你需要另一种方式来跟踪每个按钮的状态。一种可能的方法是在创建每个按钮时给它们分配一个唯一的标识符,并将这个标识符传递到`button_toggled`函数。
例如,你可以这样做:
1. 初始化按钮时添加唯一标识符:
```python
for i in range(3):
for j in range(3):
button_id = f"{i}_{j}"
button = QCheckBox(button_id)
buttons.append((button, False)) # 添加一个默认状态False
buttons[-1][0].stateChanged.connect(self.button_toggled)
row.append(button)
```
这里我们在列表中存储了一个元组,第一个元素是按钮,第二个元素是按钮初始时的假定状态。
2. 更新`button_toggled`函数:
```python
def button_toggled(self, state):
button_id = self.sender().objectName() # 获取按钮的标识符
for button, initial_state in buttons:
if button.objectName() == button_id:
button.setChecked(state)
else:
if initial_state or state != Qt.Checked:
button.setChecked(False)
```
现在当按钮状态改变时,我们通过按钮的`objectName()`属性获取其标识符,然后更新相应按钮的状态和所有其他按钮的未选中状态。
qt udp 组播怎么能不接收自己发的数据
在Qt中,如果你想要使用UDP组播并且避免接收自己发出的数据,可以采用以下策略:
1. **设置发送方地址**:当广播数据时,确保使用的是网络接口的一个独立的IP地址,而不是程序运行的实际IP地址。你可以通过`QHostAddress`来创建一个本地非绑定地址,然后设置socket的发送地址。
```cpp
QHostAddress multicastGroup = QHostAddress("239.0.0.1"); // 组播地址
quint16 port = 5000; // 使用某个特定端口
QSocketNotifier notifier(m_castSocket, QSocketNotifier::Read, this);
m_castSocket.bind(QHostAddress(), port); // 绑定到非自身IP
m_castSocket.joinMulticastGroup(multicastGroup);
```
2. **使用源抑制(Source Specific Multicast, SSMP)**:如果你的设备支持SSMP,可以在发送数据时设置一个特定的组成员标识符(Solicited-Join Multicast Identifier),这将防止接收来自同一组成员ID的回显。
3. **数据包过滤**:在服务器端,你还可以在接收数据前检查数据包的源地址,如果发现是自己的IP地址则忽略。
```cpp
if (sender() == m_castSocket.localAddress()) {
return;
}
```
阅读全文