1

各スライドを表すタイルの縦方向のリストを表示する PowerPoint で表示されるものと同様の外観を与える項目の縦方向のリストを作成できるようにしたいと考えています。

QListViewaと a を併用するのQAbstractListModelが正しい方法だと思います。私のQAbstractListModelサブクラスにはQListofが含まれていQGraphicsViewsます。したがって、各タイル (またはスライド) はQGraphicsView. 私はインターネットで同様の例を見つけるのに多くの時間を費やしました.Qtの例も使用していますが、あまり運がありません.

これが私のモデルクラスです...

では「ADDING」メッセージをaddgvw取得できますが、「HERE」メッセージは で取得できませんdata

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();
    }
}

これが私のモデルクラスの使い方です...

ウィジェットクラスのコンストラクターで呼び出します

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 に変換してタイルの画像を表示することに興味がありません。

4

1 に答える 1

1

あなたの問題はQAbstractItemView、友人がDisplayRoleデータがQStringであり、それ以外のものではないことを期待していることです:

http://doc.qt.digia.com/qt/qt.html#ItemDataRole-enum

あなたの最善の策は、アイテムQListWidgetに使用する方法があるものを使用することQWidgetです:http://doc.qt.digia.com/qt/qlistwidget.html#setItemWidget

また、QGraphicsViewキャリーを使用するとオーバーヘッドが大きくなります。QGraphicsViewは本当に複雑なウィジェットでありQGraphicsScene、必要なものはさらに複雑です。リストに多数の項目がある場合は、パフォーマンスの低下に備えてください。

あなたは本当にやり過ぎです。:)

于 2012-11-26T14:51:08.730 に答える