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的很多屬性沒有提供接口修改,需要使用到代理,有機會再總結

 

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