在qt中获得正确的项目版本
get correct version of item in qt
我有一个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的一些按钮和滑块,我在这里没有问题。我的问题是,当我想创建一个矢量来保存重复的效果,例如,用户将这个过滤器添加到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
s中保存其他用户定义的数据,例如您可以保存该效果的所有参数。使用setData
和data
函数进行存储和检索。例子:
//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
类,其中包含参数。
编辑:用于存储指针:
存储指针可能有点棘手,这个问题中描述了标准的类型系统兼容方法,但是作为一种简单的替代方法,您可以将指针强制转换为uintptr_t
并保存它们,并且在检索它们时将它们强制转换回您的指针类型。
然而,我建议你要么使用第一种方法,要么阅读更多关于指针-整数转换的信息,如果你想尝试第二种方法(因为滥用强制转换可能是危险的,由于32位和64位的差异等)。
- 升级到 Windows 10 版本 1809 SDK 后,我无法编译使用 C++/WinRT 的项目
- Visual studio安装项目删除以前的版本
- 哪些 Netbeans 8.2 项目文件应提交到C++项目的版本控制?
- 对于我在 Microsoft Visual C++ IDE (2005 或更高版本)的本机 win32 项目中编写的应用
- 从命令行构建一个.sln / .vcxproj项目,并使用Visual C 的免费版本构建
- 混合模式程序集是针对版本 'v2.0.50727' 构建的 ...本机C++/Visual C++/C# 项目错误
- 在同一C++项目中链接两个不同版本的 protobuf 库
- 将 Sqlite3 添加到项目错误 C1853 预编译头文件来自以前的版本
- 更改.exe文件版本(从C++项目)
- 如何在CPP中获得当前版本的Visual Studio进行扩展项目
- 将内部版本号传递给 msbuild(c++ 项目)
- 如何有条件地为 Eclipse 中的交叉编译项目包含两个不同名称的相同版本的库
- Visual Studio 错误:LNK1104:无法打开文件'kernel32.lib' - 仅在 WP8 项目/Win32 版本中
- yyparse()未在Bison/Flex C++项目中声明,仅适用于某些版本的gcc/Bison/Flex
- Visual Studio-强制项目使用早期版本的Boost
- 如何解析 /usr/lib64/libstdc++.so.6:在我的 CGAL cmake 项目中找不到版本 'GLIBCXX_3.4.15'?
- 如何构建面向特定可视C++可再发行版本的视觉C++项目
- 发布 NetBeans 项目的生成和调试版本
- 混合 mfc 对话框和 mdi 项目的调试版本中崩溃
- 在qt中获得正确的项目版本