关于QTableWidget控件中不显示Item的问题解决方法
问题:
编写基于QT5的QTableWidget控件显示浏览的文件夹内容时,不显示Item的选项问题;
在基于UI界面设计基于QTableWidget显示远程登录QFtp服务器请求得到的文件信息时,可以在QTableWidget控件中正常显示请求得到的文件目录;并且可以进行正常的点击进入、浏览操作;
但是我的项目文件为了更好的使用git进行项目文件备份,所以全部采用代码的方式进行设计,这时就产生了一个新的问题。虽然可以正常进行FTP的登录,但是在QTableWidget控件中就是不能正常显示请求得到的FTP回传的内容;
//创建目录显示previewTableWidget = new QTableWidget(this);previewTableWidget->setMaximumWidth(600);previewTableWidget->setShowGrid(false); //设置表格不显示网格线previewTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //自动调整列宽以填充整个视图previewTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置表格不可编辑//初始化当前目录为根目录currentDirectory = "/";//将根目录路径添加到路径列表中path << currentDirectory;//创建地址栏previewAddress = new QLineEdit();previewAddress->setFixedWidth(200);previewAddress->setFixedHeight(40);
经过各种测试,后来腾讯元宝给出了一个很好的提示,经过更改后已经可以正常显示了;
特此记录一下:
腾讯元宝提示:
“QTableWidget必须预先设置行数和列数才能显示数据。若未设置或设置错误,即使添加了数据也无法渲染”
// 错误示例:未设置行数直接插入数据
QTableWidget *table = new QTableWidget;
table->setItem(0, 0, new QTableWidgetItem("数据")); // 无效// 正确做法:先设置行数和列数
table->setRowCount(1); // 设置至少1行
table->setColumnCount(1); // 设置至少1列
table->setItem(0, 0, new QTableWidgetItem("数据")); // 数据可见
更改后的代码如下:
//创建目录显示previewTableWidget = new QTableWidget(this);previewTableWidget->setMaximumWidth(600);previewTableWidget->setShowGrid(false); //设置表格不显示网格线previewTableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); //自动调整列宽以填充整个视图previewTableWidget->setEditTriggers(QAbstractItemView::NoEditTriggers); //设置表格不可编辑// 正确做法:先设置行数和列数previewTableWidget->setRowCount(1); // 设置至少1行previewTableWidget->setColumnCount(2); // 设置至少1列previewTableWidget->horizontalHeader()->setVisible(false); // 确保水平表头可见previewTableWidget->verticalHeader()->setVisible(false); // 确保垂直表头可见
总结:
其实问题很简单,看更改后的代码的第9行和第10行,我们设置了行数和列数。
QTableWidget需要先设置一共有多少行数据才能正常显示,如果不设置那么默认是0行数据,也就是什么也不显示。
所以需要QTableWidget的人一定不要忘了使用SetRowCount告诉widget有多少数据需要绘制出来。