2012-10-24 27 views
-2

我正在使用QT。一般来说,是否有办法在插槽或函数之间保留值?为了简单起见,我们假设我的表单在工具栏上有三个按钮和一个行编辑。我需要第一个按钮将值“1”设置为变量,第二个按钮将“2”设置为变量。第三个按钮采用这个变量并在行编辑中显示它。保存QT中的插槽或函数之间的值

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

我试图想做到这一点的办法的是:

  1. 他们这样,我记得从VB类我参加了学校......创建一个隐藏的行编辑和存储存在的价值,直到我需要它。 不幸的是,这意味着复杂项目需要进行大量的隐藏线编辑。呸。

  2. 在int main()函数中创建全局变量并在所有函数中设置该变量。这可能会让人困惑,任何事情都可以访问它。所以这可能是凌乱的。

  3. 我注意到,桌面应用程序的QT似乎有一个叫做“ui”的类。我想过用getter和setter创建我自己的类,并继承所有的东西... 我相信这会工作,但它似乎是矫枉过正。

  4. 将信息保存在tmp文件中并读取。 这似乎也可能是一个痛苦,当我只需要短期变量。

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

回答

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); 

然后signalMappermapped(int)信号连接到您的插槽:

connect(signalMapper, SIGNAL(mapped(int)), yourObj, SLOT(yourSlot(int))); 

当第一个按钮点击,您的插槽将被调用值为1作为其参数。点击第二个按钮后,2将被传递到您的插槽。然后,您可以随时随地保存传递的值(例如在成员变量yourObj中)。