程序未使用QPainter绘制线条
Program not drawing line with QPainter
我有一个程序,我正试图在一个小部件上画一条线。这是我的代码:
标题:
#include <QWidget>
#include <QtWidgets>
class DrawingWidget : public QWidget{
Q_OBJECT
public:
explicit DrawingWidget(QWidget *parent = 0);
~DrawingWidget();
QSize minimumSizeHint() const;
QSize sizeHint() const;
protected:
void paintEvent(QEvent *);
}
我在实际程序中也有一个槽,但目前在我试图找到这个bug时,它被注释掉了。
代码:
DrawingWidget::DrawingWidget(QWidget *parent) : QWidget(parent){
update();
}
DrawingWidget::~DrawingWidget(){
}
QSize DrawingWidget::minimumSizeHint() const{
return QSize(50,30);
}
QSize DrawingWidget::sizeHint() const{
return QSize(150,50);
}
void DrawingWidget::paintEvent(QEvent *){
qDebug() << "paint event called";
QPainter(this);
QPen drawPen(Qt::black, 3);
QPoint leftLinePoint(10,20);
QPoint rightLinePoint(50,20);
painter.setPen(drawPen);
painter.drawLine(leftLinePoint, rightLinePoint);
}
这个小部件包含在另一个程序中,该程序具有以下构造函数:
DataDisplayWidget::DataDisplayWidget(QWidget *parent) : QWidget(parent){
//other unrelated code
displayBox = new QGroupBox("Lines");
QBoxLayout *mainLayout = new QBoxLayout(QBoxLayout::LeftToRight);
QGridLayout *displayLayout = new QGridLayout;
myWidget = new DrawingWidget;
displayLayout->addWidget(myWidget);
displayBox->setLayout(displayLayout);
//add other things to main layout
mainLayout->addWidget(displayBox);
setLayout(mainLayout);
}
DisplayDataWidget随后在主窗口中使用,该窗口具有以下代码:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){
//a bunch of unrelated constructor code
createDataDisplayWidget();
//more unrelated code
}
void MainWindow::createDataDisplayWidget(){
DataDisplayWidget *thisWidget = new DataDisplayWidget;
QDockWidget *dock = new QDockWidget("Displayed Data", this);
dock->setWidget(thisWidget);
dock->setAllowedAreas(Qt::BottomDockWidgetArea);
addDockWidget(Qt::BottomDockWidgetArea, dock);
//connections
}
所以,简单总结一下。我有一个程序,它从main.cpp开始,并启动一个QMainWindow对象。这个QMainWindow对象然后创建一个停靠小部件,其中包括另一个小部件,它包括我的绘图小部件。通过在另一个程序(正在运行)中测试绘图小部件代码,实际的线条绘制应该运行良好,并绘制一条在屏幕上可见的黑线。然而,在使用该程序进行测试时,我从未得到该行,也没有得到调试消息"paint event called"。
我缺少什么才能触发paintEvent?
您键入了错误的签名。您需要void paintEvent( QPaintEvent *e );
。最好使用override
关键字来防止此类错误。
相关文章:
- QuadTree只在窗口的右上角绘制
- 绘制旋转的三角形
- QPainter 将 QBrush 设置为 在 QT/C++ 中绘制文本
- 如何使用Qpainter在Qt中绘制棋盘
- QPainter 绘制不一致
- 如何从QMainWindow中的一组小部件上使用QPainter绘制特定的小部件
- QPainter 未正确绘制文本
- 使用QgraphicsView子类绘制QPAINTER线
- 程序未使用QPainter绘制线条
- 调用Qpainter的方法绘制以刷新图像和更改颜色
- 使用一个 QPainter 一次绘制多个输出:SVG 和 QImage
- QPainter或QLabel绘制QPixmap的成本较低
- 在同一窗口上使用QPainter绘制多个形状
- 使用QPainter绘制和(QGraphicsView+QGraphicsScene)绘制之间的差异
- Qt QPainter in paintEvent消除了使用paintGL绘制的图形
- QPainter::begin:小部件绘制只能作为paintEvent的结果开始
- Qt - QPainter.DrawText不绘制文本
- 如何使用QPainter绘制单色椭圆(无黑色边框)
- Qt 5 让 QQuickItem 在不使用 QPainter 的情况下绘制椭圆
- QML类型绘制与QPainter