2012-12-14 103 views
1

我在我的主窗口中创建了一个标签,其大小设置为200x300px。现在在一个按钮上单击我需要查看其中的图像。这里是按钮的插槽功能。点击按钮查看图像。 qt

void MainWindow::function1(){ 
QImage img; 
img.loadFromData("test.jpg"); 
img = img.scaled(200, 300, Qt::KeepAspectRatio, Qt::SmoothTransformation); 
label->setPixmap(QPixmap::fromImage(img)); 
} 

问题是编译没有错误,但没有显示图像。当按下按钮时,它说QImage::scaled: Image is a null image在IDE 即时通讯新的。我会非常感谢任何建议。

感谢你

回答

2

如果您在GUI线程之外处理图像,则需要使用QImage。另外,loadFromData()函数看起来像用于传递大量字节,而不是文件的名称。

下面是我将如何使用QPixmap。

QPixmap pix; 

bool loaded = pix.load("test.jpg"); 

if(loaded == false) 
{ 
    label->setText("Failed to load test.jpg from" + QDir::currentPath()); 
} 
else 
{ 
    pix = pix.scaled(200, 300, Qt::KeepAspectRatio, Qt::SmoothTransformation); 
    label->setPixmap(pix); 
} 

您可能还需要与label->width()label->height()取代200和300。以这种方式缩放像素图看起来是最好的,但你也可以设置像素图,然后使用label->setScaledContents(true)

+0

谢谢你的工作。但是当我在代码中替换'img.load(“test.jpg”)'时,它不工作。这里有什么错误。 –

+0

我猜想它与它没有找到该文件,该格式未被正确自动检测,或处理jpg与QImage没有被发现的DLL。当你准备部署这个时,你可能需要确保你的exe目录中有“/imageformats/qjpeg4.dll”复制自“QTDIR/plugins”。 如果你检查函数调用的返回值,你可以看到它是否加载失败或者扩展失败,或者是否是其他的。有时Qt也会在运行时将错误放入输出中。 – phyatt

1

代替

img.loadFromData("test.jpg");

使用

img.load("test.jpg");

,如果你从一个QIODevice中加载。