1. 先看下完成后的效果,虽然丑,自己用所以懒的调了,就这样吧
2. 思路也很简单,设置坐标和延迟执行时间,然后每次的动作都录入到TableView里面,执行的时候让它顺序执行,所以第一步就是添加TableView到UI里面,然后将它初始化。
void MoveMouse::InitTabView()
{
//设置网格线
ui->tableView->setShowGrid(true);
//网格线画笔
ui->tableView->setGridStyle(Qt::SolidLine);
//设置列名
QStringList columnList;
columnList.append("坐标");
columnList.append("延迟时间");
pItemModel->setHorizontalHeaderLabels(columnList);
ui->tableView->setModel(pItemModel);
}
3. 设置按钮事件,将数据塞入TableView
void MoveMouse::on_setBton_clicked()
{
if(ui->xEdit->text().isEmpty()
|| ui->yEdit->text().isEmpty()
|| ui->delayEdit->text().isEmpty())
{
QMessageBox qMessage(QMessageBox::NoIcon, "Warning", "坐标和延迟时间不能为空!");
qMessage.exec();
return;
}
QString qTempStr;
qTempStr = ui->xEdit->text() + "," + ui->yEdit->text();
QList<QStandardItem*> list;
list << new QStandardItem(qTempStr) << new QStandardItem(ui->delayEdit->text());
pItemModel->insertRow(0, list);
}
4. 删除的时候发现可以多选,多选删除在这里我用不到,所以先按照单条实现
void MoveMouse::on_removeBton_clicked()
{
QModelIndex index;
index = ui->tableView->currentIndex();
ui->tableView->model()->removeRow(index.row());
}
5. 当然还是要禁止多选的,在TableView初始化里面加上限制
//设置只能选中整行
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
//设置只能选中一行
ui->tableView->setSelectionMode(QAbstractItemView::SingleSelection);
6. 从TableView中获取数据然后执行,鼠标点击事件就不放了:
//获取表格行数
int iRowNum = ui->tableView->model()->rowCount();
for ( int i = 0; i < iRowNum; i++ )
{
//获取坐标列
QModelIndex coordinateIndex = ui->tableView->model()->index(i, 0);
QString coordinateStr = ui->tableView->model()->data(coordinateIndex).toString();
QStringList coordinateStrList = coordinateStr.split(',');
//鼠标移动
QCursor::setPos(coordinateStrList[0].toUInt(), coordinateStrList[1].toUInt());
//获取延迟时间
QModelIndex delayIndex = ui->tableView->model()->index(i, 1);
QString delayStr = ui->tableView->model()->data(delayIndex).toString();
DelaySecond(delayStr.toUInt() * 1000);
//鼠标点击
SimulateLeftClick();
}