添加多选选择器,尝试修复插入的bug
This commit is contained in:
@@ -21,6 +21,7 @@ DISTFILES += \
|
||||
FORMS += \
|
||||
$$PWD/Inputter.ui \
|
||||
$$PWD/MissionUI.ui \
|
||||
$$PWD/Multiselector.ui \
|
||||
$$PWD/Selector.ui \
|
||||
$$PWD/propertyui.ui
|
||||
|
||||
@@ -28,6 +29,7 @@ HEADERS += \
|
||||
$$PWD/Inputter.h \
|
||||
$$PWD/JsonHelper.h \
|
||||
$$PWD/MissionUI.h \
|
||||
$$PWD/Multiselector.h \
|
||||
$$PWD/Selector.h \
|
||||
$$PWD/propertyui.h
|
||||
|
||||
@@ -35,11 +37,12 @@ SOURCES += \
|
||||
$$PWD/Inputter.cpp \
|
||||
$$PWD/JsonHelper.cc \
|
||||
$$PWD/MissionUI.cpp \
|
||||
$$PWD/Multiselector.cpp \
|
||||
$$PWD/Selector.cpp \
|
||||
$$PWD/propertyui.cpp
|
||||
|
||||
RESOURCES += \
|
||||
$$PWD/inputterres.qrc
|
||||
$$PWD/MissionUIres.qrc
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,142 @@
|
||||
#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/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);
|
||||
|
||||
}
|
||||
|
||||
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(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 MultiSelector::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 MultiSelector::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 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(ui->listWidget->item(index.row())->text());
|
||||
this->close();
|
||||
}
|
||||
|
||||
|
||||
|
||||
@@ -0,0 +1,71 @@
|
||||
#ifndef MULTISELECTOR_H
|
||||
#define MULTISELECTOR_H
|
||||
|
||||
#include <QWidget>
|
||||
#include "QDebug"
|
||||
#include "QMap"
|
||||
#include "QPushButton"
|
||||
#include <QModelIndex>
|
||||
#include "QHBoxLayout"
|
||||
#include <QMimeData>
|
||||
#include <QScrollBar>
|
||||
#include "QFile"
|
||||
|
||||
namespace Ui {
|
||||
class MultiSelector;
|
||||
}
|
||||
|
||||
class MultiSelector : public QWidget
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
public:
|
||||
explicit MultiSelector(QWidget *parent = nullptr);
|
||||
~MultiSelector();
|
||||
|
||||
|
||||
public slots:
|
||||
|
||||
void setCategory(QStringList list);
|
||||
void setCurrent(QString value);
|
||||
|
||||
void setList(QStringList list);
|
||||
void setList(QStringList list,QString current);
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
signals:
|
||||
|
||||
void confirmValue(QVariant);
|
||||
|
||||
private slots:
|
||||
|
||||
void on_BtnClicked();
|
||||
|
||||
void on_ListClicked(QModelIndex index);
|
||||
|
||||
void on_ListDoubleClicked(QModelIndex index);
|
||||
|
||||
void reBuildList(void);
|
||||
|
||||
|
||||
protected:
|
||||
|
||||
bool event(QEvent *event);
|
||||
|
||||
private:
|
||||
|
||||
bool isHaveCategory = false;
|
||||
|
||||
|
||||
|
||||
private:
|
||||
Ui::MultiSelector *ui;
|
||||
|
||||
QMap<int,QString> stringmap;
|
||||
|
||||
};
|
||||
|
||||
#endif // MULTISELECTOR_H
|
||||
@@ -0,0 +1,39 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<ui version="4.0">
|
||||
<class>MultiSelector</class>
|
||||
<widget class="QWidget" name="MultiSelector">
|
||||
<property name="geometry">
|
||||
<rect>
|
||||
<x>0</x>
|
||||
<y>0</y>
|
||||
<width>332</width>
|
||||
<height>486</height>
|
||||
</rect>
|
||||
</property>
|
||||
<property name="windowTitle">
|
||||
<string>Form</string>
|
||||
</property>
|
||||
<layout class="QGridLayout" name="gridLayout">
|
||||
<property name="leftMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="topMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="rightMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="bottomMargin">
|
||||
<number>0</number>
|
||||
</property>
|
||||
<property name="spacing">
|
||||
<number>1</number>
|
||||
</property>
|
||||
<item row="0" column="0">
|
||||
<widget class="QListWidget" name="listWidget"/>
|
||||
</item>
|
||||
</layout>
|
||||
</widget>
|
||||
<resources/>
|
||||
<connections/>
|
||||
</ui>
|
||||
@@ -29,6 +29,16 @@
|
||||
font: 75 20px "Arial";
|
||||
}
|
||||
|
||||
.QPushButton#pushButton_Seq:pressed {
|
||||
background-color: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,
|
||||
stop: 0 #dadbde, stop: 1 #f6f7fa);
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
.QLabel {
|
||||
background-color: #FFFFFF;
|
||||
padding: 3px;
|
||||
|
||||
Reference in New Issue
Block a user