繁体   English   中英

Qt在QTableView中嵌入QListView

[英]Qt Embed QListView in QTableView

我试图在QTableView中显示一个QListView,所以我创建了一个委托,并且在绘画事件中我做了

QListWidget list;
list.addItem(index.data().toString());
list.addItems({"1", "2", "3", "4"});
list.resize(option.rect.width(), option.rect.height());

painter->save();
painter->setClipRect(option.rect);
painter->translate(option.rect.topLeft());
list.render(painter);
painter->restore();

并获得正确的sizeHint大小,我这样做:

QListWidget list;
list.addItem(index.data().toString());
list.addItems({"1", "2", "3", "4"});
return list.size();

这将呈现列表,但我不能使用滚动条,并且单元格大小不会更改以显示完整列表。 有什么方法可以让Qt正确呈现吗?

我认为实现您想要的目标很难。 只需使用setIndexWidget 例如:

QListWidget *list = new QListWidget;
list->addItems({"1", "2", "3", "4"});

QTableView *table = new QTableView;
QStandardItemModel *model = new QStandardItemModel(10,10);
table->setModel(model);
table->setIndexWidget(table->model()->index(0,0), list);
table->resizeRowsToContents();
table->show();

在这种情况下,它是具有滚动支持和其他功能的完整窗口小部件。

编辑。

当然是。 参见另一个示例:

QListWidget *list = new QListWidget;
list->addItems({"1", "2", "3", "4"});

QTableView *table = new QTableView;
QStandardItemModel *model = new QStandardItemModel(10,10);

QStandardItem *it1 = new QStandardItem("example1");
QStandardItem *it2 = new QStandardItem("example2");

model->setItem(1,0,it1);
model->setItem(2,0,it2);

table->setModel(model);
table->setIndexWidget(table->model()->index(0,0), list);
table->resizeRowsToContents();
table->show();

for(int i = 0; i < model->rowCount(); i++)
{
    qDebug() << table->model()->index(i,0).data();
}

输出:

QVariant(Invalid) //because it is a widget, there is no data in display role
QVariant(QString, "example1") //our data
QVariant(QString, "example2") 
QVariant(Invalid) //because we didn't set data and so on...
QVariant(Invalid) 
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM