gpt4 book ai didi

c++ - 在qt中获取项目的正确版本

转载 作者:行者123 更新时间:2023-11-28 07:41:55 24 4
gpt4 key购买 nike

我有一个QListWidget,我用它作为图像过滤器列表,这个过滤器是通过上下文菜单添加的,我重新实现了contextMenuEvent,我有2个上下文菜单:addfilter菜单和deletefilter菜单,当我添加过滤器我只是像这样将项目添加到列表中:

MenuFiler::MenuFiler()
{

Laplace = new QAction("Laplace" , this);
QObject::connect(Laplace , SIGNAL(triggered()) , this , SLOT(LaplaceSlot()) );

QObject::connect(this, SIGNAL(itemDoubleClicked(QListWidgetItem*)), this, `SLOT(ManageControls(QListWidgetItem*))); // to show controls for clicked item`
.
.
.
}


void MenuFiler::LaplaceSlot()
{
this->addItem("Laplace");
}

现在在其他功能上我检查是否有项目我得到这个项目文本并为此过滤器创建控件我这样做

void MenuFiler::ManageControls(QListWidgetItem*item)
{
if (item->text() == "Laplace")
{
if (_laplacianeffect.get() == NULL)
{
_laplacianeffect = unique_ptr<Laplacianeffect> (new Laplacianeffect());
}
_laplacianeffect.get()->show();

}
.
.
// etc
}

控件只是链接到 qframe 的一些按钮和 slider ,我在这里没有问题。我的问题是当我想创建一个 vector 来保存重复效果时,例如用户将此过滤器添加到代表过滤器列表的 qListWidget:

拉普拉斯其他影响拉普拉斯

所以我会做这样的事情

void MenuFiler::LaplaceSlot()
{
_laplacianeffect.push_back(new Laplacianeffect() );

this->addItem("Laplace");
}

我如何检测女巫过滤器是否被选中

void MenuFiler::ManageControls(QListWidgetItem*item)
{
if (item->text() == "Laplace")

{
// what is the code that i should use to detect witch effect id is selected)

_laplacianeffect.at(filterid).show()


}
}

最佳答案

您可以在您的 QListWidgetItem 中保存额外的用户定义数据,例如,您可以保存效果的所有参数。使用 setDatadata 函数进行存储和检索。示例:

//Let these be the things you want to save for the filter.
int filterParameter1;
QString filterParameter2;
//etc...

//Save them in your QListWidgetItem* :
item->setData(Qt::UserRole + 0, filterParameter1);
item->setData(Qt::UserRole + 1, filterParameter2);

//Retrieve them later by having the QListWidgetItem* pointer:
filterParameter1 = item->data(Qt::UserRole + 0).toInt();
filterParameter2 = item->data(Qt::UserRole + 1).toString();

Qt::UserRole 是您可以保存数据的第一个位置,您可以在接下来的位置保存任意数量的数据。确保保存并获取正确的类型取决于您。

但是在您的情况下,一种更简单的方法可能是将指向实际效果的数字存储在结构或其他内容中,或者您甚至可以将指针保存到您的Laplacianeffect 包含参数的类

编辑:用于存储指针:

存储指针可能有点棘手,符合标准类型系统的方式是 described in this question ,但作为一种简单的替代方法,您可以将指针转换为 uintptr_t 并保存它们,并在检索它们时将它们转换回您的指针类型。

但是,如果您想尝试第二种方法,我建议您要么使用第一种方法,要么阅读更多关于指针-整数转换的内容(由于 32 位和 64 位的差异等原因,滥用转换可能很危险)。

关于c++ - 在qt中获取项目的正确版本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15681004/

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