【问题标题】:QSignalMapper problems with stringsQSignalMapper 字符串问题
【发布时间】:2021-12-13 15:48:47
【问题描述】:

我有一个关于 QSignalMapper 的问题。

我有一个简单的应用程序,一个计算器。我有这样的东西,我点击按钮,我想显示它。但我有问题,我不知道如何将字符串分配给按钮。它只想处理整数。但我知道可以用字符串来做到这一点。我需要在字符串上做,因为我想把它转换成双精度类型。我知道我想做的其他事情怎么做,但是这个 QSignalMapper 正在杀死我。

QSignalMapper *signalMapper = new QSignalMapper(this);
connect(ui->Button0, SIGNAL(clicked()),
            signalMapper, SLOT(map()));
    signalMapper->setMapping(ui->Button0, '0');

我尝试用 QString 做一些事情,但没有帮助。

如果有任何帮助,我将不胜感激。

【问题讨论】:

  • 你能解释一下你想做什么吗?我 90% 确定您不需要 QSignalMapper,但我需要更多详细信息来展示解决方案。另外,您目前的方法到底有什么不适合的?
  • 请澄清您的具体问题或提供其他详细信息以准确突出您的需求。正如目前所写的那样,很难准确地说出你在问什么。

标签: c++ qt user-interface qt-creator


【解决方案1】:

我不认为你需要 signalMapper 来完成你正在寻找的东西。标准的 connect() 函数调用可能会起作用。

  1. Try using Qt5 syntax for creating the connection

  2. 如果您使用旧方法,请更改您的连接函数调用以包含单位。

已编辑 - 连接的示例语法

新方法。请注意,参数数据类型不包含在连接中 打电话。

connect(
    sender, &Sender::valueChanged,
    receiver, &Receiver::updateValue
);

老办法

connect(
    sender, SIGNAL( valueChanged( QString, QString ) ),
    receiver, SLOT( updateValue( QString ) )
);

已编辑 - 方法 1 --> 使用两个已知的 C++ objs

  1. 创建一个发出 QString 的信号函数
  2. 创建一个接收 QString 的槽函数
  3. 将两个 QString 连接在一起
  4. 根据需要处理

已编辑 - 方法 2 --> Using QML exclusively

  1. 在 QML 中声明信号(字符串 str)
  2. 使用现有的 btn onClicked 事件并调用声明的信号
  3. 通过插槽处理信号并根据需要处理文本

已编辑 - 方法 3 --> Use QSignalMapper if dealing with MVC and indexs

1. See Qt documentation

  1. 使用 lambda 方法连接按钮点击和文本

connect(button, &QPushButton::clicked, [this, text] { clicked(text); });

希望这些方法中的一种对解决您的问题有所帮助!

【讨论】:

  • 我看不出valueChanged(QString, QString)QPushButton::clicked(bool) 是如何对应的
  • 对不起,我提供了一个例子。我将更新示例以适应用户的需求。
  • 感谢您的帮助。说起来很愚蠢,但我只是在我所指的函数名称中有错误。我需要在两个文件中进行,其中一个是计算器的所有逻辑,第二个是连接。我正在这样做。我点击按钮,它显示在显示屏上,它是字符串类型,然后它被转换为双精度类型,然后当我点击添加操作按钮时,我使用布尔变量检查左侧是否有任何值等式,如果是真的,我可以输入右侧的值并单击相等。我的老师希望我这样做......
猜你喜欢
  • 2017-11-14
  • 1970-01-01
  • 2011-11-07
  • 1970-01-01
  • 2010-12-07
  • 2019-01-31
相关资源
最近更新 更多