gpt4 book ai didi

c++ - 从 QListWidget 中的小部件获取变量

转载 作者:行者123 更新时间:2023-11-28 06:35:36 25 4
gpt4 key购买 nike

我有一个名为 VideoWidget 的自定义 QWidget 类。它的源文件看起来像这样:

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

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

在我的 MainWindow 类中,我通过遍历 xml 文件并从该文件获取字符串参数,将 VideoWidget 添加到 QListWidget这个:

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

这会用 VideoWidget 正确填充我的 QListWidget,其中所有标签都具有不同的值。现在我想在每次双击 QListWidget 中的项目时获取 pathname 变量,如下所示:

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;时的值。我在这里缺少什么?

最佳答案

这可能是错误的:

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

方法“itemAt”采用 x 和 y 坐标,而不是索引。请改用“takeItem”。接下来我想说的是这部分:

ui->myList->itemWidget(item)

没用。您可以直接转换“项目”。最后 - 使用 qobject_cast 因为你使用 Qt。并且永远不要使用 dynamic_case(尤其是当您无论如何都不检查结果是否为 NULL 时)。

关于c++ - 从 QListWidget 中的小部件获取变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26829224/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com