QTableView的简单应用

英雄不问,饮水思源~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


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.运行效果图

猜你喜欢

转载自blog.csdn.net/weixin_39743893/article/details/80625116
今日推荐