gpt4 book ai didi

c++ - 程序不使用 QPainter 画线

转载 作者:行者123 更新时间:2023-11-27 22:58:40 27 4
gpt4 key购买 nike

我有一个程序,我正试图在一个小部件上画一条线。这是我的代码:

标题:

#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 *);
}

我在实际程序中也有一个插槽,但目前在我试图找到这个错误时它被注释掉了。

代码:

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 对象然后创建一个停靠小部件,其中包含另一个小部件,其中包含我的绘图小部件。通过在另一个程序(正在运行)中测试绘图小部件代码,实际的线条绘制应该运行得很好,并绘制一条在屏幕上可见的黑线。但是,在使用该程序进行测试时,我从未得到该行,也没有得到调试消息“调用了绘制事件”。

我缺少什么才能触发 paintEvent?

最佳答案

您输入了错误的签名。你需要 void paintEvent( QPaintEvent *e );。最好使用 override 关键字来防止此类错误。

关于c++ - 程序不使用 QPainter 画线,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29952369/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com