【问题标题】:Add custom QWidget to another QWidget将自定义 QWidget 添加到另一个 QWidget
【发布时间】:2020-07-09 02:55:12
【问题描述】:

我正在尝试将一个对象(继承自 QWidget)作为子对象添加到另一个 QWidget,如下所示,它与另一个普通的 QWidget 实例完美配合,但不适用于我的自定义类,任何想法为什么?

fenetre.h

#ifndef FENETRE_H
#define FENETRE_H

#include <QWidget>
#include <QMouseEvent>

class Fenetre : public QWidget
{
   Q_OBJECT
public:
   Fenetre();
};

#endif // FENETRE_H

fenetre.cpp

#include "fenetre.h"

Fenetre::Fenetre() : QWidget()
{

}

ma​​in.cpp

#include <iostream>
#include <QApplication>
#include <QWidget>
#include "fenetre.h"

int main(int argc, char *argv[])
{
    QApplication app(argc,argv);

    QWidget window;
    window.setFixedSize(800,600);

    //This appears
    QWidget rec1;
    rec1.setParent(&window);
    rec1.setFixedSize(100,100);
    rec1.move(400,200);
    rec1.setStyleSheet("background-color: red");

    //This one not
    Fenetre rec2;
    rec2.setParent(&window);
    rec2.setFixedSize(100,100);
    rec2.move(200,200);
    rec2.setStyleSheet("background-color: green");

    window.show();

    return app.exec();
}

PS:我在平台上进行了研究,但大多数答案都提到了布局的使用。谢谢!

【问题讨论】:

  • 我尝试使用 Windows10/VS2017/Qt5.13 以及 cygwin/g++/Qt5.9 重现您的 MCVE。在这两种情况下,我都得到了红色和绿色的盒子。我所做的唯一更改:从class fenetre 中排除Q_OBJECT(因为我无法正确参与moc 并且没有任何经验)。在这个 MCVE 中,Q_OBJECT 可能相当无用 - 不确定它是否对您的问题起作用......
  • @Scheff 谢谢,问题是setStyleSheet() 函数,我必须在我的自定义类中实现paintEvent 函数才能使其工作。
  • 你在fenetre::paintEvent()做什么?它应该继承自QWidget(),不是吗?就我而言,它在没有paintEvent() 的情况下工作。我只是复制/粘贴了您的代码,我唯一做的就是将Q_OBJECT 更改为//Q_OBJECT。难道为class fenetre 引入新的元类型会产生这样的后果吗?
  • 根据这个wiki,我们需要给自定义的widget提供一个paintEvent
  • 这个 wiki 提到了 Symbian OS。我不需要paintEvent()。 (我发誓。);-) 你在什么操作系统上运行了测试?

标签: c++ qt qwidget


【解决方案1】:

你想念父母:

//header .h
class Fenetre : public QWidget
{
   Q_OBJECT
public:
   Fenetre(QWidget *parent = 0);
};

//source .cpp
Fenetre::Fenetre(QWidget *parent) : QWidget(parent)
{

}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-26
    • 1970-01-01
    • 2018-01-24
    • 2020-10-14
    • 1970-01-01
    • 2014-11-29
    • 2014-12-05
    相关资源
    最近更新 更多