c++ - 为什么 QPainter 不绘制到我的 QWidget?

标签 c++ linux qt qpainter

我想在我的窗口上画一条线,但我无法真正画出任何东西。

我的.h

#ifndef BOARD_H
#define BOARD_H

#include <Disc.h>
#include <iostream>
#include <QApplication>
#include <QPaintEvent>

class Board
{
    private:
        int currentDiscs;   
        Disc* discArray[64];
        char* first;
        QWidget* window;
    public:
        Board(int*);
        int StartDrawing(QApplication*);

};

#endif

}

我的.cpp

int Board::StartDrawing(QApplication* app) 
{
int WIDTH = 640;
int HEIGHT = 800;

QWidget* window = new QWidget();

window->setAttribute(Qt::WA_PaintOutsidePaintEvent, true);
window->setFixedSize(WIDTH, HEIGHT);
window->setWindowTitle("Title!");

this->window = window;
window->show();

QPainter* painter = new QPainter(window);
//QPixmap pixmap1("\\images\\tile_1.png");

//painter->drawPixmap(QPoint(0,0), pixmap1);  // this works
painter->setPen(QPen(Qt::black, 12, Qt::DashDotLine, Qt::RoundCap));
painter->drawLine(10,10,100,500);
delete painter;

return app->exec();
}

我的猜测是我的 QPainter 遗漏了一些东西,但我没有在网上看到任何建议我需要用它调用任何其他函数的信息。

我错过了什么?

感谢您的宝贵时间。

最佳答案

read the documentation总是有用的,你的是最常犯的错误:

Each widget performs all painting operations from within its paintEvent() function. This is called whenever the widget needs to be redrawn, either as a result of some external change or when requested by the application.

您只能通过该小部件的绘制事件在该小部件上进行绘制。其他绘画设备的限制较少,您可以从任何地方绘画到另一个绘画设备,如果需要,在其绘画事件中将该缓存绘画到一个小部件。请注意,在某些平台上,QPixmap 可能不支持从主线程以外的线程绘制。

关于c++ - 为什么 QPainter 不绘制到我的 QWidget?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43025474/

相关文章:

Linux 子系统 ssh 看不到 id_rsa.pub

c++ - 通过多个标签搜索数据集

c++ - 将 const char* 转换为 QString

java - 如何使用 Java 获取已安装的 RPM 包列表

c++ - Qt 5.7 : using QWebEngine headless

c++ - 这个结构初始化是如何工作的?

c++ - 字节数组赋值

c++ - 为什么模板参数推导不起作用?

c++ - 分离的 pthread 和内存泄漏

linux - autoenv 不适用于 Windows 7