.h
#ifndef COMMITWORKDIALOG_H
#define COMMITWORKDIALOG_H
#include <QDialog>
namespace Ui {
class CommitWorkDialog;
}
class CommitWorkDialog : public QDialog
{
Q_OBJECT
public:
explicit CommitWorkDialog(QWidget *parent = nullptr);
~CommitWorkDialog();
void fillData(const QList<int> &worklist);
QList<int> getData();
private:
void connectAll();
private:
Ui::CommitWorkDialog *ui;
// QObject interface
public:
bool eventFilter(QObject* watched, QEvent* event);
};
#endif // COMMITWORKDIALOG_H
.cpp
#include "CommitWorkDialog.h"
#include "ui_CommitWorkDialog.h"
#include<QDebug>
#include <QMouseEvent>
CommitWorkDialog::CommitWorkDialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::CommitWorkDialog)
{
ui->setupUi(this);
ui->tableWidget_work->verticalHeader()->setVisible(false);
ui->tableWidget_work->verticalHeader()->hide();
ui->tableWidget_work->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
// 拖拽设置
//注册事件过滤器
ui->tableWidget_work->viewport()->installEventFilter(this);
ui->tableWidget_work->setDragDropMode(QAbstractItemView::InternalMove); // 内部移动
ui->tableWidget_work->setDropIndicatorShown(true); // drop位置 提示
ui->tableWidget_work->setSelectionBehavior(QAbstractItemView::SelectRows);
ui->tableWidget_work->setColumnCount(1);
QStringList headList;headList<<QStringLiteral("作业序号");
ui->tableWidget_work->setHorizontalHeaderLabels(headList);
connectAll();
}
CommitWorkDialog::~CommitWorkDialog()
{
delete ui;
}
void CommitWorkDialog::fillData(const QList<int> &worklist)
{
ui->tableWidget_work->setRowCount(worklist.size());
for (int i = 0; i < worklist.size(); ++i)
{
ui->tableWidget_work->setItem(i,0,new QTableWidgetItem(QString::number(worklist.at(i))));
}
for (int i=0;i<ui->tableWidget_work->rowCount();i++)
{
ui->tableWidget_work->item(i,0)->setTextAlignment(Qt::AlignHCenter|Qt::AlignVCenter);
}
}
QList<int> CommitWorkDialog::getData()
{
QList<int> workList;
for (int i=0;i<ui->tableWidget_work->rowCount();i++)
{
int sequence=ui->tableWidget_work->item(i,0)->text().toInt();
workList.append(sequence);
}
return workList;
}
void CommitWorkDialog::connectAll()
{
connect(ui->pushButton_commit,&QPushButton::clicked,this,&CommitWorkDialog::accept);
connect(ui->pushButton_cancel,&QPushButton::clicked,this,&CommitWorkDialog::close);
}
bool CommitWorkDialog::eventFilter(QObject* watched, QEvent* event)
{
//目标处插入一行(原来的数据给目标),删除原来一行
if(watched == ui->tableWidget_work->viewport())
{
if(event->type() == QEvent::Drop)
{
QDropEvent *dropEvent=static_cast<QDropEvent*>(event);
// 原行号与目标行号的确定
int row_src,row_target;
row_src = ui->tableWidget_work->currentRow();
QTableWidgetItem *item = ui->tableWidget_work->itemAt(dropEvent->pos()); //获取落点的item
if(item)
{ //判断是否为空
row_target = item->row();//不为空 获取其行号
//考虑插入新行 移除原行的上下变化
if(row_src>row_target)
{
row_src+=1;
}
else if (row_src<row_target)
{
row_target+=1;
}
ui->tableWidget_work->insertRow(row_target);// 插入一行
// 执行移动
for(int i = 0;i < ui->tableWidget_work->columnCount();i++)// 遍历列
{
ui->tableWidget_work->setItem(row_target,i,ui->tableWidget_work->takeItem(row_src,i));// 每一列item的移动
}
ui->tableWidget_work->removeRow(row_src);// 删除原行
return true;
}
return true;
}
}
return QWidget::eventFilter(watched,event);
}
网友评论