2012-11-26 2 views
1

PowerPoint에서 각 슬라이드를 나타내는 세로 막대 목록을 보여주는 것과 비슷한 모양을 나타내는 항목의 세로 목록을 만들 수 있기를 원합니다.QGraphicsView 개체의 QListView 만들기

QListViewQAbstractListModel과 함께 사용하는 것이 올바른 방법이라고 생각합니다. 내 QAbstractListModel 하위 클래스는 QListQGraphicsViews입니다. 따라서 각 타일 (또는 슬라이드)은 QGraphicsView입니다. 나는 인터넷에서 비슷한 예제를 찾으려고 많은 시간을 보냈고 Qt의 예제를 사용했지만 많은 운이 없었습니다.

여기 내 모델 클래스 ...

입니다 내가 addgvw에서 "추가"메시지를 얻을 수 있습니다,하지만 난 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으로 변환하고 타일 이미지를 표시하는 데 관심이 없다는 이유로 여러 가지 이유로 질문을받을 수 있다고 생각하기 때문에 추가하고 싶습니다.

답변

1

귀하의 문제는 QAbstractItemView과 친구 DisplayRole 데이터가 QString과 아무것도 것으로 예상 :

항목에 대한 QWidget 사용하는 방법이 있나요 가장 좋은 방법은 QListWidget을 사용하는 것입니다

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

: http://doc.qt.digia.com/qt/qlistwidget.html#setItemWidget

또한 QGraphicsView을 사용하면 엄청난 오버 헤드가 발생합니다. QGraphicsView은 정말 복잡한 위젯이며 필요로하는 것은 QGraphicsScene입니다. 목록에 몇 개가 넘는 항목이있는 경우 성능 저하에 대비하십시오.

정말 과장입니다. :)

+0

예, 오버 헤드를 크게 인식하고 있습니다. 원래 QListWidget을 사용하여 ~ 20 개 항목을 처리 했으므로 성능이 뛰어났습니다. 문제가되지 않을 것입니다. 하지만 목록을 뒤로 스크롤하고 항목을 선택할 수없는 것과 같은 다른 문제가있었습니다. – roundtheworld