c++QPushButton信号和插槽
c++ QPushButton signal and slot
我在创建QPushButton
并将其信号链接到我的插槽时遇到问题。首先,我创建了一个带有插槽的类:
class A : public QWidget{
public slots:
void handleButton();
};
.cpp 中有我的handleButton
函数
void A::handleButton(int row, int col){
m_button->setText("Example");
// resize button
m_button->resize(100,100);
}
然后我想连接按钮。
QObject::connect(m_button, SIGNAL(clicked()), qApp, SLOT(handleButton()));
但我在启动应用程序时遇到了一个错误:
"No such slot"
确保qApp
是类A
的对象(即定义插槽的位置)。
也就是说,签名是错误的:只有当签名与匹配时,信号才会链接到插槽
http://qt-project.org/doc/qt-4.8/signalsandslots.html
信号和插槽机制是类型安全的:信号的签名必须与接收插槽的签名匹配。
你的插槽没有正确的签名:
http://qt-project.org/doc/qt-4.8/qabstractbutton.html#clicked
void QAbstractButton::clicked ( bool checked = false ) [signal]
您在这段代码中有一些错误,如果您定义了"void handlebutton()",那么您必须实现void handlebbutton()NOT void handlebotton(inx,int y)这段代码甚至不应该编译。
更多:在QT中,您只能使用相同的参数连接SIGNALS和SLOT,因此您可以将SIGNAL(clicked())与SLOT(handlebutton())连接,但不能将SIGNAR(cliked()与SLOT(handlebutton(int,int))连接。
另一个问题是连接是在运行时执行的,所以在Qt向您显示错误之前,您必须编译并运行。
因此,一个可能的解决方案是:
定义并实现slot void handlebutton(),并将其连接到信号clicked(),然后定义另一个方法handlebutton(int x,int y),您将从handleBbutton()内部调用它。
我真的希望这对你有意义。
您的类定义应该看起来像:
class A : public QWidget
{
Q_OBJECT
public slots:
void handleButton(int, int);
};
你应该像这样连接它:
QObject::connect(m_button, SIGNAL(clicked()),qApp, SLOT(handleButton(int a, int b)));
其中CCD_ 5和CCD_。
这应该行得通。试着理解基本的C++。:)
- 如何将点击的信号和插槽添加到qt中的自定义按钮中
- 如何在没有信号的情况下从C++执行QML插槽
- 升压信号2将插槽传递到成员功能以断开连接
- 如何在qt中将信号和插槽与另一个对象连接 --解决了
- C++ 信号和插槽不工作:插槽不响应事件
- QObject::连接无法将信号连接到*this*对象的插槽
- 通过插槽和信号在不同线程中的两个qt对象之间进行通信
- 控制带有信号/插槽的Qt QML滑动视图
- Qt 信号/插槽问题
- QT5 信号不会激活插槽内的功能
- Qt5:连接:如果插槽的参数少于信号,如何使用"连接"
- Qt信号和插槽如果从QRunnable或其他线程调用,则不起作用
- C++Qt信号和插槽
- Qt moveToThread,带有参数的信号/插槽
- 当再次触发信号时,从Qt插槽执行的功能被第二次调用时会发生什么?
- 从 QWidgetList 访问 QWidget 子插槽/信号 (QList<QWidget*>)
- 两个对象QT之间的示例插槽/信号
- QT对象::连接:没有此类插槽信号到线程插槽
- Qt QAxWidget - WebBrowser手动设置插槽/信号
- 没有这样的插槽/信号(Qt)