【问题标题】:Display QImage with QtGui使用 QtGui 显示 QImage
【发布时间】:2011-05-27 07:44:06
【问题描述】:

我是 Qt 新手,我正在尝试创建一个简单的 GUI 应用程序,一旦单击按钮就会显示图像。

我可以读取QImage 对象中的图像,但是有没有简单的方法来调用将QImage 作为输入并显示它的Qt 函数?

【问题讨论】:

    标签: c++ qt qimage qtgui


    【解决方案1】:

    据我所知,QPixmap 用于显示图像,QImage 用于读取图像。有QPixmap::convertFromImage()QPixmap::fromImage() 函数可以从QImage 转换。

    【讨论】:

      【解决方案2】:

      一种常见的方法是使用QLabel::setPixmap() 将图像添加到QLabel 小部件,然后像显示任何其他小部件一样显示QLabel。示例:

      #include <QtGui>
      
      int main(int argc, char *argv[])
      {
        QApplication app(argc, argv);
        QPixmap pm("your-image.jpg");
        QLabel lbl;
        lbl.setPixmap(pm);
        lbl.show();
        return app.exec();
      }
      

      【讨论】:

      • 非常感谢,它工作得很好,我只是将它移到按钮的回调中。
      【解决方案3】:

      显示如何显示 QImage 的简单但完整的示例可能如下所示:

      #include <QtGui/QApplication>
      #include <QLabel>
      
      int main(int argc, char *argv[])
      {
          QApplication a(argc, argv);
      
          QImage myImage;
          myImage.load("test.png");
      
          QLabel myLabel;
          myLabel.setPixmap(QPixmap::fromImage(myImage));
      
          myLabel.show();
      
          return a.exec();
      }
      

      【讨论】:

        【解决方案4】:

        谢谢大家,我找到了方法,和 Dave 和 Sergey 一样:

        我正在使用 QT Creator:

        在主 GUI 窗口中使用拖放 GUI 创建并创建标签(例如“myLabel”)

        在按钮(单击)的回调中,使用指向用户界面窗口的 (*ui) 指针执行以下操作:

        void MainWindow::on_pushButton_clicked()
        {
             QImage imageObject;
             imageObject.load(imagePath);
             ui->myLabel->setPixmap(QPixmap::fromImage(imageObject));
        
             //OR use the other way by setting the Pixmap directly
        
             QPixmap pixmapObject(imagePath");
             ui->myLabel2->setPixmap(pixmapObject);
        }
        

        【讨论】:

          【解决方案5】:

          使用QLabel 绘制图像对我来说似乎有点笨拙。对于较新版本的 Qt,您可以使用 QGraphicsView 小部件。在 Qt Creator 中,将 Graphics View 小部件拖到您的 UI 上并为其命名(在下面的代码中命名为 mainImage)。在mainwindow.h 中,将类似于private 的变量添加到MainWindow 类中:

          QGraphicsScene *scene;
          QPixmap image;
          

          然后只需编辑mainwindow.cpp 并使构造函数如下所示:

          MainWindow::MainWindow(QWidget *parent) :
              QMainWindow(parent), ui(new Ui::MainWindow)
          {
              ui->setupUi(this);
          
              image.load("myimage.png");
              scene = new QGraphicsScene(this);
              scene->addPixmap(image);
              scene->setSceneRect(image.rect());
          
              ui->mainImage->setScene(scene);
          }
          

          【讨论】:

          • 谢谢。我想知道自己做这件事的一种不那么笨拙的方式。也许我很奇怪,但我认为标签应该是标签,而不是图片。
          • 这对于每秒显示大量图像似乎不太方便:(
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2012-06-27
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-10-31
          • 2019-08-09
          相关资源
          最近更新 更多