我是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将小部件连接到自定义插槽?
谢谢。
答案 0 :(得分:1)
据我所知,Qt的信号/插槽系统要求信号功能的参数数量不小于 的插槽功能。 在您的示例中,信号函数click()具有零参数,并且插槽函数writeNumberLbl(“4”)具有一个参数,Qt的信号/插槽系统将不接受此操作,并且如果您在Qt创建器的调试模式下运行程序,qDebug将显示一条消息,如'不兼容的信号/插槽'blalbalba~。要解决这个问题,请阅读Arnold Spence给出的文章。很清楚。
答案 1 :(得分:0)
有许多方法可以解决这个问题,并概述了very nicely here。虽然那个页面有点旧,但我认为它仍然非常有效。我建议使用信号映射器。
对于你的第二个问题,是的。您可以通过在“编辑信号/插槽”模式下设置设计器,使用Qt Designer连接信号和插槽。例如,在此模式下,您可以将连接线从按钮拖到窗体中。将打开一个对话框,允许您选择要连接的信号和插槽。如果您尚未在代码中实现插槽,则可以指定插槽的名称,然后为其添加代码。
答案 2 :(得分:0)
Slot中的参数数量无法退出Signal中的参数数量?和pressed()没有。你有两个选择(三个,计算愚蠢的一个):
还有更多方法,但更复杂。