英雄不问,饮水思源~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
QTableView是Qt中典型的MVC设计,这里只阐述它的简单应用方法
https://blog.csdn.net/weixin_39743893/article/details/80625759 //Qt的MVC设计模式—InterView框架MVD
1.先创建模型,用系统默认的标准模型类(可以自定义模型)
QStandardItemModel *
m_tableview;//类中定义
m_tablemodel
=
new
QStandardItemModel(
20,
5);//构造函数中创建
QStringList
horizontal_listhead;//存表头字符串链表
horizontal_listhead
<<
tr(
"瑕疵序号")
<<
tr(
"瑕疵位置")
<<
tr(
"瑕疵类型")
<<
tr(
"瑕疵评分")
<<
tr(
"备注");
m_tablemodel->
setHorizontalHeaderLabels(
horizontal_listhead);//创建水平表头
2.将模型与视图链接,并设置试图属性
ui->
tableView->
setModel(
m_tablemodel);//设置tableview模型,链接模型与数据
ui->
tableView->
horizontalHeader()->
setDefaultAlignment(
Qt::
AlignHCenter);
//表头居中
ui->
tableView->
setEditTriggers(
QAbstractItemView::
NoEditTriggers);
//不可编辑
ui->
tableView->
setSelectionMode(
QAbstractItemView::
SingleSelection);
//只选单个内容
ui->
tableView->
setSelectionBehavior(
QAbstractItemView::
SelectRows);
//只能选中行
ui->
tableView->
verticalHeader()->
hide();
//隐藏默认的垂直表头
ui->
tableView->
setAutoScroll(
false);
//滑动条设置
ui->
tableView->
setAlternatingRowColors(
true);
//使表格颜色交错功能为真
ui->
tableView->
setStyleSheet(
"QTableView{background-color:
rgb(250,
250,
250);"
"alternate-background-color:
rgb(234,
234,
234);}");
//设置表格颜色
//设置列宽
ui->
tableView->
setColumnWidth(
0,
38);
ui->
tableView->
setColumnWidth(
1,
66);
ui->
tableView->
setColumnWidth(
2,
88);
ui->
tableView->
setColumnWidth(
3,
38);
ui->
tableView->
setColumnWidth(
4,
588);
ui->
tableView->
horizontalHeader()->
setSectionResizeMode(
QHeaderView::
Fixed);
//设置固定宽度
注:在进行表格设置时必须“ui->tableView->setModel(model)”在前,属性具体设置在后
3.移动视图中的滑动条
QScrollBar
*
temp_positon
=
ui->
tableView->
verticalScrollBar();
if(
current_id
>
5)
{
temp_positon->
setValue(
temp_positon->
value()+
1);
}//当表内元素大于5自动移动滑动条
注:通过滚动条控件的void setValue(int)函数,可以修改滚动条的滚动位置。
注意QScrollBar的滚动位置不要超过minimum()和maximum()的范围。
在tableView中添加/替换数据
m_tablemodel->
setItem(
current_row
,
0
,
new
QStandardItem(
QString::
number(
current_id)));
m_tablemodel->
setItem(
current_row
,
1
,
new
QStandardItem(
QString::
number(
m_usbserial->
m_lcdNum)));
//添加瑕疵点位置
m_tablemodel->
setItem(
current_row
,
2
,
new
QStandardItem(
m_list_pushbutton.
at(
x_button)->
text()));
//将按键信息添加到表中
删除tableView内容
int
ct_row=
ui->
tableView->
currentIndex().
row();
//获取当前鼠标点击的当前行号
m_tablemodel->
removeRow(
ct_row);
//删除行
从tableView中取数据
m_tablemodel->
data(
m_tablemodel->
index(
0,
2)).
toString();
m_tablemodel->
item(
0,
2)->
text();
注:对模型的操作就是对视图的操作,使用系统标准默认的模型,因为中间有代理,能及时的根据模型内部的变化来更新视图!
4.参考:
QTableView导出数据到EXCEL表格中
……
void
CountMiUpperWidget::
inputExcel(
QString
data)
{
QTextCodec
*
code;
code
=
QTextCodec::
codecForName(
"gb18030");
std::
string
strCountBuffer
=
(
code->
fromUnicode(
data)).
data();
file.
write(
strCountBuffer.
c_str(),
qstrlen(
strCountBuffer.
c_str()));
file.
write(
",");
}
……
……
QFile file;//类私有成员
……
QString
fileName
=
QFileDialog::
getSaveFileName(
this,
tr(
"Save
File"),
"",
tr(
"file
(
*.csv)"));
if(
fileName
==
"")
return;
QTextCodec
*
code;
code
=
QTextCodec::
codecForName(
"gb18030");
std::
string
strbuffer
=
(
code->
fromUnicode(
fileName)).
data();
FILE
*
fileWrite
=
fopen(
strbuffer.
c_str(),
"w");
file.
open(
fileWrite,
QIODevice::
WriteOnly);
……
for(
int
i
=
0;
!(
m_tablemodel->
data(
m_tablemodel->
index(
i,
0)).
isNull());
i++)
{
for(
int
j
=
0;
!(
m_tablemodel->
data(
m_tablemodel->
index(
i,
j)).
isNull());
j++)
{
inputExcel(
m_tablemodel->
item(
i,
j)->
text());
}
file.
write(
"\n");
}
file.
close();
……
……
5.运行效果图