4、示例代码:
A、单列数据
QComboBox *m_ComboBox=new QComboBox(this); QStandardItemModel *model=new QStandardItemModel(this); //源数据 QList<QStandardItem *> row; QStandardItem *blankitem=new QStandardItem(""); model->appendRow(blankitem); //增加一行空白 QStringList list=getList(); //获取数据函数 foreach (QStringList name, list) { if(!name.isEmpty()){ row.clear(); QStandardItem *item=new QStandardItem(name); model->appendRow(item); //添加一行,2列数据 } } m_ComboBox->setModel(model); //QComboBox设置数据源 QCompleter *completer=new QCompleter(m_ComboBox); completer->setCaseSensitivity(Qt::CaseInsensitive); completer->setModel(model); completer->setCompletionColumn(m_ComboBox->modelColumn()); completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion); completer->setMaxVisibleItems(10); //下拉最大高度 completer->popup()->setStyleSheet("QListView{font:75 12pt \"微软雅黑\";subcontrol-origin: padding;subcontrol-position: top right;width: 20px;}"); //设置弹出的补全列表样式 m_ComboBox->setCompleter(completer); //设置自动补全 m_ComboBox->setStyleSheet("QComboBox{combobox-popup: 0;}"); //linux系统上,防止下拉框过长 m_ComboBox->setMaxVisibleItems(10); //下拉最大高度 B、 多列数据
QComboBox *m_ComboBox=new QComboBox(this); QStandardItemModel *model=new QStandardItemModel(this); //源数据 QList<QStandardItem *> row; QStandardItem *blankitem=new QStandardItem(""); QStandardItem *blankitem1=new QStandardItem(""); row<<blankitem<<blankitem1; model->appendRow(row); //增加一行空白 QStringList list=getList(); //获取数据函数 foreach (QStringList name, list) { if(!name.isEmpty()){ row.clear(); QStandardItem *item=new QStandardItem(name); QString chars=Chinese2PinYin::getFirstPYChars(name); //获取中文拼音首字母 QStandardItem *item1=new QStandardItem(chars); row<<item<<item1; model->appendRow(row); //添加一行,2列数据 } } m_ComboBox->setModel(model); //QComboBox设置数据源 QSortFilterProxyModel *proxy = new QSortFilterProxyModel(m_ComboBox); proxy->setSourceModel(model); proxy->setFilterCaseSensitivity(Qt::CaseInsensitive); proxy->setFilterKeyColumn(-1); //-1表示匹配所有列 QCompleter *completer=new QCompleter(m_ComboBox); completer->setCaseSensitivity(Qt::CaseInsensitive); completer->setModel(proxy); completer->setCompletionColumn(m_ComboBox->modelColumn()); completer->setCompletionMode(QCompleter::UnfilteredPopupCompletion); completer->setMaxVisibleItems(10); //下拉最大高度 completer->popup()->setStyleSheet("QListView{font:75 12pt \"微软雅黑\";subcontrol-origin: padding;subcontrol-position: top right;width: 20px;}"); //设置弹出的补全列表样式 m_ComboBox->setCompleter(completer); //设置自动补全 m_ComboBox->setStyleSheet("QComboBox{combobox-popup: 0;}"); m_ComboBox->setMaxVisibleItems(10); //下拉最大高度 connect(m_ComboBox->lineEdit(),SIGNAL(textEdited(QString)),proxy,SLOT(setFilterFixedString(QString))); //连接QComboxBox的编辑框文字变化信号到QSortFilterProxyModel设置过滤字符槽 //connect(m_ComboBox,SIGNAL(editTextChanged(QString)),proxy,SLOT(setFilterFixedString(QString))); //错误写法,这样写的话,会导致无法用上下键选择相关选项
