【问题标题】:QT Creator: Trigger a Slot with Code?QT Creator:用代码触发插槽?
【发布时间】:2016-04-11 01:25:50
【问题描述】:

我可能已经把自己逼到了一个角落,但这在当时对我来说是个好主意。

我一直在开发一个界面,允许用户修改机器人设备的设置,即速度、方向、力等,并以组合框的形式提供大量选项。问题是在子类别中大约有一千种这样的东西。例如速度类别 x1、x2、x3、Y1、y2 等。因此,与其在 QT 中创建一千个组合框,我认为最好创建一组 50 个(ish)然后提供几个按钮在类别之间切换。因此,当用户选择速度 QT 时,使用适当的选项填充组合框,设置标签的样式表和文本等。所以它看起来好像存在一个专用页面。然后,如果用户选择方向,QT 将每个框的当前索引写入专用数组,然后用适当的内容重新填充框、标签等。然后,我会一遍又一遍地为系统的各种需求执行此操作。

所有这些似乎都运行良好。但是,我现在处于一个绑定中,提供的导航到每个页面的选项已经增加。例如,我有前进/后退按钮(就像您在设置向导中所期望的那样),以及顶部的操作菜单可以跳转到页面。所以现在代码变得非常重复。如果您选择下一个按钮,我会将当前值写入数组,然后重新填充。如果您从任何地方跳转到该页面,我会查看自己在哪里,将其写入数组并填充框。因此,如果我需要更改任何内容,我必须在代码中的许多地方进行更改。

我知道这不是最优的。我想做的是运行一个连续循环,就像我通常在 C 中使用 Micros 所做的那样。所以程序可以在每次传递中查看一个变量,如果是,那么它会这样做。然而,我不够熟练,无法在 QT 中解决这个循环。所以我的新想法是……

是否可以使用变量触发动作或插槽。例如,如果用户按下 Next 按钮,它会触发一个不存在的按钮插槽,以便 QT 执行特定的代码行?然后我可以有一个专门的部分专注于阅读和写作框,有一堆动作会把我带到那里。

【问题讨论】:

  • 不清楚为什么 FWD/BCK 按钮必须使用与直接导航不同的组合代码。在这两种情况下,它都是“'保存当前屏幕,填充新屏幕”......?
  • :) 非常感谢您的反馈。你可能是对的,我只是一个天真的机甲。工程师试图弄清楚。不过我会调查一下。谢谢

标签: qt combobox action slots


【解决方案1】:

您可以在代码中创建一个由emit 调用触发的信号,因此您可以将单击的下一个按钮信号连接到执行某些工作并继续前进的插槽,或者直接调用另一个信号您已经创建了触发其他位置的插槽,或者在按下按钮触发的 lambda 中做一些工作。

【讨论】:

【解决方案2】:

我会首先将所有 ComboBoxes 选项加载到 QStringList 数组中(或者可能是 QList<QLatin1String> 列表的数组 - 以节省内存和代码效率)。

然后我会为当前 ComboBox 索引保留一个包含 1000 个整数的数组。

当用户更改某个 ComboBox 中的值时,currentIndexChanged 信号将触发相应的插槽(所有 ComboBox 的单个插槽就足够了 - sender()->objectName() 获取发送信号的 ComboBox 的名称):

void WindowWidget::on_ComboBox_currentIndexChanged(int index) 
{ 
    name = sender()->objectName();
    /* here change the corresponding integer in the current
       indexes array */
}

按下 Next/Back 按钮重新填充 ComboBoxes。此外,提供一些“保存”按钮来保存组合框索引(或在某些操作上触发保存槽,即在窗口关闭时,即使是在定时器信号上)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-04-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多