为按钮分配新插槽clicked()

时间:2018-04-17 11:24:10

标签: qt

我在设计表格中复制了几个按钮。因此,所有按钮都为clicked()获得了相同的插槽。如何为按钮创建和分配新的个人插槽?

UPD

尝试使用Signals & Slots editor。它在开始时是空的,我添加了新的:

enter image description here

但如果我right click on button btnInfoCB->go to slot.. clicked(),它会指向我同样的旧方法。

3 个答案:

答案 0 :(得分:0)

Qt创建者将为您创建插槽。从设计师处,右键单击任何按钮,然后选择“转到插槽”选项。选择Clicked()信号按OK。 Qt创建者将导航到您创建的插槽。 Qt自动将按钮点击信号连接到创建的插槽。

您可以对您创建的所有按钮执行相同的操作

答案 1 :(得分:0)

Qt有一个自动连接功能,可以将名为on_UIELEMENTNAME_SIGNALNAME(SIGNAL_PARAMS)的插槽与ui元素的相应信号连接起来,请参阅文档here

所以要解决这个问题,你有两个选择:

选项1:重命名插槽以使所有名称与.ui文件中的名称相对应:

private slots:
    void on_MyFirstBtn_clicked();
    void on_MySecondBtn_clicked();
    //and so on

或使用选项2:手动连接

private slots:
    //notice the prefix "on_" and the suffix "_clicked()" not part of the function name
    void MyFirstBtnClicked();
    void MySecondBtnClicked();

在类的构造函数中(我将其命名为MyWidget)添加connect调用:

    connect(ui->MyFirstBtn, &QPushButton::clicked, this, &MyWidget::MyFirstBtnClicked);
    connect(ui->MySecondBtn, &QPushButton::clicked, this, &MyWidget::MySecondBtnClicked);

LE:由于可维护性的原因,我不建议使用UI Designer连接代码中定义的插槽。如果您需要连接已经定义的信号和插槽,例如check / unched以显示/隐藏和其他类似的预定义功能,Designer中的这个功能非常好,但对于您定义的插槽我不喜欢它。

答案 2 :(得分:0)

现有QPushButton / w自动连接的新插槽

您必须先更改QPushButton objectName 。然后右键单击并创建一个新的插槽连接e。 G。 clicked()。然后Qt Creator将使用新的objectName e创建一个新的插槽。 G。 void on_newObjectName_clicked() { }。之后不再使用旧插槽,您将获得新的新功能

手动连接/ w信号和插槽编辑器

如果您想通过编辑器连接它,首先必须单击QWidget(例如MainWindow)并从菜单中选择更改 signals / slots 。在那里你必须添加一个新功能e。 G。 myNewSlot(),然后可以在信号和插槽编辑器的下拉菜单中找到,如屏幕截图所示。如果您使用此类连接,则需要在.hprivate slots文件中的.cpp声明广告位。对象名称仍然可以链接到自动连接,因此您可能还需要更改objectName或删除自动连接的插槽。