QT 'void QAbstractButton::pressed ()' is protected

QT

'void QAbstractButton::pressed ()' is protected
within this context
no matching function for call to

img

img

报错的Button类,和你connect制定的QPushButton不是一个Button类啊

该回答引用GPTᴼᴾᴱᴺᴬᴵ
这个报错通常是因为您尝试在QAbstractButton子类的函数中调用QAbstractButton的protected槽函数pressed()。
-
在Qt中,protected槽函数只能被子类内部调用,不能在其他类中直接调用。如果您要在子类的函数中调用pressed(),应该通过emit关键字发射信号来触发pressed()的调用。
-
例如,在QPushButton的子类中,您可以使用如下代码:

class MyButton : public QPushButton
{
    Q_OBJECT
public:
    explicit MyButton(QWidget *parent = nullptr);
signals:
    void buttonPressed(); // 声明一个新的信号
private slots:
    void onButtonPressed(); // 槽函数
};

MyButton::MyButton(QWidget *parent)
    : QPushButton(parent)
{
    connect(this, &MyButton::clicked, this, &MyButton::onButtonPressed);
}

void MyButton::onButtonPressed()
{
    emit buttonPressed(); // 发射新信号
}

在这个例子中,我们声明了一个新的信号buttonPressed(),然后在按钮的clicked信号触发时,调用了一个新的槽函数onButtonPressed()。在onButtonPressed()函数中,我们使用emit关键字发射buttonPressed()信号,这样其他类就可以通过连接buttonPressed()信号来响应按钮按下事件。

在另一个类中,您可以使用如下代码来连接buttonPressed()信号:

connect(myButton, &MyButton::buttonPressed, this, &MyClass::onButtonPressed);

在这个例子中,我们使用connect()函数将buttonPressed()信号连接到另一个类的槽函数onButtonPressed()。当buttonPressed()信号发射时,onButtonPressed()槽函数就会被调用。

你这b3都已经是个指针了,还取地址干啥
直接写
connect(b3, &QPushButton::pressed, this, &MainWidget::close)

不知道你这个问题是否已经解决, 如果还没有解决的话:

如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^