#include "MyTableView.h"
MyTableView::MyTableView(QWidget *parent):QTableView(parent){
this->setEditTriggers(QAbstractItemView::NoEditTriggers);//设置tableview只读属性
this->setSelectionBehavior(QAbstractItemView::SelectRows);//整行选中的方式
this->setSelectionMode(QAbstractItemView::SingleSelection);//设置为可以选中单个目标
//this->verticalHeader()->setVisible(false);//隐藏列表头
this->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//行自适应宽度
this->resizeRowsToContents();//根据内容自动调整给定列宽
//qTableView->verticalHeader()->setVisible(true);//显示列表头
//qTableView->horizontalHeader()->setVisible(true);//显示行表头
//添加行表头
tableViewModel = new QStandardItemModel();
//tableViewModel->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("编号")));
tableViewModel->setHorizontalHeaderItem(0, new QStandardItem(QObject::tr("闹钟时间")));
tableViewModel->setHorizontalHeaderItem(1, new QStandardItem(QObject::tr("闹钟事件")));
tableViewModel->setHorizontalHeaderItem(2, new QStandardItem(QObject::tr("备注")));
this->setColumnWidth(0, 35);//设置0列的宽度为35
this->setColumnWidth(1, 121);
tableViewModel->sort(4, Qt::AscendingOrder);//设置排序方式,按提醒时间升序显示
//利用setModel()方法将数据模型与QTableView绑定
this->setModel(tableViewModel);
//此信号为双击信号
connect(this, SIGNAL(doubleClicked(QModelIndex)), this, SLOT(onDoubleClicked(QModelIndex)));
}
/*添加一行信息*/
int MyTableView::addRowData(EventStruct *eventList) {
QList<QStandardItem*> standardItem;
//standardItem.append(new QStandardItem(eventList->numberString));
standardItem.append(new QStandardItem(eventList->alarmClockTime));
standardItem.append(new QStandardItem(eventList->alarmClockString));
standardItem.append(new QStandardItem(eventList->remarkString));
tableViewModel->appendRow(standardItem);
return 0;
}
/*双击信号槽,此函数只能打印当前行被双击的那一列数据,并非是整行*/
void MyTableView::onDoubleClicked(QModelIndex modelIndex) {
QStandardItem *qStandardItem = tableViewModel->itemFromIndex(modelIndex);
QMessageBox::about(this, "About", qStandardItem->text());
//getCurrentRowData();
#if MYTABLEVIEW_DEBUG
//获取某一列的宽度
qDebug()<<"MyTableView:";
//qDebug()<<"编号长度:"<<this->columnWidth(0);
qDebug()<<"闹钟时间长度:"<<this->columnWidth(0);
qDebug()<<"闹钟事件长度:"<<this->columnWidth(1);
qDebug()<<"备注长度:"<<this->columnWidth(2);
#endif
}
/*获取当前选中行中每列的信息*/
void MyTableView::getCurrentRowData(EventStruct *eventList) {
int currentRowNum = this->currentIndex().row();//获取当前选中行号
//分别获取当前选中行的每一列数据
//eventList->numberString = tableViewModel->data(tableViewModel->index(currentRowNum, 0)).toString();
eventList->alarmClockTime = tableViewModel->data(tableViewModel->index(currentRowNum, 0)).toString();
eventList->alarmClockString = tableViewModel->data(tableViewModel->index(currentRowNum, 1)).toString();
eventList->remarkString = tableViewModel->data(tableViewModel->index(currentRowNum, 2)).toString();
}
//删除当前选中行
void MyTableView::reRowData()
{
int currentRowNum = -1;
currentRowNum = this->currentIndex().row();
if (currentRowNum == -1) {
QMessageBox::about(this, "About", "请选择要删除的数据");
} else {
if(QMessageBox::Yes == QMessageBox::warning(this, tr(SYSTEM_NAME),
tr("确定删除此条定时数据"),
QMessageBox::Yes | QMessageBox::No, QMessageBox::Yes)) {
tableViewModel->removeRow(currentRowNum);
}
}
}
EventStruct数据结构:
struct EventStruct {
QString numberString; //事件编号
QString alarmClockTime; //闹钟时间
QString alarmClockString; //闹钟事件
QString remarkString;//备注
};