2014-11-09 5 views
0

내 QListWidget을 채우는 데 사용한 VideoWidget이라는 사용자 정의 QWidget 클래스가 있습니다 ui->myList. 목록의 항목을 두 번 클릭하면 VideoWidget이 표시됩니다.QListWidget에서 위젯 가져 오기

connect(ui->myList,SIGNAL(doubleClicked(QModelIndex)),this,SLOT(playClip(QModelIndex))); 

void MainWindow::playClip(QModelIndex index){ 
    QListWidgetItem* item = ui->myList->itemAt(0,index.row()); 
    VideoWidget widget = <dynamic_cast>(VideoWidget*)(ui->myList->itemWidget(item)); 
    cout << "custom widget data" << widget.getMyData() << endl; 
} 

VideoWidget widget = <dynamic_cast>(VideoWidget*)(ui->myList->itemWidget(item));을 컴파일 할 수 없습니다. 내가 여기서 무엇을 놓치고 있는지 잘 모르겠습니다.

VideoWidget *widget = qobject_cast<VideoWidget*>(ui->myList->itemWidget(item)); 
  • 것은 후, 적어도 Q_ASSERT(widget);, 코드를 추가 dynamic_cast

  • 답변

    4
    1. 구문은이 QObject를 때문에

      VideoWidget *widget = dynamic_cast<VideoWidget*>(ui->myList->itemWidget(item)); 
      
    2. 당신은 아마 대신 qobject_cast을 사용해야입니다 캐스트가 성공했는지 확인하는 캐스트 (을 반환) 210).

    +0

    를 사용해야하므로, Qt는 그 자신의 주조 기능은 정의 C++ 그러나

    dynamic_cast<VideoWidget*> (ui->myList->itemWidget(item))했을 것이다'VideoWidget * 위젯 =', 올바른? 오류가 발생합니다 ** "정적 어설 션이 실패했습니다 : qobject_cast는 유형이 Q_OBJECT 매크로가 있어야합니다"** qobject_cast를 사용하면 ** ** ^ – testus

    +0

    @testus 죄송합니다. 예, 물론 ... :) – hyde

    +0

    오류는 어떻습니까? 내 MainWindow 헤더에 Q_OBJECT 매크로가 있습니다. – testus

    2

    라인이 맞지 않습니다. <dynamic_cast>은 C++가 유효하지 않습니다. 그것은 유효하지 않은 이름이며 템플릿 매개 변수가 될 수 없습니다. 이전에 함수/클래스를 기대하는 템플릿이 없기 때문입니다.

    그것은 당신이 할 qobject_cast<VideoWidget*>(ui->myList->itemWidget(item))

    가있다