一、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的很多属性没有提供接口修改,需要使用到代理,有机会再总结