【发布时间】:2015-03-09 16:12:17
【问题描述】:
我正在 Qt 4.7.4 中创建一个简单的仪表,一切都运行良好。除了这样一个事实,在我的一生中,当它经过它们时,我无法让表盘形状在文本标签上绘制。它总是把它画在标签后面。我只是使用一个简单的drawpolygon() 方法。
我认为这与绘画事件有关?我在MainWindow 中绘制QFrame 中的所有内容。我正在使用QFrame 的paintEvent。
编辑: QLabel 是在使用新的 QLabel(this) 启动时创建的。它们只被创建一次,并且再也不会被触及(类似于使用 Designer 在 Ui 上手动添加它们)。 drawpolygon() 在 QFrame 的 Paint 事件中。
“myclass.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);
};
“myclass.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();
}
【问题讨论】:
-
您是用同样的方法绘制标签,还是在其他地方绘制标签?可以展示一下相关的部分吗?
-
您是在绘制标签还是将它们 QLabels 添加到布局中?
-
@Mat QLabel 在启动时使用新的 QLabel(this) 创建。它们只被创建一次,并且再也不会被触及(类似于使用 Designer 在 Ui 上手动添加它们)。 drawpolygon() 在 QFrame 的 Paint 事件中。