Qt SLOTS参数(初学者)

时间:2011-12-03 06:10:34

标签: qt qt4 qt-designer

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

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

在writeNumberLbl中无法访问“4”(而只是其类型)。基本上,我希望在单击按钮时,标签将其文本设置为“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将小部件连接到自定义插槽?

谢谢。

3 个答案:

答案 0 :(得分:1)

据我所知,Qt的信号/插槽系统要求信号功能的参数数量不小于 的插槽功能。 在您的示例中,信号函数click()具有零参数,并且插槽函数writeNumberLbl(“4”)具有一个参数,Qt的信号/插槽系统将不接受此操作,并且如果您在Qt创建器的调试模式下运行程序,qDebug将显示一条消息,如'不兼容的信号/插槽'blalbalba~。要解决这个问题,请阅读Arnold Spence给出的文章。很清楚。

答案 1 :(得分:0)

有许多方法可以解决这个问题,并概述了very nicely here。虽然那个页面有点旧,但我认为它仍然非常有效。我建议使用信号映射器。

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

答案 2 :(得分:0)

Slot中的参数数量无法退出Signal中的参数数量?和pressed()没有。你有两个选择(三个,计算愚蠢的一个):

  1. 使用QSignalMapper。它的帮助是不言自明的。
  2. 将所有按钮连接到单个插槽。在其中,找出按下了什么按钮。 QObject :: sender()函数有帮助。
  3. 还有更多方法,但更复杂。