Qwidget中的Qt::Pixmap不';我不能在主窗口中显示

Qwidget中的Qt::Pixmap不';我不能在主窗口中显示,qt,qwidget,qpixmap,Qt,Qwidget,Qpixmap,这里是另一个新手Qt 我需要做的是在主窗口的中心有一个可滚动的区域,它显示图像,并允许用户在图像上绘制 由于我无法将QPixmap直接添加到可滚动区域,因此我尝试创建QWidget的子类,如下所示: class Canvas: public QWidget { public: Canvas(){ image = new QPixmap(480,320); image->fill(Qt::red); } QPixmap *image; }; 然后我在

这里是另一个新手Qt

我需要做的是在主窗口的中心有一个可滚动的区域,它显示图像,并允许用户在图像上绘制

由于我无法将QPixmap直接添加到可滚动区域,因此我尝试创建QWidget的子类,如下所示:

class Canvas: public QWidget
{
public:
    Canvas(){
    image = new QPixmap(480,320);
    image->fill(Qt::red);
    }
    QPixmap *image;
};
然后我在头文件中声明了Canvas*c

在实现中,我写道:

  canvas = new Canvas;
  setCentralWidget(canvas);

但是,这显然无助于显示QPixmap。我不知道该怎么办

您不需要为此为QWidget子类化。QPixmap不是一个小部件,因此它不会显示在任何地方。您需要将您的pixmap添加到一些小部件中,这将起作用:

在标题中:

QLabel* imageLabel;
在cpp中:

imageLabel = new QLabel(this);
QPixmap image(480,320);
image.fill(Qt::red);
imageLabel->setPixmap(image);
setCentralWidget(imageLabel);

您不需要为此为QWidget创建子类。QPixmap不是一个小部件,因此它不会显示在任何地方。您需要将您的pixmap添加到一些小部件中,这将起作用:

在标题中:

QLabel* imageLabel;
在cpp中:

imageLabel = new QLabel(this);
QPixmap image(480,320);
image.fill(Qt::red);
imageLabel->setPixmap(image);
setCentralWidget(imageLabel);

问题是,如果我这样做,我可以在QLabel上画画吗?通过在qlabel上绘制,它是否会直接更改相应的Pixmap?如果我想连续更改Pixmap怎么办?所以每次我必须调用imageLabel->setPixmap()函数?不,在这种情况下,我认为最好不要使用QLabel。我的意思是,是的,您每次都可以调用imageLabel->setPixmap(),但如果您持续这样做,将对性能产生很大影响。看看QGraphicscene、QImage、QGraphicsView……问题是,如果我这样做,我可以在QLabel上画画吗?通过在qlabel上绘制,它是否会直接更改相应的Pixmap?如果我想连续更改Pixmap怎么办?所以每次我必须调用imageLabel->setPixmap()函数?不,在这种情况下,我认为最好不要使用QLabel。我的意思是,是的,您每次都可以调用imageLabel->setPixmap(),但如果您持续这样做,将对性能产生很大影响。看看QGraphicscene,QImage,QGraphicsView。。。