我希望能够创建一个垂直的项目列表,这些项目的外观与您在PowerPoint中看到的内容类似,它显示了代表每张幻灯片的垂直列表。
我认为使用QListView
和QAbstractListModel
是正确的方法。我的QAbstractListModel
子类包含QList
QGraphicsViews
。因此,每个图块(或幻灯片)都是QGraphicsView
。我花了很多时间试图在互联网上找到一个类似的例子,我也一直在使用Qt的例子,但没有太多运气。
这是我的模特课......
我可以在addgvw
中收到“添加”消息,但我无法在data
中收到“HERE”消息。
myDataModel::myDataModel(QObject *parent) : QAbstractListModel(parent)
{
}
QVariant myDataModel::data(const QModelIndex &index, int role) const
{
if (!index.isValid())
{
return QVariant();
}
cGraphicsViewWrapper* gvw = GVWrapperList.at(index.row());
if (role == Qt::DisplayRole)
{
qDebug() << "HERE";
//Return the QGraphicsView object to display
return QVariant::fromValue(gvw->gvwView());
}
return QVariant();
}
int myDataModel::rowCount(const QModelIndex &parent) const
{
Q_UNUSED(parent);
return GVWrapperList.size();
}
void myDataModel::addgvw(int role, cGraphicsViewWrapper& gvw)
{
if (role == Qt::EditRole)
{
beginInsertRows(QModelIndex(), GVWrapperList.size(), GVWrapperList.size());
GVWrapperList.append(&gvw);
qDebug() << "ADDING " << GVWrapperList.size() << rowCount();
endInsertRows();
}
}
这就是我使用模型类的方法......
在我的widget类的构造函数中,我调用
myGVWWidget::myGVWWidget(QWidget *parent) :
QWidget(parent),
ui(new Ui::myPlottingWidget)
{
ui->setupUi(this);
Model = new myDataModel(this);
ui->GWVListView->setModel(Model);
connectAllSignals();
}
...然后在我创建新图块的函数中,创建图块后我调用...
Model->addChart(Qt::EditRole, *gvw);
最后,我的小部件是空的:(
编辑:我想补充一下,因为我认为我可能会被问到,出于多种原因,我对转换为QPixMap并显示图像的图像不感兴趣。答案 0 :(得分:1)
您的问题是QAbstractItemView
,朋友希望DisplayRole
数据是QS字符串而不是其他内容:
http://doc.qt.digia.com/qt/qt.html#ItemDataRole-enum
您最好的选择是QListWidget
,它可以使用QWidget
项目:http://doc.qt.digia.com/qt/qlistwidget.html#setItemWidget
此外,使用QGraphicsView
会带来巨大的开销。 QGraphicsView
是一个非常复杂的小部件,它需要的QGraphicsScene
更加复杂。如果列表中有多个项目,请为性能降低做好准备。
你真的太过分了。 :)