在 QT 中的槽或函数之间保留值
Posted
技术标签:
【中文标题】在 QT 中的槽或函数之间保留值【英文标题】:Preserving values between slots or functions in QT 【发布时间】:2012-10-24 02:43:02 【问题描述】:我正在使用 QT。一般来说,有没有办法在插槽或函数之间保留值?为了简单起见,假设我的表单在工具栏上有三个按钮和一个行编辑。我需要第一个按钮将值“1”设置为变量,第二个按钮将“2”设置为变量。第三个按钮采用此变量并将其显示在行编辑中。
因此,如果我按第一个按钮,然后按第三个按钮,则行编辑将显示数字“1”。如果我按第二个按钮,然后按第三个按钮,则行编辑将显示数字“2”。基本上,这将使第三个按钮的插槽查找由第一个或第二个按钮设置的变量,然后显示它。我意识到这不是一个完美的例子,但我认为它说明了这个概念。
我尝试过的方法是:
我记得我在学校上的 VB 课上的那种方式... 创建一个隐藏行编辑并将值存储在那里直到我需要它。 可悲的是,这将意味着对一个复杂项目进行大量的隐藏线编辑。呸。
在 int main() 函数中创建一个全局变量,并在所有函数中设置该变量。这可能会让人感到困惑,任何东西都可以访问它。所以这可能会很混乱。
我注意到用于桌面应用程序的 QT 似乎有一个名为“ui”的类。我想过用getter和setter创建自己的类,并从ui中继承一切...... 我相信这会奏效,但似乎有点矫枉过正。
将信息保存在 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);
然后您将signalMapper
的mapped(int)
信号连接到您的插槽:
connect(signalMapper, SIGNAL(mapped(int)), yourObj, SLOT(yourSlot(int)));
当第一个按钮被点击时,您的插槽将被调用,其参数值为 1。单击第二个按钮时,2 将传递到您的插槽。然后,您可以将传递的值保存在您喜欢的任何位置(例如在yourObj
的成员变量中。)
【讨论】:
以上是关于在 QT 中的槽或函数之间保留值的主要内容,如果未能解决你的问题,请参考以下文章
Qt5 UI信号槽自动连接的控件重名大坑(UI生成的槽函数存在一个隐患,即控件重名。对很复杂的控件,不要在 designer 里做提升,而是等到程序启动后,再动态创建,可以避免很多问题)