-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcommandscriptdialog.cpp
More file actions
104 lines (85 loc) · 3.36 KB
/
commandscriptdialog.cpp
File metadata and controls
104 lines (85 loc) · 3.36 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
#include "commandscriptdialog.hpp"
#include "ui_commandscriptdialog.h"
#include <QMessageBox>
#include "utils.hpp"
CommandScriptDialog::CommandScriptDialog(QWidget *parent,
const QList<Command> commands)
: QDialog(parent), ui(new Ui::CommandScriptDialog) {
ui->setupUi(this);
setWindowTitle(QString("指令执行脚本(鼠标左键选择需要执行的指令)"));
QIntValidator *validator = new QIntValidator(1, 99999);
ui->timeLineEdit->setValidator(validator);
commandItemModel = new QStandardItemModel(this);
ui->listView->setModel(commandItemModel);
int index = 1;
for (const Command &cmd : commands) {
QString itemText = QString("%1.【%2】%3")
.arg(index++)
.arg(cmd.getRemark())
.arg(cmd.getValue());
QStandardItem *item = new QStandardItem(itemText);
// 保存到Qt默认缓存体系,方便后面取用
item->setData(cmd.getRemark(), Qt::UserRole);
item->setData(cmd.getValue(), Qt::UserRole + 1);
item->setEditable(false);
commandItemModel->appendRow(item);
}
connect(ui->listView->selectionModel(),
&QItemSelectionModel::selectionChanged, this,
&CommandScriptDialog::onCommandSelectionChanged);
connect(ui->confirmButton, &QPushButton::clicked, this,
&CommandScriptDialog::onConfirmButtonClicked);
connect(ui->cancelButton, &QPushButton::clicked, this,
&CommandScriptDialog::onCancelButtonClicked);
}
void CommandScriptDialog::onCommandSelectionChanged(
const QItemSelection &selected, const QItemSelection &deselected) {
ui->listWidget->clear();
QModelIndexList indexes = ui->listView->selectionModel()->selectedIndexes();
const QModelIndexList &indexRef = indexes;
for (const QModelIndex &index : indexRef) {
// 处理选中的项
QString remarkStr = index.data(Qt::UserRole).toString(); // 备注
QString commandStr = index.data(Qt::UserRole + 1).toString(); // 指令值
QListWidgetItem *item = new QListWidgetItem(remarkStr);
// 缓存数据
item->setData(Qt::UserRole, commandStr);
ui->listWidget->addItem(item);
}
}
void CommandScriptDialog::onConfirmButtonClicked() {
if (ui->listWidget->count() == 0) {
QMessageBox::warning(this, "警告", "未选择任何指令");
return;
}
const auto time = ui->timeLineEdit->text();
if (!Utils::isPositiveInt(time)) {
QMessageBox::warning(this, "警告", "请输入正整数!");
return;
}
accept();
}
QList<ScriptConfig> CommandScriptDialog::getScriptConfigs() const {
// 获取listWidget里面的数据
QList<ScriptConfig> configs;
for (int i = 0; i < ui->listWidget->count(); ++i) {
QListWidgetItem *item = ui->listWidget->item(i);
QString remark = item->text(); // 备注
QString command = item->data(Qt::UserRole).toString(); // 对应的指令值
ScriptConfig cfg;
cfg.setRemark(remark);
cfg.setCommand(command);
bool ok;
const auto time = ui->timeLineEdit->text();
qint16 interval = static_cast<qint16>(time.toInt(&ok));
if (ok) {
cfg.setInterval(interval);
} else {
cfg.setInterval(1000);
}
configs.append(cfg);
}
return configs;
}
void CommandScriptDialog::onCancelButtonClicked() { close(); }
CommandScriptDialog::~CommandScriptDialog() { delete ui; }