BookShelf/labelsmanagement.cpp

124 lines
3.9 KiB
C++

#include "labelsmanagement.h"
#include "dbunit.h"
#include <QDebug>
#include <QGridLayout>
#include <QInputDialog>
#include <QLineEdit>
#include <QPushButton>
#include <QSqlError>
#include <QSqlQuery>
using namespace ViewComp;
LabelsManagement::LabelsManagement(DBUnit* tool, QWidget* parent)
: QDialog(parent), db_host(tool), keywords_input(new QLineEdit(this)),
labels_view(new QTableView(this)), labels_model(new QStandardItemModel(this)),
append(new QPushButton("增加", this)), remove(new QPushButton("移除", this))
{
auto layout = new QGridLayout(this);
layout->addWidget(keywords_input, 0, 0, 1, 4);
layout->addWidget(labels_view, 1, 0, 3, 4);
layout->addWidget(append, 4, 0, 1, 2);
layout->addWidget(remove, 4, 2, 1, 2);
labels_view->setModel(labels_model);
labels_model->setHorizontalHeaderLabels(QStringList() << "名称"
<< "简述");
init_labels_model(this->labels_model);
connect(append, &QPushButton::clicked, [this]() {
QInputDialog in;
in.setWindowTitle("输入标签名称");
in.setLabelText("输入重复标签:");
if (in.exec() == QDialog::Rejected)
return;
auto q = db_host->getQuery();
q.prepare("insert into labels_records "
"(name, describe) values(:n, :d)");
q.bindValue(":n", in.textValue());
q.bindValue(":d", "请手动修改简介文字");
if (!q.exec()) {
qDebug() << q.lastError();
return;
}
q.prepare("select record_id from labels_records order by record_id desc");
if (!q.exec()) {
qDebug() << q.lastError();
return;
}
if (q.next()) {
QList<QStandardItem*> row;
row << new QStandardItem(in.textValue());
row.last()->setData(q.value(0), Qt::UserRole + 1);
row << new QStandardItem("请手动修改标签简介");
labels_model->appendRow(row);
}
});
connect(remove, &QPushButton::clicked, [this]() {
auto index = labels_view->currentIndex();
if (!index.isValid())
return;
auto idindex = index.sibling(index.row(), 0);
auto q = db_host->getQuery();
q.prepare("delete from labels_records where record_id=:id");
q.bindValue(":id", idindex.data(Qt::UserRole + 1));
if (!q.exec()) {
qDebug() << q.lastError();
return;
}
labels_model->removeRow(index.row());
});
connect(keywords_input, &QLineEdit::textChanged, this, &LabelsManagement::input_query);
}
void
LabelsManagement::init_labels_model(QStandardItemModel* model)
{
auto q = db_host->getQuery();
q.prepare("select record_id, name, describe from labels_records");
if (!q.exec()) {
qDebug() << q.lastError();
return;
}
model->removeRows(0, model->rowCount());
while (q.next()) {
QList<QStandardItem*> row;
row << new QStandardItem(q.value(1).toString());
row.last()->setData(q.value(0), Qt::UserRole + 1);
row << new QStandardItem(q.value(2).toString());
model->appendRow(row);
}
}
void
LabelsManagement::input_query(const QString& keywords)
{
labels_model->removeRows(0, labels_model->rowCount());
if (keywords.trimmed().isEmpty())
return;
QString string = "select record_id, name, describe from labels_records ";
if (keywords != "*")
string += "where name like '%" + keywords + "%'";
auto q = db_host->getQuery();
q.prepare(string);
if (!q.exec()) {
qDebug() << q.lastError();
return;
}
while (q.next()) {
QList<QStandardItem*> row;
row << new QStandardItem(q.value(1).toString());
row.last()->setData(q.value(0), Qt::UserRole + 1);
row << new QStandardItem(q.value(2).toString());
labels_model->appendRow(row);
}
}