我正在 Qt 4.7.4 中创建一个简单的仪表,一切都运行良好。除了这样一个事实,在我的一生中,当它经过文字标签时,我无法让表盘形状在文字标签上绘画。它总是把它画在标签后面。我只是在使用一个简单的 drawpolygon()
方法。
我在想这与绘画事件有关吗?我正在 MainWindow
内的 QFrame
内绘制所有内容。我正在使用 QFrame
的 paintEvent
。
编辑: 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/