作为任务的一部分,有必要通过按下按钮 ( )QPushButton将相应的字符添加到行中。实现了一些类似的用户授权。有一个类:
struct PStr:public QObject {
private:
std::string pass = "1234";
std::string input;
public slots:
void action(char c, QMainWindow * w)
{
input += c;
if (input == pass)
{
w->hide();
}
}
};
当调用QObject::connect(button1, SIGNAL(clicked()), p, SLOT(action('1', w)));where PStr * p 时,它会编译,但在运行时会向控制台报错:
QObject::connect: No such slot QObject::action('1', w)
有人简要而不详细地建议指定构造函数,定义方法并添加 Q_OBJECT,但后来我卡住了:
class PStr:public QObject {
Q_OBJECT
public slots:
void action(char c, QMainWindow * w);
public:
PStr() {
}
};
void PStr::action(char c, QMainWindow * w)
{
std::string pass = "1234";
std::string input;
input += c;
if (input == pass)
{
w->hide();
}
}
宏 Q_OBJECT 是套件本身的例程所必需的,因此当您的对象被销毁时,它将与与其关联的信号断开连接,内存将被释放等。
您正在连接无法连接(https://doc.qt.io/qt-5/signalsandslots.html#signals-and-slots-with-default-arguments)您的信号没有参数(
void),而插槽期望(char, QMainWindow*)连接这我会建议使用 lambdaQObject::connect(button1, &QPushButton::clicked, p, [=](){ p->action('1', w); });我凭记忆写的,我可能会在语法上犯错