C++ 在标签顶部涂漆,而不是在标签后面涂漆

C++ 在标签顶部涂漆,而不是在标签后面涂漆,c++,qt,C++,Qt,我在Qt4.7.4中创建了一个简单的仪表,一切都运行得非常好。除了这样一个事实,在我的一生中,当刻度盘经过文本标签时,我无法让它在上面画画。它总是在标签后面画。我只是在使用一个简单的drawpolygon()方法 我想这和绘画活动有关?我在QFrame主窗口中绘制所有内容。我正在使用QFrame的paintEvent 编辑: QLabel是在启动时使用新的QLabel创建的(此)。它们只创建一次,不会再被触摸(类似于使用Designer在Ui上手动添加它们)。drawpolygon()位于QFr

我在Qt4.7.4中创建了一个简单的仪表,一切都运行得非常好。除了这样一个事实,在我的一生中,当刻度盘经过文本标签时,我无法让它在上面画画。它总是在标签后面画。我只是在使用一个简单的
drawpolygon()
方法

我想这和绘画活动有关?我在
QFrame
主窗口中绘制所有内容。我正在使用
QFrame
paintEvent

编辑: QLabel是在启动时使用新的QLabel创建的(此)。它们只创建一次,不会再被触摸(类似于使用Designer在Ui上手动添加它们)。drawpolygon()位于QFrame的绘制事件中

“myclass.h”

“myclass.cpp”


如果gauge小部件和qlabel是兄弟,那么可以通过调用gauge小部件的方法将其移动到前面


另一方面,如果qlabel是gauge小部件的子项,那么它们将始终显示在gauge小部件的前面。在这种情况下,您可以重新组织小部件层次结构,使它们成为同级,或者您可以去掉QLabel,只需从paintEvent()方法调用drawText()(在drawDial()返回后)

您是用相同的方法绘制标签,还是在其他地方绘制标签?您能显示相关部分吗?您是在绘制标签还是将QLabel添加到布局中?@Mat QLabel是在启动时使用新的QLabel创建的(此)。它们只创建一次,不会再被触摸(类似于使用Designer在Ui上手动添加它们)。drawpolygon()在QFrame的绘制事件中。raise()方法不起作用,我旋转指针,在不旋转指针的情况下如何处理文本?在save()/restore()对之外绘制文本,或在绘制文本之前向后旋转谢谢,我会尝试,但听起来计算成本很高,这将在嵌入式系统上进行。如果我将QLabel子类化,并在新的QLabel中调用drawDial()方法,指针是否仍在标签后面?如果QLabel子类的paintEvent()先调用QLabel::paintEvent(),然后再绘制刻度盘,则刻度盘将绘制在文本上。(如果您担心效率,您可以将渲染文本缓存到QPixmap中,然后在必要时绘制QPixmap……但我不会担心这种优化,除非/直到您发现性能问题)
    class gauge : public QFrame
{
    Q_OBJECT

public:
    explicit gauge(QWidget *parent = 0);
    ~gauge();
    void setValues(int req, int Limit, bool extra=false);

private:

    void drawDial();

protected:
    void paintEvent(QPaintEvent *e);

};
void gauge::paintEvent(QPaintEvent *e)
{
    Q_UNUSED(e);


     drawDial();
    return;
}


void gauge::drawDial()
{


    QPainter Needle(this);
    Needle.save();
    Needle.setRenderHint(Needle.Antialiasing, true); // Needle was Staggered looking, This will make it smooth
    Needle.translate(centrePt); // Center of Widget
    Needle.drawEllipse(QPoint(0,0),10,10);
    Needle.restore();
    Needle.end();
}