带有Qtoolbutton的信号和插槽

时间:2010-11-18 03:27:17

标签: c++ qt qt4

我用qt设计器创建了一个ToolButton,我试图将它连接到一个插槽。 我写了这个

connect(ui->toolButton_addfiles, SIGNAL(triggered()), this, SLOT(changeDirectory()));

我能够运行该程序但是当我按下按钮时,我看到以下登录到我的qt应用程序输出:

   Object::connect: No such signal QToolButton::triggered() in ../RightDoneIt/rightdoneit.cpp:10
    Object::connect:  (sender name:   'toolButton_addfiles')
    Object::connect:  (receiver name: 'RightDoneIt')
  • 如果我将toolButton_add文件更改为某些操作(例如(actionChange_addfile)),它将正常工作。

如何使此连接有效?

4 个答案:

答案 0 :(得分:4)

正如错误所述,QToolButton中没有信号triggered()而是triggered(QAction*)

修改 在connect函数中,您必须具有triggered(QAction*)之类的信号签名,因为QToolButton类没有声明triggered()(没有参数)声明

删除评论中的解释: 如果要使此连接正常工作,则需要提供一个以QAction指针作为参数的插槽。如果您无法执行此操作,可以尝试使用clicked信号。

答案 1 :(得分:2)

您可以使用Qt。

的自动连接过程

在引用您的UI的类中,创建一个名为:

的插槽

on_toolButton_addfiles_clicked();

例如:

请参阅:A Dialog With Auto-Connect

class ImageDialog : public QDialog, private Ui::ImageDialog
{
    Q_OBJECT

public:
    ImageDialog(QWidget *parent = 0);

private slots:
    void on_okButton_clicked();
};

希望这有帮助!

编辑:qAbstractButton中没有触发信号。见http://doc.qt.nokia.com/4.7/qabstractbutton.html

答案 2 :(得分:0)

我猜你正在创建一个QAction,将它添加到QToolButton并尝试将它连接到你自己类中的一个插槽?

您可以将插槽连接到QToolButton :: triggered(QAction *)信号或直接连接到QAction :: triggered()信号。无论哪种方式,QAction必须通过QWidget :: addAction(QAction *)添加到QToolButton,槽的方法签名必须与信号的签名匹配,并且连接调用必须包括信号/槽参数,而不仅仅是信号的名称和插槽。

答案 3 :(得分:0)

QToolButton()具有信号方法 triggered(QAction *),如果需要触发与QToolbutton连接的相关QAction,则应处理该信号。同时,QToolButton继承自QAbstractButton(),该信号具有 toggled(布尔检查)信号。如果要捕获通过按下/取消按下工具按钮触发的信号,可以执行以下操作:

   auto toolbutton = new QToolButton(this);
     connect(toolbutton , &QAbstractButton::toggled, this, []() { // your code });

或者(我尚未检查此解决方案是否有效),您可以明确定义要捕获的信号

    connect(toolbutton , qOverload<bool>(&QToolButton::toggled), this, [](bool val) { // your code});