用Qt编程绘制线条
Drawing lines programmatically with Qt
我想在两点之间的QLabel中以编程方式添加行。从我发现的,似乎唯一的方法是子类化一个QWidget来改变PaintEvent()保护的方法。
因此,我从QWidget创建了一个新类'QLineObject'。这是我的头文件
class QLineObject : public QWidget
{
Q_OBJECT
public:
QLineObject();
QLineObject(Point from, Point to);
protected:
void paintEvent(QPaintEvent *event);
private:
Point fromPoint;
Point toPoint;
};
和实现文件:
QLineObject::QLineObject()
{
Point point;
point.x = 0.0;
point.y = 0.0;
fromPoint = point;
toPoint = point;
}
QLineObject::QLineObject(Point from, Point to)
{
fromPoint = from;
toPoint = to;
}
void QLineObject::paintEvent(QPaintEvent *event)
{
QPainter painter(this);
painter.drawLine(fromPoint.x, fromPoint.y, toPoint.x, toPoint.y);
}
问题来了。我找不到如何在我的主窗口添加这个小部件。如果我创建一个QLineObject的新实例并调用show(),它会弹出一个新窗口。我肯定是漏掉了什么。有人想帮我吗?我想知道如何创建和添加它从其他地方,我的主窗口构造器。
谢谢!
你不应该在QLineObject上调用show。相反,将主窗口作为父窗口传递给构造函数,并将其传递给继承的QWidget。然后在主小部件上调用show,在本例中是主窗口…
class QLineObject : public QWidget
{
public:
QLineObject(QWidget* parent);
};
QLineObject::QLineObject(QWidget* parent)
: QWidget(parent)
{
}
QWidget* pWidget = new QWidget;
QLineObject* pLineObject = new QLineObject(pWidget);
pWidget->show();
或者,您可以使用QLabel作为父标签。
QLabel* pLabel = new QLabel(pWidget);
QLineObject* pLineObject = new QLineObject(pLabel);
pWidget->show();
另外,您可能希望在覆盖的paintEvent中调用QWidget::paintEvent。
我会这样做:
QMainWindow mw;
QLineObject lo;
mw.setCentralWidget(&lo);
mw.show();
相关文章:
- 有一个打印语句的函数是一种糟糕的编程实践吗
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- 我是C++编程的新手,这些代码之间有什么区别,我应该使用哪一个
- flutter:即使shouldRepaint()返回true,自定义画家也不会重新绘制
- 模板元编程:如何将参数包组合成新的参数包
- Qt Q串行端口未编程设备未关闭
- 如何在QT中的自定义视频小工具t上绘制矩形
- 如何在Visual Basic中使用矩形函数OpenGL绘制矩形
- 无法使用VAO和EBO(openGL)绘制多个对象
- 为什么我的点没有在 OpenGL 中绘制鼠标所在的位置?
- 绘制顺时针三角形,重新排序点
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- 模板元编程 - 尝试实现维度分析
- 我是编程新手
- SFML 文本未绘制在窗口上
- 如何在快板的屏幕中显示子位图的绘制?
- 在 texture2D 中绘制线条和字符(DirectCompute HLSL 编程)
- 编程难题 - 绘制一个倒三角形
- 用Qt编程绘制线条