gpt4 book ai didi

c++ - Qt在QTableView中嵌入QListView

转载 作者:行者123 更新时间:2023-11-28 06:09:54 25 4
gpt4 key购买 nike

我试图在 QTableView 中显示一个 QListView,所以我创建了一个委托(delegate),并且在绘制事件中我这样做了

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)
...

关于c++ - Qt在QTableView中嵌入QListView,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31489942/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com