如何以"functional"编程风格显示 QImage

How do I display a QImage in a "functional" programming style

本文关键字:风格 显示 QImage 编程 functional      更新时间:2023-10-16

我想以"函数式"编程风格显示图像。基本上,我对我的图像进行了许多处理,有时我想显示结果。所以我正在尝试:

int display(string file, int argc, char *argv[])
{
    QApplication a1(argc,argv);
    QImage myImage;
    myImage.load(file.c_str());
    QLabel myLabel;
    myLabel.setPixmap(QPixmap::fromImage(myImage));
    myLabel.show();
    return a1.exec();
}
int main(int argc, char *argv[])
{
    MyImageDataStructure img;
    img.erosion(5);//process 1
    img.save("lenaero.png");
    display("lenaeor.png",argc,argv); // display the first result
    img.dilation(5);//process 2
    img.save("lenaopening.png");
    display("lenaopening.png",argc,argv); // display the second result
    return 1;
}

但是,在第二次执行显示功能时,出现错误。你有什么想法可以在保持这种逻辑的同时解决这个问题吗?

感谢

注意:除了Qt,我不想包含外部库,我知道我想在Qt逻辑之外工作。

我真的不明白你说的"以functional样式显示图像"是什么意思。我想你的意思是,你想要一个函数来完成图像的显示部分。在这种情况下,你似乎对"功能"范式实际上是什么有误解

然而,你的问题却大不相同。您需要将QApplication声明移动到主函数中:

int main(...) {
    QApplication a(argc, argv);
    // ...
}

并将其移出display()函数。

编辑

我重读了你的代码,其中有很多错误。你不应该每次都创建一个单独的应用程序来显示图像。更好的方法是使用QDialog。创建一个以标签为图像的对话框,并在每次希望显示图像时对其调用show

有用的链接:

http://qt-project.org/doc/qt-4.8/QDialog.html

http://sector.ynet.sk/qt4-tutorial/my-first-qt-gui-application.html(创建和显示对话框的良好概述)