QTableView使用笔记

本文详细记录了在Qt编程中使用QTableView组件的过程,包括数据结构的设计、表格的填充与操作,以及可能遇到的问题与解决方案。
摘要由CSDN通过智能技术生成
#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;//备注
};


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值