[bugfix] 调整updateUI内部逻辑,新增信号断开重连机制
This commit is contained in:
parent
f4c197f7f2
commit
59dbf276b8
13
app.py
13
app.py
@ -29,10 +29,6 @@ class MainWindow(QWidget):
|
||||
|
||||
# 初始化日志系统
|
||||
self.log_handler = setup_logger()
|
||||
|
||||
# 加载配置文件
|
||||
self.config = self.load_config()
|
||||
|
||||
# 初始化服务
|
||||
ServiceManager.instance().init_services("192.168.5.4", 12345)
|
||||
# 初始化应用控制器
|
||||
@ -46,9 +42,13 @@ class MainWindow(QWidget):
|
||||
# 设置日志处理器的目标窗口
|
||||
self.log_handler.set_widget(self.widget_log)
|
||||
|
||||
# 加载配置文件
|
||||
self.config = self.load_config()
|
||||
|
||||
# 设置通道显示数量
|
||||
channel_count = self.config['channels']['count']
|
||||
print(f"channel_count: {channel_count}")
|
||||
logger.info(f"通道数量: {channel_count}")
|
||||
|
||||
self.widget_channel.set_visible_channels(channel_count)
|
||||
|
||||
self.widget_main.ui.ListWidget_vLayout.addWidget(self.widget_card)
|
||||
@ -64,7 +64,6 @@ class MainWindow(QWidget):
|
||||
self.widget_main.ui.ListWidget_vLayout.addWidget(self.test_button)
|
||||
|
||||
self.create_filter_widget()
|
||||
print("create_filter_widget")
|
||||
self.setup_connections()
|
||||
|
||||
def load_config(self):
|
||||
@ -140,7 +139,7 @@ if __name__ == '__main__':
|
||||
|
||||
app = QApplication(sys.argv)
|
||||
main_window = MainWindow()
|
||||
logger.info("开始添加测试卡片")
|
||||
logger.info("软件启动")
|
||||
# for i in range(1, 6):
|
||||
# data = CardData(
|
||||
# name=f"测试项目 {i}",
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -531,6 +531,81 @@ class AudioFilterWidget(QWidget):
|
||||
self.ui.pushButton.clicked.connect(lambda: self.send_params_clicked.emit())
|
||||
# self.ui.pushButton_10.clicked.connect(lambda: self.get_params_clicked.emit())
|
||||
|
||||
def disconnect_all_signals(self):
|
||||
"""安全地断开所有UI信号连接"""
|
||||
# 断开参数输入框信号
|
||||
try:
|
||||
self.ui.lineEdit_11.textChanged.disconnect()
|
||||
self.ui.lineEdit_10.textChanged.disconnect()
|
||||
self.ui.lineEdit_13.textChanged.disconnect()
|
||||
self.ui.lineEdit_12.textChanged.disconnect()
|
||||
except TypeError:
|
||||
# 信号可能未连接,忽略错误
|
||||
pass
|
||||
|
||||
# 断开滑块信号
|
||||
try:
|
||||
self.ui.verticalSlider.valueChanged.disconnect()
|
||||
self.ui.verticalSlider_2.valueChanged.disconnect()
|
||||
self.ui.verticalSlider_3.valueChanged.disconnect()
|
||||
self.ui.verticalSlider_4.valueChanged.disconnect()
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
# 断开表格信号
|
||||
try:
|
||||
self.ui.tableWidget.itemSelectionChanged.disconnect()
|
||||
self.ui.tableWidget.itemChanged.disconnect()
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
# 断开按钮信号
|
||||
try:
|
||||
self.ui.pushButton_7.clicked.disconnect() # 添加滤波器按钮
|
||||
self.ui.pushButton_8.clicked.disconnect() # 删除滤波器按钮
|
||||
self.ui.pushButton.clicked.disconnect() # 发送参数按钮
|
||||
except TypeError:
|
||||
pass
|
||||
|
||||
def connect_param_signals(self):
|
||||
"""重新连接所有UI信号"""
|
||||
# 连接参数输入框信号
|
||||
self.ui.lineEdit_11.textChanged.connect(
|
||||
lambda v: self._on_param_changed('delay', v)
|
||||
)
|
||||
self.ui.lineEdit_10.textChanged.connect(
|
||||
lambda v: self._on_param_changed('volume', v)
|
||||
)
|
||||
self.ui.lineEdit_13.textChanged.connect(
|
||||
lambda v: self._on_param_changed('mix_right', v)
|
||||
)
|
||||
self.ui.lineEdit_12.textChanged.connect(
|
||||
lambda v: self._on_param_changed('mix_left', v)
|
||||
)
|
||||
|
||||
# 连接滑块信号
|
||||
self.ui.verticalSlider.valueChanged.connect(
|
||||
lambda v: self._on_slider_changed('freq', v)
|
||||
)
|
||||
self.ui.verticalSlider_2.valueChanged.connect(
|
||||
lambda v: self._on_slider_changed('q', v)
|
||||
)
|
||||
self.ui.verticalSlider_3.valueChanged.connect(
|
||||
lambda v: self._on_slider_changed('gain', v)
|
||||
)
|
||||
self.ui.verticalSlider_4.valueChanged.connect(
|
||||
lambda v: self._on_slider_changed('slope', v)
|
||||
)
|
||||
|
||||
# 连接表格信号
|
||||
self.ui.tableWidget.itemSelectionChanged.connect(self._on_selection_changed)
|
||||
self.ui.tableWidget.itemChanged.connect(self._on_table_item_changed)
|
||||
|
||||
# 连接按钮信号
|
||||
self.ui.pushButton_7.clicked.connect(self._on_add_filter_clicked)
|
||||
self.ui.pushButton_8.clicked.connect(self._on_delete_filter_clicked)
|
||||
self.ui.pushButton.clicked.connect(lambda: self.send_params_clicked.emit())
|
||||
|
||||
def setup_table(self):
|
||||
"""初始化表格设置"""
|
||||
self.header_view = SCheckBoxHeaderView(0, Qt.Horizontal)
|
||||
@ -918,11 +993,17 @@ class AudioFilterWidget(QWidget):
|
||||
def updateUI(self):
|
||||
"""手动触发UI更新"""
|
||||
if hasattr(self, 'model'):
|
||||
# 清空现有数据
|
||||
self.clear_ui_data()
|
||||
# 从模型更新数据
|
||||
self.set_all_params(self.model.to_widget_params())
|
||||
|
||||
# 断开所有信号连接
|
||||
self.disconnect_all_signals()
|
||||
try:
|
||||
# 清空现有数据
|
||||
self.clear_ui_data()
|
||||
# 从模型更新数据
|
||||
self.set_all_params(self.model.to_widget_params())
|
||||
finally:
|
||||
# 确保信号总是被重新连接,即使发生异常
|
||||
self.connect_param_signals()
|
||||
|
||||
def clear_ui_data(self):
|
||||
"""清空UI中的所有数据"""
|
||||
# 清空基础参数
|
||||
@ -944,27 +1025,6 @@ class AudioFilterWidget(QWidget):
|
||||
self.ui.verticalSlider_3.setValue(0)
|
||||
self.ui.verticalSlider_4.setValue(0)
|
||||
|
||||
def disconnect_param_signals(self):
|
||||
"""断开参数信号连接"""
|
||||
self.ui.lineEdit_11.textChanged.disconnect()
|
||||
self.ui.lineEdit_10.textChanged.disconnect()
|
||||
self.ui.lineEdit_13.textChanged.disconnect()
|
||||
self.ui.lineEdit_12.textChanged.disconnect()
|
||||
|
||||
def connect_param_signals(self):
|
||||
"""重新连接参数信号"""
|
||||
self.ui.lineEdit_11.textChanged.connect(
|
||||
lambda v: self._on_param_changed('delay', v)
|
||||
)
|
||||
self.ui.lineEdit_10.textChanged.connect(
|
||||
lambda v: self._on_param_changed('volume', v)
|
||||
)
|
||||
self.ui.lineEdit_13.textChanged.connect(
|
||||
lambda v: self._on_param_changed('mix_right', v)
|
||||
)
|
||||
self.ui.lineEdit_12.textChanged.connect(
|
||||
lambda v: self._on_param_changed('mix_left', v)
|
||||
)
|
||||
|
||||
if __name__ == "__main__":
|
||||
import sys
|
||||
|
@ -187,52 +187,38 @@ class AudioFilterController(QObject):
|
||||
try:
|
||||
self.state = AudioControllerState.UPDATING
|
||||
struct_data = res.data
|
||||
print("struct_data:", struct_data)
|
||||
print("\n")
|
||||
|
||||
# 将结构体数据转换为模型数据
|
||||
model_data = self._convert_struct_data_to_model(struct_data)
|
||||
|
||||
# 暂时断开widget的信号连接
|
||||
if self.widget:
|
||||
self.widget.disconnect_param_signals()
|
||||
# 更新通道参数
|
||||
self.model.set_channel_params(model_data['channel_params'])
|
||||
|
||||
try:
|
||||
# 清除UI数据
|
||||
self.widget.clear_ui_data()
|
||||
# 清除现有滤波器
|
||||
self.model.filters.clear()
|
||||
|
||||
if model_data['channel_id'] == self.model.channel_id:
|
||||
# 只添加有效的滤波器(所有参数都不为0)
|
||||
valid_filters = [
|
||||
filter_param for filter_param in model_data['filters']
|
||||
if any([
|
||||
filter_param.frequency != 0,
|
||||
filter_param.q_value != 0,
|
||||
filter_param.gain != 0,
|
||||
filter_param.slope != 0
|
||||
])
|
||||
]
|
||||
|
||||
# 更新通道参数
|
||||
self.model.set_channel_params(model_data['channel_params'])
|
||||
# 更新model的filters列表
|
||||
self.model.filters = valid_filters
|
||||
|
||||
# 清除现有滤波器
|
||||
self.model.filters.clear()
|
||||
|
||||
if model_data['channel_id'] == self.model.channel_id:
|
||||
# 只添加有效的滤波器(所有参数都不为0)
|
||||
valid_filters = [
|
||||
filter_param for filter_param in model_data['filters']
|
||||
if any([
|
||||
filter_param.frequency != 0,
|
||||
filter_param.q_value != 0,
|
||||
filter_param.gain != 0,
|
||||
filter_param.slope != 0
|
||||
])
|
||||
]
|
||||
|
||||
# 更新model的filters列表
|
||||
self.model.filters = valid_filters
|
||||
|
||||
print("有效的滤波器数量:", len(self.model.filters))
|
||||
print(f"bbbbb, self.model.channel_params:{self.model.channel_params}")
|
||||
|
||||
# 从模型更新数据
|
||||
print(f"aaaaa to_widget_params:{self.model.to_widget_params()}")
|
||||
self.widget.set_all_params(self.model.to_widget_params())
|
||||
|
||||
finally:
|
||||
# 恢复widget的信号连接
|
||||
if self.widget:
|
||||
self.widget.connect_param_signals()
|
||||
print("有效的滤波器数量:", len(self.model.filters))
|
||||
|
||||
# 使用widget的updateUI方法来更新UI
|
||||
if self.widget:
|
||||
self.widget.updateUI()
|
||||
|
||||
self.state = AudioControllerState.IDLE
|
||||
|
||||
except Exception as e:
|
||||
self.state = AudioControllerState.ERROR
|
||||
|
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
@ -1 +1 @@
|
||||
Subproject commit 5d3fc10c5ddbadfb5b8cd4825355fbabc9a42438
|
||||
Subproject commit 0e1cec2c5ddf5e17a624d18d503b8a41cac38def
|
Loading…
Reference in New Issue
Block a user