我想在Qt UI中显示 .jpg 图像。我在网上查看并找到了https://doc.qt.io/archives/qt-4.8/qt-widgets-imageviewer-example.html。 我认为Graphics View可以做同样的事情,而且它还有编解码器以显示视频。如何使用Graphics View显示图像?我查阅了库,但由于我是Qt的完全新手,所以找不到开始的线索。您能向我介绍一些关于如何在Qt中加载和显示图像的资源/示例吗?
谢谢。
谢谢。
你可以将图像(作为pixmap)附加到标签上,然后将其添加到您的布局中...
...
QPixmap image("blah.jpg");
QLabel *imageLabel = new QLabel();
imageLabel->setPixmap(image);
mainLayout.addWidget(imageLabel);
...
抱歉,这里使用的是Jambi(Java的Qt),因此语法不同,但理论是相同的。
#include ...
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QGraphicsScene scene;
QGraphicsView view(&scene);
QGraphicsPixmapItem item(QPixmap("c:\\test.png"));
scene.addItem(&item);
view.show();
return a.exec();
}
这应该可以正常工作。 :) 支持的格式列表可以在这里找到
如果您只想将图像放置在小部件上,而不需要使用图形API的复杂性,您也可以创建一个新的QWidget并使用样式表设置背景。像这样:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { ... QWidget *pic = new QWidget(this); pic->setStyleSheet("background-image: url(test.png)"); pic->setGeometry(QRect(50,50,128,128)); ... }
向要显示图像的对话框添加标签(QLabel)。这个QLabel将实际上显示图像。将其调整大小,以使图像呈现所需的大小。
在项目中将图像添加到您的资源中。
现在进入QLabel属性并选择您添加到资源中的图像用于pixmap属性。确保选中下一个属性scaledContents,以缩小图像到您想要看到的大小。
就这样,图像现在会显示出来。
我理解您的沮丧,“图形视图小部件”不是最好的方法来实现这一点,是的,它可以完成,但几乎与使用标签完全相同(对于您想要的任何方式)。现在列出的所有方法都有效,但...
对于您和其他可能遇到这个问题的人来说,最简单的方法(无论如何)是这样做。
QPixmap pix("Path\\path\\entername.jpeg");
ui->label->setPixmap(pix);
}
使用 QPainter
和 QImage
在窗口部件 (QMainWindow
) 上绘制图像(另一种方法)
class MainWindow : public QMainWindow
{
public:
MainWindow();
protected:
void paintEvent(QPaintEvent* event) override;
protected:
QImage image = QImage("/path/to/image.jpg");
};
// for convenience resize window to image size
MainWindow::MainWindow()
{
setMinimumSize(image.size());
}
void MainWindow::paintEvent(QPaintEvent* event)
{
QPainter painter(this);
QRect rect = event->rect();
painter.drawImage(rect, image, rect);
}
int main(int argc, char** argv)
{
QApplication a(argc, argv);
MainWindow mainWindow;
mainWindow.show();
return a.exec();
}
int main(int argc, char *argv[]) {
QApplication a(argc, argv);
QLabel label("<img src='image.jpg' />");
label.show();
return a.exec();
}