QT之Tableview

想要了解更多的tableview可以看这位博客Qt深入浅出(十五)QTableView

这里做了一个简单的学生系统查询功能显示Tableview:
表格视图控件QTableView,需要和QStandardItemModel, 配套使用,这套框架是基于MVC设计模式设计的,M(Model)是QStandardItemModel数据模型,不能单独显示出来。V(view)是指QTableView视图,要来显示数据模型,C(controllor)控制在Qt中被弱化,与View合并到一起。

this->model = new QStandardItemModel; //创建一个标准的条目模型

this->ui->tableView->setModel(model);
此函数将创建并设置新的选择模型,将以前设置的任何模型替换为model(标准的条目模型), model设置的内容都将显示在tableview上。一般情况下:tableView上设置要显示“文本”信息,则在model上设置,tableView上设置字体的颜色边框大小,则在tableView上设置

//setHorizontalHeaderItem设置水平条目栏
//在tableView上水平条目栏的头第0列设置为姓名
this->model->setHorizontalHeaderItem(0, new QStandardItem(“姓名”) );

//setColumnWidth设置每一列的宽度
this->ui->tableView->setColumnWidth(0, 100); //设置列的宽度

//setItem设置条目栏中的一个格子的信息
this->model->setItem(0, 5, new QStandardItem(“hello world” ) );

//setRowCount设置行段数目
//setHeaderData设置行头的名称
model->setRowCount(3);
model->setHeaderData(0,Qt::Vertical, “行0”);

QueryStu::QueryStu(QWidget *parent) :
    QDialog(parent),
    ui(new Ui::QueryStu)
{
    ui->setupUi(this);
//    readFromFile();
    this->model = new QStandardItemModel;   //创建一个标准的条目模型
    this->ui->tableView->setModel(model);   //将tableview设置成model这个标准条目模型的模板, model设置的内容都将显示在tableview上

    this->model->setHorizontalHeaderItem(0, new QStandardItem("姓名") );
    this->model->setHorizontalHeaderItem(1, new QStandardItem("学号"));
    this->model->setHorizontalHeaderItem(2, new QStandardItem("性别"));
    this->model->setHorizontalHeaderItem(3, new QStandardItem("年龄"));
    this->model->setHorizontalHeaderItem(4, new QStandardItem("院系"));
    this->model->setHorizontalHeaderItem(5, new QStandardItem("兴趣"));

    this->ui->tableView->setColumnWidth(0, 100);    //设置列的宽度
    this->ui->tableView->setColumnWidth(1, 150);
    this->ui->tableView->setColumnWidth(2, 50);
    this->ui->tableView->setColumnWidth(3, 50);
    this->ui->tableView->setColumnWidth(4, 100);
    this->ui->tableView->setColumnWidth(5, 150);

    /*setItem设置条目栏中的一个格子的信息*/
    this->model->setItem(1, 5, new QStandardItem("hello world" ) );

    /*设置行字段名*/
    model->setRowCount(3);
    model->setHeaderData(0,Qt::Vertical, "行0");
    model->setHeaderData(1,Qt::Vertical, "行1");
    model->setHeaderData(2,Qt::Vertical, "行2");
}

代码效果图:
在这里插入图片描述

### 关于Qt TableView 的使用方法及常见问题 #### 禁用列拖动功能 对于`QTableView`或`QTableWidget`,如果希望禁用其水平表头的列拖拽调整大小的功能,则可以依据使用的Qt版本采取不同的方式。当Qt版本小于等于5.0.0时,应采用如下代码片段设置特定列为固定宽度: ```cpp ui->tableView->horizontalHeader()->setResizeMode(0, QHeaderView::Fixed); ``` 而在更新的Qt版本中,推荐的方式则是利用`setSectionResizeMode()`函数替代旧版API[^1]。 #### 设置单元格前景色 针对表格视图内单个项的颜色定制需求,一种广泛采纳的做法是在基于`QStandardItemModel`的数据模型上操作。具体而言,可通过获取指定位置处的标准项目实例并调用其`setForeground()`成员函数传入所需画刷对象完成色彩设定工作。下面给出了一段示范性的C++语句用于将某一行某一列的文字颜色更改为红色[^2]: ```cpp student_model->item(0, 1)->setForeground(QBrush(QColor(255, 0, 0))); ``` #### 修改单元格内容并同步至外部存储介质 假设存在这样一个业务逻辑:每当用户更改了界面上显示的信息之后,应用程序应当立即将变动后的记录保存到持久化层比如关系型数据库之中去。此时可以通过定位目标索引节点再借助数据模型接口实施写回动作达成目的。这里有一份简化的伪代码展示了如何实现上述过程[^3]: ```cpp QModelIndex index = ui->tableView->model()->index(curRow, 4, QModelIndex()); ui->tableView->model()->setData(index,"未通过"); alterCurRow(); ``` #### 解决中文环境下可能出现的乱码现象 在跨平台图形界面编程实践中,开发者可能会遇到由于不同工具链之间编码约定差异所引发的一系列棘手难题——特别是涉及到汉字处理的时候尤为明显。例如,在Windows操作系统下选用Microsoft Visual C++作为构建系统的环境中经常会出现此类状况。这是因为尽管Qt框架本身倾向于支持国际化标准即UTF-8格式字符串表示法,但是Visual Studio集成开发环境却习惯沿用本地传统字符集(如GBK)。因此为了避免不必要的麻烦,建议保持整个工程文件体系内部以及运行时刻输出流两端均遵循一致性的文字编码策略[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值