QObject::sender() 在插槽中无法正常工作
QObject::sender() doesn't work properly in a slot
我想做一个按钮,在点击后保持按下状态。所以我做了一个插槽make_pushed我试图用于这个目的。单击的按钮由 QObject::sender() 方法标识。但是出了点问题,因为它不起作用。
QPushButton * size=new QPushButton("size",this);
connect(size, SIGNAL(clicked()), this, SLOT(make_pushed()));
void Window4::make_pushed()
{
QObject* sender = this->sender();
QPushButton* button = qobject_cast<QPushButton*>(sender);
button->setDown(true);
button->setText("Yep");
}
class Window4 : public QWidget
{
public:
Window4(QWidget * parent=0);
private slots:
void make_pushed();
};
应用程序输出"QObject::connect:没有这样的插槽QWidget::make_pushed()"中存在错误,尽管所有内容都已编译并出现窗口。问题是显然找不到插槽,尽管它位于相同的 cpp 文件和标头中。因此,当单击时,botton neigher 会更改其文本或保持推送状态。
您刚刚忘记了类声明Q_OBJECT中的宏 http://doc.qt.io/qt-5/qobject.html:
请注意,Q_OBJECT宏对于实现信号、槽或属性的任何对象都是必需的。您还需要在源文件上运行元对象编译器。我们强烈建议在 QObject 的所有子类中使用此宏,无论它们是否实际使用信号、插槽和属性,因为如果不这样做可能会导致某些函数表现出奇怪的行为。
http://doc.qt.io/qt-5/qobject.html#Q_OBJECT:
Q_OBJECT宏必须出现在类定义的私有部分,该定义声明自己的信号和插槽,或使用Qt元对象系统提供的其他服务。
注意:此宏要求类是 QObject 的子类。使用 Q_GADGET 而不是 Q_OBJECT 启用元对象系统对非 QObject 子类类中的枚举的支持。
每次你子类QObject/QWidget/...时都像这样使用它:
#include <QObject>
class Counter : public QObject
{
Q_OBJECT
// ...
}
相关文章:
- QSqlquery prepare()和bindvalue()不工作
- 导入库可以跨dll版本工作吗
- 以螺旋方式打印矩阵的程序.(工作不好)
- 对象指针在c++中是如何工作的
- 为什么在Windows上的VS 2019和Clang 9中"size_t"在没有标题的情况下工作
- VSOMEIP-2个设备之间的通信(TCP/UDP)不工作
- 为字符串中每 N 个字符插入空格的函数没有按照我认为的方式工作?
- C++为线程工作动态地分割例程
- 为什么我的 std::ref 无法按预期工作?
- 布尔比较运算符是如何在C++中工作的
- SampleConsensusPrerejective(ext.RANSAC)是如何真正工作的
- 不确定要在我的main中放入什么才能使我的代码正常工作
- 为什么std::condition_variable notify_all的工作速度比notify_one快(对于随机请
- <<操作员在下面的行中工作
- 有人能解释一下为什么下界是这样工作的吗C++的
- ExtractIconEx:可以工作,但偶尔会崩溃
- C++中的memset函数工作不正常
- 当我在第一个循环中使用"auto"时,它工作正常,但是使用"int"它会给出错误,为什么?
- 为什么STD ::计数将常数传递给Lambda,而不是在弦上工作时而不是字符
- C++程序已停止工作-求解常微分方程