-2

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

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

我尝试过的方法是:

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

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

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

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

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

4

1 回答 1

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' 的mapped(int)信号连接到您的插槽:

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

单击第一个按钮时,将使用值 1 作为参数调用您的插槽。单击第二个按钮时,2 将传递到您的插槽。然后,您可以将传递的值保存在您喜欢的任何位置(例如在 . 的成员变量中yourObj

于 2012-10-24T03:07:16.633 回答