Qt插槽参数(初学者)

Qt插槽参数(初学者),qt,qt4,qt-designer,Qt,Qt4,Qt Designer,我是Qt的初学者,正在制作(或至少正在尝试制作)一个基本的计算器。如果我理解正确,在执行此操作时: connect(my_button_4, SIGNAL(clicked()), this, SLOT(writeNumberLbl("4"))); WriteEnumBerlbl中的“4”是不可访问的(只是它的类型是)。基本上,我希望当点击按钮时,标签将其文本设置为“4”。但是,我有数字0到9,所以我想做: connect(my_button_0, SIGNAL(clicked()), this

我是Qt的初学者,正在制作(或至少正在尝试制作)一个基本的计算器。如果我理解正确,在执行此操作时:

connect(my_button_4, SIGNAL(clicked()), this, SLOT(writeNumberLbl("4")));
WriteEnumBerlbl中的“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")));
我的WriteEnumBerlbl函数是:

void Calculator::preWriteVal(QChar val)
{
    QString curVal = ui.lbl_output->text();
    curVal += val;
    ui.lbl_output->setText(curVal);
}
但是,我可以看到,由于参数“val”,这将不起作用。有人能给我指一下正确的方向吗?非常感谢。我确实想看看这个问题是否已经得到了回答,但什么也找不到。如果有,请给我一个链接

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


谢谢。

解决这个问题的方法有很多,下面对它们进行了概述。虽然那一页有点旧,但我认为它仍然很有效。我建议使用信号映射器


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

有许多方法可以解决此问题,并对它们进行了概述。虽然那一页有点旧,但我认为它仍然很有效。我建议使用信号映射器


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

据我所知,Qt的信号/插槽系统要求信号功能的参数数量不小于插槽功能的参数数量。
在您的示例中,信号函数click()有零个参数,插槽函数writeNumberBL(“4”)有一个参数,这将不被Qt的信号/插槽系统接受,如果您在Qt creator的调试模式下运行程序,qDebug将向您显示类似“不兼容信号/插槽”Blalba~的消息。要解决这个问题,请阅读Arnold Spence的文章。很清楚。

据我所知,Qt的信号/插槽系统要求信号功能的参数数量不小于插槽功能的参数数量。
在您的示例中,信号函数click()有零个参数,插槽函数writeNumberBL(“4”)有一个参数,这将不被Qt的信号/插槽系统接受,如果您在Qt creator的调试模式下运行程序,qDebug将向您显示类似“不兼容信号/插槽”Blalba~的消息。要解决这个问题,请阅读Arnold Spence的文章。很清楚。

插槽中的参数数量不能退出信号中的参数?而pressed()没有。你有两个选择(三个,算上愚蠢的一个):

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

    插槽中的参数数量不能退出信号中的参数?而pressed()没有。你有两个选择(三个,算上愚蠢的一个):

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

    看看我对一个类似问题的回答,这里:你可以关注我的Qt应用程序开发新手博客:看看我对一个类似问题的回答,这里:你可以关注我的Qt应用程序开发新手博客:谢谢你的建议;然而,我知道“编辑信号/插槽”模式,我想我想知道的是,是否有某种方法可以将按钮拖动到自定义插槽(我制作的插槽)。是的。如果已经定义了插槽,则可以将连接器拖动到具有该插槽的对象,并在生成的对话框中将其连接起来。感谢您的帮助。我想我现在明白多了。在文档结尾处,它这样说:“……如果您要实现一个调色板工具,允许用户从一组标准颜色中选择一种颜色,并且需要发出一个colorSelected(const QColor&)信号,那么最好使用sender()方法或上述子类方法。”我想知道我是否需要一个if-else语句,例如:if(button1==(*pusbutton)sender())//将调色板颜色更改为蓝色else if(button2==(*pusbutton)sender())//更改调色板颜色红色等。谢谢你的建议;然而,我知道“编辑信号/插槽”模式,我想我想知道的是,是否有某种方法可以将按钮拖动到自定义插槽(我制作的插槽)。是的。如果已经定义了插槽,则可以将连接器拖动到具有该插槽的对象,并在生成的对话框中将其连接起来。感谢您的帮助。我想我现在明白多了。在文档结尾处,它这样说:“……如果您要实现一个调色板工具,允许用户从一组标准颜色中选择一种颜色,并且需要发出一个colorSelected(const QColor&)信号,那么最好使用sender()方法或上述子类方法。”我想知道是否需要一个if-else语句,例如:if(button1==(*pusbutton)sender())//change