gpt4 book ai didi

c++ - Qt自定义QPushButton不在布局上显示

转载 作者:行者123 更新时间:2023-12-02 10:29:41 25 4
gpt4 key购买 nike

我编写了自己的自定义QPushbutton类来捕获悬停事件。问题是,当我尝试显示自定义按钮时,它没有显示,但是捕获悬停事件就可以了(它可以打印到控制台),并且QPushButton也显示在表单上。另外,当我杀死bool event(QEvent *)功能按钮时,它会像预期的那样显示在屏幕上。
SButton.h

#include <QPushButton>
#include <QEvent>
#include <QObject>

class SButton : public QPushButton {
Q_OBJECT
public:
SButton(QWidget *parent = nullptr) : QPushButton(parent) {}
SButton(const QString &text, QWidget *parent = nullptr): QPushButton(text, parent){}
SButton(const QIcon& icon, const QString &text, QWidget *parent = nullptr) : QPushButton(icon, text, parent){}
signals:
void HoverIn();
void HoverOut();

protected:
bool event(QEvent *event);
private:
QWidget* p;
};
MainWindow.cpp
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{

ui->setupUi(this);


QWidget *MainWidget=new QWidget();
this->setCentralWidget(MainWidget);

QHBoxLayout *layoutAdd=new QHBoxLayout();
QPushButton *bSelect=new QPushButton("Select group or company"); //this one does just fine
SButton *bAdd=new SButton("Add new group or company", MainWidget); //this one makes the problem

layoutAdd->addWidget(bSelect);
layoutAdd->addWidget(bAdd);
bAdd->show();
MainWidget->setLayout(layoutAdd);
MainWidget->show();

connect(bAdd, &SButton::HoverIn, bAdd, []() {QTextStream(stdout) << "got there at least" << "\n";});
SButton.cpp:
#include <SButtons.h>
#include <QTextStream>

bool SButton::event(QEvent *event) {


switch(event->type()) {
case QEvent::Enter:
emit HoverIn();
QTextStream(stdout) << "Enter" << "\n";
return true;
break;
case QEvent::Leave:
emit HoverOut();
QTextStream(stdout) << "Leave" << "\n";
return true;
break;
default:
return false;
break;
}
return QPushButton::event(event);
}

最佳答案

编辑:如前所述,您将忽略所有事件并返回false:

    default:
return false;
break;
}
return QPushButton::event(event); // this line is never reached
而是这样做:

default:
break;
}
return QPushButton::event(event);

//OR
default:
return QPushButton::event(event);
您可能会忽略 bool event(QEvent *event);类的 SButton中的事件。尝试这个:
bool SButton::event(QEvent* event)
{
if (event->type() == QEvent::HoverEnter) {
emit HoverIn();
}
// Other events...

return QPushButton::event(event);
}
附带说明一下, break之后的 return只是噪音:
        return true;
//break; <-- remove

关于c++ - Qt自定义QPushButton不在布局上显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62776229/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com