160 lines
3.5 KiB
C++
160 lines
3.5 KiB
C++
#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<QListWidgetItem *> 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<int, QVector< QString> > list)
|
|
{
|
|
stringmap.clear();
|
|
|
|
stringmap = list;
|
|
|
|
reBuildList();
|
|
setCurrent(stringmap.begin().value().at(0));
|
|
}
|
|
|
|
void MultiSelector::setList(QMap<int, QVector<QString> > list, QString current)
|
|
{
|
|
stringmap.clear();
|
|
|
|
stringmap = list;
|
|
|
|
reBuildList();
|
|
setCurrent(current);
|
|
}
|
|
|
|
//重建列表
|
|
void MultiSelector::reBuildList(void)
|
|
{
|
|
ui->listWidget->clear();
|
|
for (QMap<int, QVector< QString> >::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();
|
|
}
|
|
|
|
|
|
|