Qt控件--QComboBox

QComboBox

QComboBox主要的功能是提供一个下拉列表供选择输入。

属性

在这里插入图片描述
Properties:

count : const int
currentData : const QVariant
currentIndex : int
currentText : QString
duplicatesEnabled : bool
editable : bool
frame : bool
iconSize : QSize
insertPolicy : InsertPolicy
maxVisibleItems : int
minimumContentsLength : int
modelColumn : int
sizeAdjustPolicy : SizeAdjustPolicy

editable : bool

是否可以编辑。

currentText : QString

当前的文本信息。

currentIndex

当前显示的项目的序列号。

maxVisibleItems : int

最大可以显示的项。

maxCount : int

最大保存的数目。

insertPolicy : InsertPolicy

此属性保存用于确定用户插入的项目应出现在组合框中的位置的策略。默认值为 InsertAtBottom,表示新项目将出现在项目列表的底部。

InsertPolicy值的描述:

ConstantValueDescription
QComboBox::NoInsert0该字符串不会插入到组合框中。
QComboBox::InsertAtTop1该字符串将作为组合框中的第一项插入。
QComboBox::InsertAtCurrent2当前项目将被字符串替换。
QComboBox::InsertAtBottom3字符串将插入到最后一项之后
QComboBox::InsertAfterCurrent4该字符串插入在组合框中的当前项目之后。
QComboBox::InsertBeforeCurrent5该字符串插入在组合框中的当前项目之前。
QComboBox::InsertAlphabetically6该字符串按字母顺序插入组合框中。

sizeAdjustPolicy : SizeAdjustPolicy

此属性包含描述内容更改时组合框大小如何更改的策略。默认值为 AdjustToContentsOnFirstShow。

ConstantValueDescription
QComboBox::AdjustToContents0组合框将始终根据内容进行调整
QComboBox::AdjustToContentsOnFirstShow1组合框将在第一次显示时调整其内容。
QComboBox::AdjustToMinimumContentsLength2改用 AdjustToContents 或 AdjustToContentsOnFirstShow。
QComboBox::AdjustToMinimumContentsLengthWithIcon3组合框将调整为 minimumContentsLength 加上图标的空间。

minimumContentsLength : int

此属性包含应适合组合框的最小字符数。默认值为 0。如果将此属性设置为正值,则 minimumSizeHint() 和 sizeHint() 会将其考虑在内。

iconSize : QSize

此属性保存组合框中显示的图标的大小。除非明确设置,否则将返回当前样式的默认值。此大小是图标可以具有的最大大小;较小尺寸的图标不会放大。

duplicatesEnabled : bool

此属性保存用户是否可以将重复项输入组合框 请注意,始终可以以编程方式将重复项插入组合框。默认情况下,此属性为 false(不允许重复)。

frame : bool

此属性保存组合框是否使用框架绘制自身 如果启用(默认)组合框在框架内绘制自身,否则组合框在没有任何框架的情况下绘制自身。

modelColumn : int

此属性保存模型中可见的列。如果在填充组合框之前设置,则弹出视图不会受到影响,将显示第一列(使用此属性的默认值)。默认情况下,此属性的值为 0。

增加项

ui界面增加

在这里插入图片描述

代码增加

void addItem
{ //"初始化列表"按钮
   QIcon   icon;
   icon.addFile(":/images/icons/aim.ico");
   ui->comboBox->clear();
   for (int i=0;i<20;i++)
      ui->comboBox->addItem(icon,QString::asprintf("Item %d",i)); //带图标
//    ui->comboBox->addItem(QString::asprintf("Item %d",i)); //不带图标
}

如果只是添加字符串列表项,而且数据来源于一个QStringList变量,可以使用addItems()函数,示例代码如下:

ui->comboBox->clear();
QStringList strList;
strList<<"北京"<<"上海"<<"天津"<<"河北省"<<"山东省"<<"山西省";
ui->comboBox->addItems(strList);

添加具有用户数据的项
QComboBox::addItem()函数的两种参数的原型定义如下:

void addItem (const QString &text, const QVariant &userData = QVariant())
void addItem (const QIcon &icon, const QString &text, const QVariant &userData = QVariant())
不管是哪一个addItem()函数,后面都有一个可选的QVariant类型的参数userData,可以利用这个变量存储用户定义数据。

void Widget::on_btnIni2_clicked()
{//初始化具有自定义数据的ComboBox
   QMap<QString, int> City_Zone;
   City_Zone.insert("北京",10);
   City_Zone.insert("上海",21);
   City_Zone.insert("天津",22);
   City_Zone.insert("大连",411);
   City_Zone.insert("锦州",416);
   City_Zone.insert("徐州",516);
   City_Zone.insert("福州",591);
   City_Zone.insert("青岛",532);
   ui->comboBox2->clear();
   foreach(const QString &str,City_Zone.keys())
      ui->comboBox2->addItem(str,City_Zone.value(str));
}

QComboBox列表项的访问

QComboBox存储的项是一个列表,但是QComboBox不提供整个列表用于访问,可以通过索引访问某个项。访问项的一些函数主要有以下几种。

int currentIndex()

返回当前项的序号,第一个项的序号为0。

QString currentText()

返回当前项的文字。

QVariant currentData(int role = Qt::UserRole)

返回当前项的关联数据,数据的缺省角色为role = Qt::UserRole,角色的意义在5.1节详细介绍。

QString itemText(int index)

返回指定索引号的项的文字。

QVariant itemData(int index, int role = Qt::UserRole)

返回指定索引号的项的关联数据。

int count()

返回项的个数。

在一个QComboBox组件上选择项发生变化时,会发射如下两个信号:

void currentIndexChanged(int index)
void currentIndexChanged(const QString &text)

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以在 QTreeView 的 delegate 中重新实现 createEditor() 函数,使其返回一个 QComboBox。然后在 setModelData() 中保存 QComboBox 的值。具体代码实现可以参考以下示例: ```cpp class ComboBoxDelegate : public QStyledItemDelegate { public: QWidget* createEditor(QWidget* parent, const QStyleOptionViewItem& option, const QModelIndex& index) const override { if (index.column() == 0) { return QStyledItemDelegate::createEditor(parent, option, index); } else { QComboBox* comboBox = new QComboBox(parent); comboBox->addItem("Item1"); comboBox->addItem("Item2"); comboBox->addItem("Item3"); return comboBox; } } void setEditorData(QWidget* editor, const QModelIndex& index) const override { if (QComboBox* comboBox = qobject_cast<QComboBox*>(editor)) { QString value = index.model()->data(index, Qt::EditRole).toString(); int index = comboBox->findText(value); comboBox->setCurrentIndex(index); } else { QStyledItemDelegate::setEditorData(editor, index); } } void setModelData(QWidget* editor, QAbstractItemModel* model, const QModelIndex& index) const override { if (QComboBox* comboBox = qobject_cast<QComboBox*>(editor)) { QString value = comboBox->currentText(); model->setData(index, value, Qt::EditRole); } else { QStyledItemDelegate::setModelData(editor, model, index); } } }; QTreeView* treeView = new QTreeView; treeView->setModel(model); treeView->setItemDelegate(new ComboBoxDelegate); ``` 以上代码将在 index.column() == 0 的情况下使用默认的编辑器,而在其他情况下使用 QComboBox 作为编辑器,并设置 QComboBox 中的选项。在 setEditorData() 中从 model 中获取值并将其设置为 QComboBox 的当前选项。在 setModelData() 中将 QComboBox 的当前值保存到 model 中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值