#pragma once #include #include #include #include #include #include #include #include #include "Defines.h" #include "iPlugin_global.h" // 该类基于AI,主要是控件显示内容的优化 // 默认隐藏箭头(可通过 setArrowHidden(false) 恢复),节省的空间全部留给文字显示 // 弹出视图自动计算宽度,根据所有选项文本的最大宽度动态调整 // 弹出位置自适应,防止在屏幕边缘被裁剪 // 文本省略号处理,当控件宽度不足时自动显示"...",但弹出时完整显示 // 支持动态调整:添加/删除/插入项目时自动重新计算弹出宽度 // 屏幕适配:弹出宽度不超过屏幕的指定百分比(默认80%) class I_PLUGIN_EXPORT ZxComboBox : public QComboBox { Q_OBJECT public: explicit ZxComboBox(QWidget *parent = 0); ~ZxComboBox(); // 设置是否启用动态箭头(根据文本长度自动显示/隐藏箭头) void setDynamicArrowEnabled(bool enabled); bool isDynamicArrowEnabled() const { return m_dynamicArrowEnabled; } // 设置是否自动调整弹出视图宽度(默认开启) void setAutoAdjustPopupWidth(bool autoAdjust); bool autoAdjustPopupWidth() const { return m_autoAdjustPopupWidth; } // 重载QComboBox的虚函数 virtual void addItem(const QString &text, const QVariant &userData = QVariant()); virtual void addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant()); virtual void addItems(const QStringList &texts); virtual void insertItem(int index, const QString &text, const QVariant &userData = QVariant()); virtual void insertItem(int index, const QIcon &icon, const QString &text, const QVariant &userData = QVariant()); virtual void insertItems(int index, const QStringList &list); virtual void removeItem(int index); virtual void clear(); protected: virtual void showEvent(QShowEvent *event); virtual void paintEvent(QPaintEvent *event); virtual void showPopup(); virtual void currentIndexChanged(int index); virtual QSize sizeHint() const; private: void updatePopupViewWidth(); void adjustPopupPosition(); private: bool m_dynamicArrowEnabled; // 是否启用动态箭头 bool m_arrowHidden; // 当前箭头是否隐藏(实际状态) double m_popupWidthFactor; // 弹出视图宽度因子 bool m_autoAdjustPopupWidth; // 是否自动调整弹出宽度 int m_maxPopupWidthPercent; // 最大宽度百分比(相对于屏幕) int m_cachedPopupWidth; // 缓存的计算宽度 };