我用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')
如何使此连接有效?
答案 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});