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

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

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

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

【讨论】:

以上是关于在 QT 中的槽或函数之间保留值的主要内容,如果未能解决你的问题,请参考以下文章

PyQt5中的信号与槽,js 与 Qt 对象之间互相调用

如何用QT实现多个按钮信号响应不同的槽函数

Qt5 UI信号槽自动连接的控件重名大坑(UI生成的槽函数存在一个隐患,即控件重名。对很复杂的控件,不要在 designer 里做提升,而是等到程序启动后,再动态创建,可以避免很多问题)

树莓派中QT实现PWM

QT 和新的信号槽语法,用于 QApplication::quit 外部主函数的槽

QT中槽的使用