【问题标题】:I want to show a picture in QWidget, but it doesn't work我想在 QWidget 中显示一张图片,但它不起作用
【发布时间】:2015-09-21 17:04:24
【问题描述】:

我的代码是:但是我在QWidget中找不到图片。如果我想显示图像,我该怎么办?我的代码有什么问题?

QTtest::QTtest(QWidget *parent)
: QWidget(parent)
{
QHBoxLayout * m_viewLayout = new QHBoxLayout();
this->setLayout(m_viewLayout);

QHBoxLayout * showLayout = new QHBoxLayout();
QHBoxLayout * btnLayout = new QHBoxLayout();

m_viewLayout->addLayout(showLayout);
m_viewLayout->addLayout(btnLayout);

widget1 = new QWidget();
showLayout->addWidget(widget1);


QPixmap image("C:\\Users\\zhq\\Desktop\\1.png");
QPainter painter(widget1);
painter.drawPixmap(QPoint(0,0),image);


widget2 = new QWidget();
showLayout->addWidget(widget2);


QPushButton * btn = new QPushButton("btn");
btnLayout->addWidget(btn);

showLayout->addStretch();
}

【问题讨论】:

    标签: image qwidget


    【解决方案1】:

    您的代码有几处问题。 假设图像已正确加载,您应该在小部件的 void QWidget::paintEvent(QPaintEvent * event) 中绘制图像。不要在绘画事件之外绘画。此外,正如您当前所做的那样,无论如何,下次小部件更新/重新打印时,图像将被覆盖。 您可能会考虑采用更简单的方法并在布局中使用 QLabel 而不是 widget1。然后,您可以调用 QPixmap::fromImage() 将图像转换为像素图,并在标签上调用 QLabel::setPixmap() 以显示您的图像。

    【讨论】:

    • 1.即使我在paintEvent中绘制图像,它也不起作用。 2.如果我在QLabel中通过setPixmap显示图像,还有一个问题。当 QDialog 调整大小时,我发现 QLabel 将保持相同的大小,当 Qdialog 调整大小时它不会调整大小。
    • 试试 QLabel 方法。它要简单得多。
    • 是的,我已经尝试过 QLabel,它确实有效。但是,我发现 showLayout->addStretch() 有问题。如果我添加 showLayout->addStretch();,我发现图像是不可见的;但是,如果我不添加它,图像是可见的。
    • 那么您的布局可能有问题。 Qt 布局需要一些时间来掌握。阅读他们here。没有新代码就很难说...您可以看看thisthis。如果答案解决了您发布的问题,请接受。对于新问题,请在您第一次尝试自己解决后发布新问题。
    猜你喜欢
    • 1970-01-01
    • 2021-04-11
    • 2020-03-11
    • 2020-03-19
    • 2016-07-13
    • 1970-01-01
    • 1970-01-01
    • 2020-11-18
    • 1970-01-01
    相关资源
    最近更新 更多