Получение переменной из виджета в QListWidget

0

У меня есть собственный класс QWidget, называемый VideoWidget. Его исходный файл выглядит примерно так:

VideoWidget::VideoWidget(QWidget *parent, string test) :
QWidget(parent)
{

    pathname=test;
    QLabel *label= new QLabel(pathname.c_str(), this);
    //...
}
string VideoWidget::getFilePath(){
    return pathname;
}

В моем классе MainWindow я добавляю VideoWidget в QListWidget через цикл через xml файл и получаю строковый аргумент из этого файла следующим образом:

QDomNode node = rootXML.firstChild();
  while( !node.isNull() )
  {
    if( node.isElement() )
    {
      QDomElement element = node.toElement();
      VideoWidget* mytest = new VideoWidget(this, element.attribute( "Pathname", "not set").toStdString());
      QListWidgetItem* item = new QListWidgetItem;
      item->setSizeHint(QSize(150,100));
      ui->myList->addItem(item);
      ui->myList->setItemWidget(item,mytest);
    }

    node = node.nextSibling();
  }

Это правильно заполняет мой QListWidget с помощью VideoWidget где все метки имеют другое значение. Теперь я хотел бы получить переменную pathname каждый раз, когда я дважды QListWidget элемент в 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 << widget->getFilePath() << endl;
}

Моя проблема в том, что widget->getFilePath() всегда возвращает одно и то же значение для каждого щелкнутого виджета. Это значение в первый раз, когда я установил pathname=test; , Что мне здесь не хватает?

Теги:
qt
qwidget
qlistwidget

1 ответ

1

Вероятно, это ошибка:

QListWidgetItem* item = ui->myList->itemAt(0,index.row());

Метод "itemAt" принимает координаты x и y, а не индексы. Вместо этого используйте "takeItem". Следующая вещь, которую я хочу сказать, состоит в том, что эта часть:

ui->myList->itemWidget(item)

бесполезно. Вы можете напрямую конвертировать "элемент". И последнее - используйте qobject_cast, так как вы используете Qt. И никогда не используйте dynamic_case (особенно, когда вы все равно не проверяете результат против NULL).

Ещё вопросы

Сообщество Overcoder
Наверх
Меню