【问题标题】:Qt SLOTS parameters (Beginner)Qt SLOTS 参数(初学者)
【发布时间】:2011-12-03 06:10:34
【问题描述】:

我是 Qt 的初学者,并且正在制作(或至少尝试制作)一个基本的计算器。如果我理解正确,这样做时:

connect(my_button_4, SIGNAL(clicked()), this, SLOT(writeNumberLbl("4")));

“4”在 writeNumberLbl 中不可访问(而是只有它的类型)。基本上,我希望当单击按钮时,标签将其文本设置为“4”。但是,我有数字 0 到 9,所以我想做:

connect(my_button_0, SIGNAL(clicked()), this, SLOT(writeNumberLbl("0")));
connect(my_button_1, SIGNAL(clicked()), this, SLOT(writeNumberLbl("1")));
...
connect(my_button_9, SIGNAL(clicked()), this, SLOT(writeNumberLbl("9")));

我的 writeNumberLbl 函数是:

void Calculator::preWriteVal(QChar val)
{
    QString curVal = ui.lbl_output->text();
    curVal += val;
    ui.lbl_output->setText(curVal);
}

但是,我可以看到由于参数“val”,这将不起作用。有人可以指出我正确的方向吗?谢谢你。我确实看过这个问题是否已经得到回答并且找不到任何东西。如果有,请给我一个链接。

另外,是否可以使用 Qt Designer 4 将小部件连接到自定义插槽?

谢谢。

【问题讨论】:

标签: qt qt4 qt-designer


【解决方案1】:

据我所知,Qt的信号/槽系统要求信号函数的参数个数不能少于槽函数的参数个数。 在您的示例中,信号函数 click() 的参数为零,插槽函数 writeNumberLbl("4") 有一个参数,如果您在 Qt 创建者的调试模式下运行程序,Qt 的信号/插槽系统将不接受这, qDebug 会显示类似'Incompatiable signal/slot' blalbalba 的消息~。要解决这个问题,只需阅读 Arnold Spence 给出的文章即可。很清楚。

【讨论】:

    【解决方案2】:

    有很多方法可以解决这个问题,它们在very nicely here 中进行了概述。尽管该页面有点旧,但我认为它仍然很有效。我建议使用信号映射器。

    对于第二个问题,是的。您可以通过将设计器设置为“编辑信号/插槽”模式来使用 Qt 设计器连接信号和插槽。例如,一旦进入此模式,您可以将连接线从按钮拖到表单中。将打开一个对话框,允许您选择要连接的信号和插槽。如果您还没有在代码中实现插槽,您可以指定插槽的名称,然后为其添加代码。

    【讨论】:

    • 感谢您的建议;但是,我知道“编辑信号/插槽”模式,我想我想知道是否有某种方法可以将按钮拖到自定义插槽(我制作的插槽)。
    • 是的。如果您已经定义了一个插槽,您可以将一个连接器拖到具有该插槽的对象上,然后在结果对话框中将它们连接起来。
    • 感谢您的帮助。我想我现在理解得更好了。在文档中,它在最后说:“......如果你要实现一个调色板工具,允许用户从一组标准颜色中选择一种颜色,并且需要发出一个 colorSelected(const QColor &) 信号,你最好赌注是使用 sender() 方法或上述子类方法。”我想知道是否需要一个 if-else 语句来表示,例如: if(button1 == (*pusbutton) sender()) // 将调色板颜色更改为蓝色 else if(button2 == (*pusbutton) sender( )) // 将调色板颜色更改为红色等。
    【解决方案3】:

    Slot中的参数个数不能退出Signal中的那些?而pressed() 没有。你有两个选择(三个,算上愚蠢的一个):

    1. 使用 QSignalMapper。它的帮助是不言自明的。
    2. 将所有按钮连接到单个插槽。在其中,找出按下了哪个按钮。 QObject::sender() 函数有帮助。

    还有更多方法,但更复杂。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2010-10-24
      • 1970-01-01
      • 2021-07-05
      • 2011-08-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多