#include "multiselector.h" #include "ui_Multiselector.h" MultiSelector::MultiSelector(QWidget *parent) : QWidget(parent), ui(new Ui::MultiSelector) { ui->setupUi(this); //load qss QFile file(":/qss/MultiSelector.qss"); file.open(QFile::ReadOnly); QTextStream filetext(&file); QString stylesheet = filetext.readAll(); this->setStyleSheet(stylesheet); file.close(); //因为样式表无法设置到这一层,因此手动设置 ui->listWidget->verticalScrollBar()->setStyleSheet("QScrollBar{width:60;background-color:palegoldenrod;}"); connect(ui->listWidget,SIGNAL(clicked(QModelIndex)), this,SLOT(on_ListClicked(QModelIndex))); connect(ui->listWidget,SIGNAL(doubleClicked(QModelIndex)), this,SLOT(on_ListDoubleClicked(QModelIndex))); ui->listWidget->setFocus(); ui->listWidget->setFocusPolicy(Qt::StrongFocus); } MultiSelector::~MultiSelector() { delete ui; } bool MultiSelector::event(QEvent *event) { if(event->type() == QEvent::Leave) { this->close(); } return QWidget::event(event); } //设置分类 void MultiSelector::setCategory(QStringList list) { Q_UNUSED(list) isHaveCategory = true; } //设置当前选中 void MultiSelector::setCurrent(QString value) { QList items; items = ui->listWidget->findItems(value,Qt::MatchCaseSensitive); foreach (QListWidgetItem *item, items) { ui->listWidget->setItemSelected(item,true); ui->listWidget->setCurrentItem(item); } ui->listWidget->setFocus(); } //设置列表 void MultiSelector::setList(QMap > list) { stringmap.clear(); stringmap = list; reBuildList(); setCurrent(stringmap.begin().value().at(0)); } void MultiSelector::setList(QMap > list, QString current) { stringmap.clear(); stringmap = list; reBuildList(); setCurrent(current); } //重建列表 void MultiSelector::reBuildList(void) { ui->listWidget->clear(); for (QMap >::iterator i = stringmap.begin();i != stringmap.end(); ++i) { int index = i.key(); QVector< QString> w = i.value(); QString Seq = w.at(0); QString Type = w.at(1); QWidget *widget = new QWidget(ui->listWidget); QLabel *seq = new QLabel(widget); QLabel *type = new QLabel(widget); seq->setMaximumWidth(80); seq->setMinimumHeight(60); seq->setMinimumWidth(80); seq->setText(Seq); type->setMinimumWidth(80); type->setMinimumHeight(60); type->setText(Type); QHBoxLayout *layout = new QHBoxLayout; layout->setMargin(0); layout->setSpacing(1); layout->addWidget(seq); layout->addWidget(type); widget->setLayout(layout); //创建自定义的item //将widget作为列表的item QListWidgetItem *ITEM = new QListWidgetItem(); //ITEM->setText(Item); //ITEM->setTextAlignment(Qt::AlignHCenter | Qt::AlignVCenter); ui->listWidget->addItem(ITEM); ui->listWidget->setItemWidget(ITEM, widget); } } //一旦点击,那么返回一个item的string void MultiSelector::on_BtnClicked() { //qDebug() << "btn clicked"; } void MultiSelector::on_ListClicked(QModelIndex index) { Q_UNUSED(index) //qDebug() << "list clicked" << ui->listWidget->item(index.row())->text(); } void MultiSelector::on_ListDoubleClicked(QModelIndex index) { emit confirmValue(index.row()); this->close(); }