149 lines
3.2 KiB
C++
149 lines
3.2 KiB
C++
#include "Selector.h"
|
|
#include "ui_Selector.h"
|
|
|
|
Selector::Selector(QWidget *parent) :
|
|
QWidget(parent),
|
|
ui(new Ui::Selector)
|
|
{
|
|
ui->setupUi(this);
|
|
|
|
//load qss
|
|
QFile file(":/qss/Selector.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);
|
|
|
|
}
|
|
|
|
|
|
Selector::~Selector()
|
|
{
|
|
delete ui;
|
|
}
|
|
|
|
|
|
bool Selector::event(QEvent *event)
|
|
{
|
|
if(event->type() == QEvent::Leave)
|
|
{
|
|
this->close();
|
|
}
|
|
return QWidget::event(event);
|
|
}
|
|
|
|
void Selector::focusOutEvent(QFocusEvent *event)
|
|
{
|
|
qDebug() << "focus out" << event;
|
|
}
|
|
|
|
|
|
|
|
//设置分类
|
|
void Selector::setCategory(QStringList list)
|
|
{
|
|
Q_UNUSED(list)
|
|
isHaveCategory = true;
|
|
}
|
|
|
|
//设置当前选中
|
|
void Selector::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 Selector::setList(QStringList list)
|
|
{
|
|
stringmap.clear();
|
|
|
|
int32_t index = 0;
|
|
|
|
for(QStringList::const_iterator i = list.cbegin();i != list.cend();i++)
|
|
{
|
|
stringmap.insert(index,*i);
|
|
index ++;
|
|
}
|
|
reBuildList();
|
|
setCurrent(stringmap.begin().value());
|
|
}
|
|
|
|
void Selector::setList(QStringList list,QString current)
|
|
{
|
|
stringmap.clear();
|
|
|
|
int32_t index = 0;
|
|
|
|
for(QStringList::const_iterator i = list.cbegin();i != list.cend();i++)
|
|
{
|
|
stringmap.insert(index,*i);
|
|
index ++;
|
|
}
|
|
|
|
reBuildList();
|
|
setCurrent(current);
|
|
}
|
|
|
|
//重建列表
|
|
void Selector::reBuildList(void)
|
|
{
|
|
ui->listWidget->clear();
|
|
for (QMap<int,QString>::iterator i = stringmap.begin();i != stringmap.end(); ++i)
|
|
{
|
|
QString Item = i.value();
|
|
|
|
QWidget *widget = new QWidget(ui->listWidget);
|
|
//创建自定义的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 Selector::on_BtnClicked()
|
|
{
|
|
//qDebug() << "btn clicked";
|
|
}
|
|
|
|
void Selector::on_ListClicked(QModelIndex index)
|
|
{
|
|
Q_UNUSED(index)
|
|
//qDebug() << "list clicked" << ui->listWidget->item(index.row())->text();
|
|
}
|
|
|
|
void Selector::on_ListDoubleClicked(QModelIndex index)
|
|
{
|
|
emit confirmValue(ui->listWidget->item(index.row())->text());
|
|
this->close();
|
|
}
|
|
|