#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStandardItem>
#include <QCheckBox>
#include <QTime>
#include <QDebug>
#include "checkboxdelegate.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
initView();
initData();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::initView()
{
// ui->tableView->setColumnWidth(0,50); //设定表格第0列宽度
// ui->tableView->setColumnWidth(1,100);
// ui->tableView->setColumnWidth(2,150);
ui->tableView->verticalHeader()->hide(); //隐藏默认显示的行头
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选中时整行选中
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置表格属性只读,不能编辑
// ui->tableView->setContextMenuPolicy(Qt::CustomContextMenu); //需要在表格使用右键菜单,需要启动该属性
}
void MainWindow::initData()
{
m_pStandardItemModel = new QStandardItemModel(ui->tableView);
m_pStandardItemModel->setColumnCount(4);
m_pStandardItemModel->setRowCount(1000);
m_pStandardItemModel->setHeaderData(0, Qt::Horizontal, QStringLiteral("序号"));
m_pStandardItemModel->setHeaderData(1, Qt::Horizontal, QStringLiteral("名称"));
m_pStandardItemModel->setHeaderData(2, Qt::Horizontal, QStringLiteral("复选框"));
m_pStandardItemModel->setHeaderData(3, Qt::Horizontal, QStringLiteral("QStandardItem"));
connect(ui->tableView, SIGNAL(clicked(const QModelIndex &)), this, SLOT(slotCheckBoxClicked(const QModelIndex &)));
QTime runTime;
runTime.start();
//向表格添加1000行内容
for(int i = 0; i < 1000; i++)
{
bool check = true;
m_pStandardItemModel->setData(m_pStandardItemModel->index(i, 0), check, Qt::UserRole);
m_pStandardItemModel->setData(m_pStandardItemModel->index(i, 1), QString("名称%1").arg(i), Qt::EditRole);
m_pStandardItemModel->setData(m_pStandardItemModel->index(i, 2), QString("文件名%1").arg(i), Qt::EditRole);
QStandardItem *standItem1 = new QStandardItem(tr("QStandardItem %1").arg(i));
m_pStandardItemModel->setItem(i, 3,standItem1); //表格第i行,第3列添加一项内容
m_pStandardItemModel->item(i, 3)->setForeground(QBrush(QColor(255,0,0))); //设置字符颜色
m_pStandardItemModel->item(i, 3)->setTextAlignment(Qt::AlignCenter); //设置表格内容居中
}
ui->tableView->setModel(m_pStandardItemModel);
CheckBoxDelegate *deleage = new CheckBoxDelegate(ui->tableView);
ui->tableView->setItemDelegate(deleage);
//ui->tableView->sortByColumn(1, Qt::AscendingOrder); //表格第0列,按降序排列
//ui->tableView->sortByColumn(1, Qt::DescendingOrder); //表格第0列,按升序排列
qDebug() << "run time=================" << runTime.elapsed();
}
void MainWindow::slotCheckBoxClicked(const QModelIndex &index)
{
qDebug() << "MainWindow::slotCheckBoxClicked=============check====" << index.data(Qt::UserRole).toBool();
}
/*
void MainWindow::initData()
{
m_pStandardItemModel = new QStandardItemModel(ui->tableView);
m_pStandardItemModel->setColumnCount(3);
m_pStandardItemModel->setHeaderData(0, Qt::Horizontal, QStringLiteral("序号"));
m_pStandardItemModel->setHeaderData(1, Qt::Horizontal, QStringLiteral("名称"));
m_pStandardItemModel->setHeaderData(2, Qt::Horizontal, QStringLiteral("复选框"));
// virtual QModelIndex indexAt(const QPoint &pos) const
// virtual void setModel(QAbstractItemModel *model)
// virtual void setRootIndex(const QModelIndex &index)
// CustomCheckBox *checkbox = new CustomCheckBox(5, ui->tableView);
// connect(checkbox, SIGNAL(signalCheckStutas(bool,int)), this, SLOT(slotCheckBoxChange(bool,int)));
// checkbox->move(10, 10);
QTime runTime;
runTime.start();
//向表格添加100行内容
for(int i = 0; i < 1000; i++)
{
QStandardItem *standItem1 = new QStandardItem(tr("%1").arg(i+1));
QStandardItem *standItem2 = new QStandardItem(tr("第%1行").arg(i+1));
m_pStandardItemModel->setItem(i, 1,standItem1); //表格第i行,第0列添加一项内容
m_pStandardItemModel->item(i, 1)->setForeground(QBrush(QColor(255,0,0))); //设置字符颜色
m_pStandardItemModel->item(i, 1)->setTextAlignment(Qt::AlignCenter); //设置表格内容居中
m_pStandardItemModel->setItem(i, 2, standItem2); //表格第i行,第1列添加一项内容
m_pStandardItemModel->setData(m_pStandardItemModel->index(i, 0), true, Qt::EditRole);
//QCheckBox *checkBox = new QCheckBox(ui->tableView);
//ui->tableView->setIndexWidget(m_pStandardItemModel->index(i, 2), checkBox);
}
// for(int i = 0; i < 1000; i++)
// {
// QCheckBox *checkBox = new QCheckBox(ui->tableView);
// checkBox->setMaximumSize(40, 100);
// checkBox->setMinimumSize(40, 100);
// ui->tableView->setIndexWidget(m_pStandardItemModel->index(i, 2), checkBox);
// }
ui->tableView->setModel(m_pStandardItemModel);
CheckBoxDelegate *deleage = new CheckBoxDelegate(ui->tableView);
ui->tableView->setItemDelegate(deleage);
ui->tableView->sortByColumn(1, Qt::AscendingOrder); //表格第0列,按降序排列
//ui->tableView->sortByColumn(1, Qt::DescendingOrder); //表格第0列,按升序排列
qDebug() << "run time=================" << runTime.elapsed();
}
*/
void MainWindow::slotCheckBoxChange(bool check, int id)
{
qDebug() << "check==============" << check << "===id========" << id;
}
班公湖里洗过脚
- 粉丝: 419
- 资源: 16