实现可点击字符串列表以调用函数的简洁直观的方法?

Posted

技术标签:

【中文标题】实现可点击字符串列表以调用函数的简洁直观的方法?【英文标题】:A clean and intuitive way to implement a list of clickable strings to invoke functions? 【发布时间】:2013-02-28 06:13:07 【问题描述】:

对于我正在编写的 Qt 应用程序,我想要一个可点击函数的列表,当点击这些函数时,用户可以提供所需的输入参数。

我特别寻找的是一系列小部件,它们为以下任务提供干净直观的界面:

用户滚动浏览执行计算的函数列表(在我的例子中,来自glm)。

一旦找到一个函数,用户点击该项目;将打开一个弹出窗口,其中指定所需的输入参数(例如,vec3vec4 等)。

这里的想法是函数本身已经存在:它们只需要一个接口,简而言之,它提供了一个伪解释器来处理它们的结果并将其输出到 GLWidget,GLWidget 将相应地更新传递的数据,并将其发送到对应的着色器。

我查看了QListView 及其 Widget 变体,但它似乎更适合文件系统数据,例如图像或文本文件,尽管我不太确定。到目前为止,它似乎是唯一可以被认为在这种情况下实际可用的东西。

有推荐的方法吗?总的来说,我对 Qt 还很陌生,因此我的知识非常有限。

【问题讨论】:

【参考方案1】:

在您的情况下,视图并不重要。您需要创建/重用适应的模型。 该模型必须包含您的视图显示的内容与您要启动的操作之间的关系。

例如,如果您的命令是 bash 命令之类的文本,您可以创建一个显示“列表文件”、“复制文件”的视图和一个包含数据的模型(“列表文件”='ls -l') , ("copy files" = 'ls -l') 等

您可以将不同的数据(使用 QVariant)存储在具有不同角色的同一个项目中:Qt::DisplayRole 对应于视图显示的数据,Qt::UserRole 对应于您想要的。

因此,如果您只需要存储与名称相关联的命令行,则可以使用 Qt::DisplayRole 将名称存储在项目中,并使用 Qt::UserRole 将命令行作为 QString(或其他)存储。

有关详细信息,请参阅 QAbstractItemModel::data() 和 QAbstractItemModel::setData()。

【讨论】:

以上是关于实现可点击字符串列表以调用函数的简洁直观的方法?的主要内容,如果未能解决你的问题,请参考以下文章

tcpsock for Golang

RPC介绍

如何将python三个方法输出在同一行

python怎么传参

使用 SWIG 包装对象从 C++ 调用 Python 函数的最简洁方法是啥

类的实例方法