QT-ComboBox

一、QComboBox

The QComboBox widget is a combined button and popup list.(来源:官网)

QComboBox部件由一个按钮和弹出列表组成

二、常用函数

函数返回值 函数
void addItem(const QString &text, const QVariant &userData = QVariant())
void addItem(const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
void addItems(const QStringList &texts)
QCompleter * completer() const
int count() const
QVariant currentData(int role = Qt::UserRole) const
int currentIndex() const
QString currentText() const
bool duplicatesEnabled() const
int findData(const QVariant &data, int role = Qt::UserRole, Qt::MatchFlags flags = static_cast<Qt::MatchFlags> ( Qt::MatchExactly | Qt::MatchCaseSensitive )) const
int findText(const QString &text, Qt::MatchFlags flags = static_cast<Qt::MatchFlags> ( Qt::MatchExactly | Qt::MatchCaseSensitive )) const
bool hasFrame() const
virtual void hidePopup()
QSize iconSize() const
void insertItem(int index, const QString &text, const QVariant &userData = QVariant())
void insertItem(int index, const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
void insertItems(int index, const QStringList &list)
InsertPolicy insertPolicy() const
void insertSeparator(int index)
bool isEditable() const
QVariant itemData(int index, int role = Qt::UserRole) const
QAbstractItemDelegate * itemDelegate() const
QIcon itemIcon(int index) const
QString itemText(int index) const
QLineEdit * lineEdit() const
int maxCount() const
int maxVisibleItems() const
int minimumContentsLength() const
QAbstractItemModel * model() const
int modelColumn() const
void removeItem(int index)
QModelIndex rootModelIndex() const
void setCompleter(QCompleter *completer)
void setDuplicatesEnabled(bool enable)
void setEditable(bool editable)
void setFrame(bool)
void setIconSize(const QSize &size)
void setInsertPolicy(InsertPolicy policy)
void setItemData(int index, const QVariant &value, int role = Qt::UserRole)
void setItemDelegate(QAbstractItemDelegate *delegate)
void setItemIcon(int index, const QIcon &icon)
void setItemText(int index, const QString &text)
void setLineEdit(QLineEdit *edit)
void setMaxCount(int max)
void setMaxVisibleItems(int maxItems)
void setMinimumContentsLength(int characters)
void setModel(QAbstractItemModel *model)
void setModelColumn(int visibleColumn)
void setRootModelIndex(const QModelIndex &index)
void setSizeAdjustPolicy(SizeAdjustPolicy policy)
void setValidator(const QValidator *validator)
void setView(QAbstractItemView *itemView)
virtual void showPopup()
SizeAdjustPolicy sizeAdjustPolicy() const
const QValidator * validator() const
QAbstractItemView * view() const

三、常用函数解释

添加数据(带图片)

源码

// 添加图片
QIcon icon("F:/qiangu/qtnull/Null/ICON/icon.jpg");
ui->comboBox->addItem(icon, QString("First"));
ui->comboBox->addItem(icon, QString("Second"));
ui->comboBox->addItem(icon, QString("Third"));
ui->comboBox->addItem(icon, QString("Four"));

// 批量添加
QStringList strList;
ui->comboBox->addItems(strList);

允许编辑、不可编辑、文字居中(下拉框和按钮文字)

源码

QLineEdit *lineEdit = new QLineEdit();
lineEdit->setReadOnly(true);  //仅查看
//lineEdit->setEnabled(true); //可编辑
lineEdit->setAlignment(Qt::AlignCenter);
ui->comboBox->setLineEdit(lineEdit);

for (int i = 0; i < ui->comboBox->count(); ++i) 
{
	ui->comboBox->setItemData(i, Qt::AlignCenter, Qt::TextAlignmentRole);
}

绑定View

QComboBox的Item设置属性后,需要绑定View去实现(比如Item的高度修改)

源码

QListView *ListView = new QListView();
ui->comboBox->setView(ListView);
ui->comboBox->view()->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded);

实时刷新QComboBox数据

源码

/// \brief 重写showPopup(),每次显示时,更新QComboBox的item数据
void NullComboBox::showPopup()
{
    QStringList listData;
    QComboBox::clear();
    QComboBox::addItems(listData);
    QComboBox::showPopup();
}

改变下拉列表位置

源码

void NullComboBox::showPopup()
{
    QComboBox::showPopup();
    QWidget *popup = this->findChild<QFrame*>();
    //向下移动
    popup->move(popup->x(), popup->y() + 4);
    //向上弹出
    //popup->move(popup->x(), popup->y()-this->height()-popup->height());
}

总结

QComboBox的很多属性没有提供接口修改,需要使用到代理,有机会再总结

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章