限制材质名称长度防止属性面板各项属性宽度过长

This commit is contained in:
Hector 2025-09-05 11:37:26 +08:00
parent bc90a4521e
commit ce43355167
3 changed files with 80 additions and 0 deletions

View File

@ -378,10 +378,21 @@ class MainWindow(QMainWindow):
self.addModelToCesiumAction.triggered.connect(self.onAddModelClicked)
#资源菜单
self.assetsMenu = menubar.addMenu('资源')
self.refreshAssetsAction = self.assetsMenu.addAction('刷新资源')
self.refreshAssetsAction.triggered.connect(self.refreshAssetsView)
# 帮助菜单
self.helpMenu = menubar.addMenu('帮助')
self.aboutAction = self.helpMenu.addAction('关于')
def refreshAssetsView(self):
""""刷新资源视图"""
if hasattr(self,'fileView') and self.fileView:
self.fileView.refreshView()
print("资源视图已刷新")
def setupCreateMenuActions(self):
"""统一设置创建菜单的所有动作 - 避免重复代码"""
# 基础对象

View File

@ -3412,6 +3412,9 @@ class PropertyPanelManager:
material_layout = QGridLayout()
material_layout.addWidget(QLabel("名称:"), 0, 0)
limited_length = 25
if len(display_name) > limited_length:
display_name = f"{display_name[:limited_length - 3]}..."
name_label = QLabel(display_name)
# name_label.setStyleSheet("color: #FF6B6B; font-weight: bold;")
material_layout.addWidget(name_label, 0, 1, 1, 3)

View File

@ -315,6 +315,9 @@ class CustomFileView(QTreeView):
print("不支持的文件类型")
super().mouseDoubleClickEvent(event)
from PyQt5.QtCore import QFileSystemWatcher,QTimer
import os
class CustomAssetsTreeWidget(QTreeWidget):
def __init__(self, world, parent=None):
if parent is None:
@ -325,6 +328,18 @@ class CustomAssetsTreeWidget(QTreeWidget):
self.setupUI()
self.setupDragDrop()
#添加文件系统监控器
self.file_watcher = QFileSystemWatcher()
self.file_watcher.directoryChanged.connect(self.onDirectoryChanged)
self.file_watcher.fileChanged.connect(self.onFileChanged)
self.refresh_timer = QTimer()
self.refresh_timer.setSingleShot(True)
self.refresh_timer.timeout.connect(self.refreshView)
#存储监控的目录
self.watched_directories = set()
# 默认加载项目根路径
self.load_file_tree()
# 设置右键菜单
@ -624,6 +639,9 @@ class CustomAssetsTreeWidget(QTreeWidget):
# 加载当前目录内容
self.load_directory_tree(self.current_path, root_item)
#添加目录到监控器
self.addWatchedDirectory(self.current_path)
# 展开根节点
root_item.setExpanded(True)
@ -631,6 +649,54 @@ class CustomAssetsTreeWidget(QTreeWidget):
error_item = QTreeWidgetItem(["❌ 无权限访问此目录"])
self.addTopLevelItem(error_item)
def addWatchedDirectory(self,directory):
"""添加监控目录"""
if os.path.exists(directory) and directory not in self.watched_directories:
if self.file_watcher.addPath(directory):
self.watched_directories.add(directory)
print(f"开始监控目录:{directory}")
try:
for item in os.listdir(directory):
item_path = os.path.join(directory,item)
if os.path.isdir(item_path):
self.addWatchedDirectory(item_path)
except Exception as e:
pass
else:
print(f"无法监控目录:{directory}")
def removeWatchedDirectory(self,directory):
"""移除监控目录"""
if directory in self.watched_directories:
if self.file_watcher.removePath(directory):
self.watched_directories.discard(directory)
print(f"停止监控目录:{directory}")
else:
print(f"无法停止监控目录:{directory}")
def onDirectoryChanged(self,path):
"""目录发生变化时处理"""
print(f"目录变化{path}")
if not self.refresh_timer.isActive():
self.refresh_timer.start(1000)
def onFileChanged(self,path):
"""目录发生变化时的处理"""
print(f"目录变化{path}")
if not self.refresh_timer.isActive():
self.refresh_timer.start(1000)
def refreshView(self):
"""刷新视图"""
print("刷新资源视图...")
try:
expanded_paths = self._saveExpandedState()
self.load_file_tree()
self._restoreExpandedState(expanded_paths)
print("资源视图刷新完成")
except Exception as e:
print(f"刷新资源视图失败{e}")
def load_directory_tree(self, path, parent_item, max_depth=3, current_depth=0):
"""递归加载目录树(类似左侧导航面板)"""
if current_depth >= max_depth: