QT中使用Qcombox和QCompleter实现可编辑的combox下拉提示,并设置样式

QT中有一个QCompleter控件,这个控件可以绑在所有的输入控件上,用来下拉提示信息。

不废话直接上分代码:    

        QStringList strings;
        QComboBox *comboBox = new QComboBox();
        strings << "Biao" << "Biao Huang" << "Mac" << "MacBook" << "MacBook Pro" << "Mac Pro"; 
 
      comboBox->addItems(strings);  
      comboBox->setEditable(true);  

       completer = new QCompleter(strings, this);
        completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion);
        //设置下拉提示popup的样式
       completer->popup()->setStyleSheet("    background-color: #294662;\
                                        color: #ffffff;\
                                        border: 1px solid #375C80;\
                                        border-radius: 5px;\
                                        padding: 0px 0px 0px 0px;\
                                        min-width: 17px;\
                                        font: 14px \"Arial\";");        

        ui->comboBox->setCompleter(completer);//绑定completer到combobox





  • 7
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
首先,在Qt的工程添加一个QComboBox控件。然后,在需要的地方添加以下代码: ```cpp // 创建ComboBox的Model QStandardItemModel *model = new QStandardItemModel(); // 添加ComboBox的Item QStandardItem *item1 = new QStandardItem(QIcon(":/images/image1.png"), "Item 1"); QStandardItem *item2 = new QStandardItem(QIcon(":/images/image2.png"), "Item 2"); model->appendRow(item1); model->appendRow(item2); // 将Model设置ComboBox ui->comboBox->setModel(model); // 设置ComboBox的Delegate,用于显示图标和文本 ui->comboBox->setItemDelegate(new QStyledItemDelegate(ui->comboBox)); ui->comboBox->view()->setItemDelegate(new QStyledItemDelegate(ui->comboBox)); // 设置ComboBox样式 ui->comboBox->setStyleSheet("QComboBox::item { padding: 5px; } QComboBox::item:selected { background-color: #e5e5e5; }"); // 设置ComboBox的宽度和高度 ui->comboBox->setFixedSize(150, 30); ``` 其,QStandardItemModel用于管理ComboBox的Item,QStandardItem是每个Item的数据结构,QIcon是每个Item的图标,"Item 1"和"Item 2"是每个Item的文本,setModel用于将Model设置ComboBox,setItemDelegate用于设置Delegate,setItemDelegate用于设置下拉列表的Delegate,setStyleSheet用于设置ComboBox样式,setFixedSize用于设置ComboBox的大小。 在Delegate,需要重写paint()函数,用于绘制每个Item的图标和文本。以下是Delegate的代码: ```cpp class ComboBoxDelegate : public QStyledItemDelegate { public: ComboBoxDelegate(QObject *parent = nullptr) : QStyledItemDelegate(parent) { } void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const override { // 获取Item的数据 QIcon icon = qvariant_cast<QIcon>(index.data(Qt::DecorationRole)); QString text = index.data(Qt::DisplayRole).toString(); // 绘制Item的图标和文本 QRect iconRect = option.rect.adjusted(5, 0, -option.rect.width() / 2, 0); QRect textRect = option.rect.adjusted(option.rect.width() / 2, 0, -5, 0); painter->drawPixmap(iconRect, icon.pixmap(16, 16)); painter->drawText(textRect, Qt::AlignVCenter | Qt::AlignLeft, text); } }; ``` 最后,在ComboBox的currentIndexChanged()信号,更新当前Item的图标和文本。以下是代码: ```cpp void MainWindow::on_comboBox_currentIndexChanged(int index) { QIcon icon = qvariant_cast<QIcon>(ui->comboBox->model()->data(ui->comboBox->model()->index(index, 0), Qt::DecorationRole)); QString text = ui->comboBox->currentText(); ui->label->setText(text); ui->label->setPixmap(icon.pixmap(32, 32)); } ``` 其,label用于显示当前Item的图标和文本。 这样,就可以实现一个QComboBox填充样式下拉列表,并且选择item后当前combox显示填充名称和填充图案,图案在前,文字在后的效果。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值