QWidget 的简单子类不能用作 QWidget
A simple subclass of QWidget doesn't work as a QWidget
我创建了一个非常简单的QWidget子类,如下所示:
class WorldView : public QWidget
{
Q_OBJECT
public:
explicit WorldView(QWidget *parent = 0);
signals:
public slots:
};
WorldView::WorldView(QWidget *parent) : QWidget(parent)
{
}
我在主窗口创建了一个实例,如下所示:
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
protected:
virtual void resizeEvent(QResizeEvent* event) override;
private:
WorldView* _worldView;
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
_worldView = new WorldView(this);
_worldView->setStyleSheet(QString("* {background-color : black}"));
}
MainWindow::~MainWindow()
{
delete _worldView;
}
void MainWindow::resizeEvent(QResizeEvent *event)
{
_worldView->resize(size());
}
但是小部件没有按预期显示。
我试着打电话给show()
,但它仍然没有显示。
奇怪的是,当我用QWidget
代替WorldView
时,小部件显示出来了。
我不知道为什么
因为样式表对自定义QWidget子类不起作用。
From https://doc.qt.io/qt-5/stylesheet-reference.html:
QWidget
只支持background, background-clip和background-origin属性。
如果您从QWidget继承了子类,您需要为您的自定义QWidget提供一个paintEvent,如下所示:
void CustomWidget::paintEvent(QPaintEvent *) { QStyleOption opt; opt.init(this); QPainter p(this); style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this); }
如果没有样式表集,上面的代码是无操作的。
警告:请确保为您的自定义小部件定义了Q_OBJECT宏。
(一般来说,停止使用样式表)
相关文章:
- C++我的数学有什么问题,为什么我的代码不能正确循环
- 为什么在没有显式默认构造函数的情况下,将另一个结构封装在联合中作为成员的结构不能编译
- 为什么我的for循环不能正确获取argv
- 不能在初始值设定项列表中将非常量表达式从类型 'int' 缩小到'unsigned long long'
- 为什么我不能在 FOR LOOP 中使用 i/10,C++?
- 为什么我不能在不创建字符串变量的情况下使用函数的字符串输出
- 为什么模板类中的对象不能返回值
- 为什么我不能在一个类的不同行中声明和定义成员变量?
- 为什么我不能在 C++ 中的特定函数重载中调用同一函数的任何其他重载?
- ld:bind_at_load和-bitcode_bundle(Xcode设置ENABLE_bitcode=YES)不能
- 数组长度,为什么从命令行获取时不能使用它?
- Windows/Cygwin - 不能使用 pybind11 - 犯错误
- 为什么我不能使用 EGL 创建无头 OpenGl 上下文?
- 递归模板化函数不能分配给具有常量限定类型"const tt &"的变量"state"
- 为什么我不能将一个对象push_back到属于另一个类的对象向量中?
- 为什么我不能将 rand() 与数组的大小一起使用?
- 不能在绘画中使用 QPainter 自定义 QWidget 的事件 (Qt5)
- 不能声明Qwidget,因为虚拟函数是纯粹的
- 为什么我不能调用继承版本的 QWidget::isVisible()?
- QWidget 的简单子类不能用作 QWidget