c++ - 在 Qt 中绘制在标签的顶部,而不是在它的后面

标签 c++ qt

Dial

我正在 Qt 4.7.4 中创建一个简单的仪表,一切都运行良好。除了这样一个事实,在我的一生中,当它经过文字标签时,我无法让表盘形状在文字标签上绘画。它总是把它画在标签后面。我只是在使用一个简单的 drawpolygon() 方法。

我在想这与绘画事件有关吗?我正在 MainWindow 内的 QFrame 内绘制所有内容。我正在使用 QFramepaintEvent

编辑: QLabels 是在启动时使用 new QLabel(this) 创建的。它们只创建一次,再也不会被触及(类似于使用 Designer 在 Ui 上手动添加它们)。 drawpolygon() 在 QFrame 的 Paint 事件中。

“我的类.h”

    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);

};

"我的类.cpp"

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();
}

最佳答案

如果仪表小部件和 QLabel 是兄弟,那么您可以通过调用其 raise() 将仪表小部件移动到前面。方法。

另一方面,如果 QLabel 是仪表小部件的子级,那么它们将始终显示在它的前面。在这种情况下,您可以重新组织您的小部件层次结构,以便它们成为 sibling ,或者您可以摆脱 QLabels 并简单地从您的 paintEvent() 方法调用 drawText() 而不是(在 drawDial() 返回之后)

关于c++ - 在 Qt 中绘制在标签的顶部,而不是在它的后面,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28946690/

相关文章:

c++ - 为什么不可能有对void的引用?

c++ - 变量或字段 `generateMonster' 声明无效

c++ - 如何将具有 16 位整数的图像转换为 QPixmap

c++ - RtAudio + Qt : duplex not working with RME Fireface on Linux

c++ - 双重自由或腐败(!prev)c++ opencv

c++ - 是否有任何编译器支持 constexpr?

c++ - 在这种情况下如何正确使用 std::enable_if

c++ - 自定义可检查/可切换 QFrame 小部件

c++ - Qt c++ - 克隆一个对象

qt - QWebEngineView,在 View 中发布KeyEvents