Qt自定义QPush按钮未显示在布局上
Qt custom QPushButton doesn't show up on layout
我编写了自己的自定义QPushbutton
类来捕获悬停事件。问题是,当我试图显示我的自定义按钮时,它不会显示,但捕捉悬停事件工作得很好(它打印到控制台(,QPushButton
也会出现在表单上。此外,当我杀死bool event(QEvent *)
功能按钮时,按钮会像预期的那样显示在显示器上。
S按钮.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;
};
主窗口.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);
您可能忽略了SButton
类的bool event(QEvent *event);
中的事件。试试这个:
bool SButton::event(QEvent* event)
{
if (event->type() == QEvent::HoverEnter) {
emit HoverIn();
}
// Other events...
return QPushButton::event(event);
}
顺便说一句,return
之后的break
只是噪声:
return true;
//break; <-- remove
相关文章:
- 比较并显示使用最小值(a,b)和最大值(a、b)升序排列的4个数字
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 字符串-C++后显示的随机字符
- 继承期间显示未知行为的子类
- 仅使用绝对值对数组进行排序,并在C++中显示实际值
- 如何使用C/C++在MacOSX中获得键盘布局
- 程序崩溃并显示"std::out_of_range"错误
- 如何在C++中用std::cout正确显示带十六进制的字符串文本
- 为什么在C的循环中使用printf的Rust代码不显示输出,而在C++的循环中显示std::cout
- Vulkan验证层不断在VkQueuePresentKHR()上抛出图像布局错误
- 从数据库实时显示QT c++中的数据
- 当使用比格式支持的精度更高的精度来显示数字时,会写出什么数据
- 显示错误输出的简单数组排序程序
- Qt自定义QPush按钮未显示在布局上
- Qwtslider布局-显示当前值
- Windows Phone:显示软件键盘后重新布局
- Qt框架:如何在布局中显示QGraphicsView
- Qt网格布局不正确显示在滚动区域
- 在布局中显示自定义小部件
- 类数据成员内存布局显示指针大小过大