#include "labelsmanagement.h" #include "dbunit.h" #include #include #include #include #include #include #include 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; } QList 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 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 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); } }