【问题标题】:Qt::Pixmap in Qwidget doesn't show up in MainWindowQwidget 中的 Qt::Pixmap 未显示在 MainWindow 中
【发布时间】:2013-03-05 16:34:07
【问题描述】:

这是 Qt 的另一个新手。

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

由于我无法将 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。我不知道该怎么办。

【问题讨论】:

    标签: qt qwidget qpixmap


    【解决方案1】:

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

    在标题中:

    QLabel* imageLabel;
    

    在 cpp 中:

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

    【讨论】:

    • 问题是,如果我这样做,我可以在QLabel上画画吗?通过在qlabel上绘画,是不是直接改变了对应的Pixmap?
    • 如果我想不断改变像素图怎么办?所以每次我都要调用 imageLabel->setPixmap() 函数?
    • 不,在那种情况下,我认为最好不要使用 QLabel。我的意思是,是的,你可以每次都调用 imageLabel->setPixmap(),但是如果你不断地这样做,它会极大地影响性能。看看QGraphicsScene、QImage、QGraphicsView...
    猜你喜欢
    • 1970-01-01
    • 2017-04-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-28
    • 2017-01-20
    • 1970-01-01
    • 2016-12-07
    相关资源
    最近更新 更多