Files
gcs-nf/App/ComponentUI/MultiSelector/multiselector.cpp
T

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();
}