如何在调整 QTableView 大小时动态更改列数?
Posted
技术标签:
【中文标题】如何在调整 QTableView 大小时动态更改列数?【英文标题】:How to dynamically change the number of columns while resizing a QTableView? 【发布时间】:2019-02-19 07:27:05 【问题描述】:当用户动态调整 QTableView 的大小时,是否可以更改 QTableView 中的列数?例如,我有 9 个编号为 1-9 的图像,我有一个带有自定义委托的 QTableView,它将图像绘制到表格的单元格中,我希望 QTableView 的行为如下图所示:
我的方向应该是什么,我应该如何实施?
【问题讨论】:
看起来你需要更多的布局而不是视图,不是吗? C++ 中有 flow layout example 和原生 flow layout in QML。 另外,您可能希望使用QListView
将viewMode
设置为QListView::IconMode
和flow
设置为QListView::LeftToRight
。
您的表格视图有模型吗?您可以处理表格的调整大小事件,将当前表格宽度传递给模型并让它计算列数。然而,这种方法破坏了 MVC 模式,即模型不应该依赖于视图。
@G.M.我会采纳你的解决方案,谢谢你的回答
【参考方案1】:
这是我的解决方案代码:
QListViewIconModeLtoRFlow::QListViewIconModeLtoRFlow(QWidget *parent): QMainWindow(parent)
ui.setupUi(this);
QFrame *frame = new QFrame;
QVBoxLayout *main = new QVBoxLayout(frame);
QListView *list = new QListView;
list->setFlow(QListView::LeftToRight);
list->setResizeMode(QListView::Adjust);
list->setViewMode(QListView::IconMode);
list->setIconSize(QSize(50,50));
QStandardItemModel *model = new QStandardItemModel;
list->setModel(model);
for (int i = 0; i < 50; ++i)
QPixmap p("F:\\boro.jpg");
QIcon *icon = new QIcon(p);
QStandardItem *item = new QStandardItem(*icon, NULL); //NULL to hide string appearance
model->appendRow(item);
main->addWidget(list);
setCentralWidget(frame);
如果 QStandardItem 像往常一样构造,则会在图标下方显示一个文本:
将 NULL 作为 QString 参数传递:
【讨论】:
以上是关于如何在调整 QTableView 大小时动态更改列数?的主要内容,如果未能解决你的问题,请参考以下文章