我想单击一个按钮以保持按下状态。因此,我做了一个插槽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()in”存在错误,尽管所有内容都已编译并且出现了窗口。问题是尽管在同一cpp文件和 header 中,但显然找不到该插槽。因此,单击时,botton邻居会更改其文本,也不会保持按下状态。
最佳答案
您只是在类声明http://doc.qt.io/qt-5/qobject.html中忘记了Q_OBJECT宏:
http://doc.qt.io/qt-5/qobject.html#Q_OBJECT:
每次您将QObject / QWidget / ...子类化时,就这样使用它:
#include <QObject>
class Counter : public QObject
{
Q_OBJECT
// ...
}
关于c++ - QObject::sender()在插槽中无法正常工作,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36813487/