|
|
|
|
|
#pragma once
|
|
|
|
|
|
|
|
|
|
|
|
#include <QComboBox>
|
|
|
|
|
|
#include <QListView>
|
|
|
|
|
|
#include <QApplication>
|
|
|
|
|
|
#include <QDesktopWidget>
|
|
|
|
|
|
#include <QShowEvent>
|
|
|
|
|
|
#include <QFontMetrics>
|
|
|
|
|
|
#include <QStyleOptionComboBox>
|
|
|
|
|
|
#include <QPainter>
|
|
|
|
|
|
|
|
|
|
|
|
#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; // 缓存的计算宽度
|
|
|
|
|
|
};
|