在QT中保留插槽或功能之间的值

时间:2012-10-24 02:43:02

标签: qt variables signals-slots preserve

我正在使用QT。有没有办法在插槽或功能之间保留值?为了简单起见,让我们说我的表单在工具栏上有三个按钮和一行编辑。我需要第一个按钮将值“1”设置为变量,第二个按钮将“2”设置为变量。第三个按钮获取此变量并在行编辑中显示。

因此,如果我按下第一个按钮然后第三个按钮,则行编辑将显示数字“1”。如果我按下第二个按钮然后第三个按钮,则行编辑将显示数字“2”。基本上这会使第三个按钮的插槽查找由第一个或第二个按钮设置的变量,然后显示它。我意识到这不是一个完美的例子,但我认为它说明了这个概念。

我试图想的方法是:

  1. 我记得从学校上学的VB课程开始......创建一个隐藏的行编辑并将值存储在那里直到我需要它。 遗憾的是,这将意味着在复杂项目上进行大量隐藏线编辑。呸。

  2. 在int main()函数中创建一个全局变量,并在所有函数中设置该变量。这可能会让人感到困惑,任何东西都可以访问它。所以这可能很混乱。

  3. 我注意到桌面应用程序的QT似乎有一个名为“ui”的类。我曾想过用getter和setter创建我自己的类,并继承ui的所有内容...... 我相信这会有效,但看起来有点矫枉过正。

  4. 将信息保存在tmp文件中并阅读。 当我只需要短期变量时,这似乎也很痛苦。

  5. 有没有简单的方法来完成这项任务?

1 个答案:

答案 0 :(得分:1)

您可以使用QSignalMapper并将第一个和第二个按钮连接到它:

signalMapper = new QSignalMapper(parent);
connect(firstButton, SIGNAL(clicked()), signalMapper, SLOT(map()));
connect(secondButton, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(firstButton, 1);
signalMapper->setMapping(firstButton, 2);

然后,您将signalMapper的{​​{1}}信号连接到您的广告位:

mapped(int)

单击第一个按钮时,将调用您的插槽,其值为1。单击第二个按钮时,2将传递到您的插槽。然后,您可以将传递的值保存在任何位置(例如connect(signalMapper, SIGNAL(mapped(int)), yourObj, SLOT(yourSlot(int))); 的成员变量。)