【问题标题】:Qt - Cannot put an image in a tableQt - 无法将图像放在表格中
【发布时间】:2012-12-31 05:06:10
【问题描述】:

为什么使用下面的代码我只得到一个空的表格小部件?

QString imgPath = "C:\\path\\to\\image.jpg";
QImage *img = new QImage(imgPath);

QTableWidget     *thumbnailsWidget = new QTableWidget;
QTableWidgetItem *thumbnail = new QTableWidgetItem;
thumbnail->setData(Qt::DecorationRole, QPixmap::fromImage(*img));

thumbnailsWidget->setColumnCount(5);
thumbnailsWidget->setRowCount(3);
thumbnailsWidget->setItem(0, 0, thumbnail);

setCentralWidget(thumbnailsWidget);

如何将图像放入 QTableWidgetItem?

谢谢。

附:
我注意到这张桌子并不是真的空着。单击不同的 QTableWidgetItem 元素,空的元素变为蓝色,坐标为 [0,0] 的元素以不同的方式突出显示:青色,左侧有一个细蓝条...

【问题讨论】:

    标签: image qt qtablewidget qtablewidgetitem


    【解决方案1】:

    你做得差不多了,但试着控制你的img,例如,像这样:

    QString imgPath = "C:\\path\\to\\image.jpg";
    QImage *img = new QImage();
    bool loaded = img->load(imgPath);
    if (loaded) {
        QTableWidget *thumbnailsWidget = new QTableWidget;
        QTableWidgetItem *thumbnail = new QTableWidgetItem;
        thumbnail->setData(Qt::DecorationRole, QPixmap::fromImage(*img));
    
        thumbnailsWidget->setColumnCount(5);
        thumbnailsWidget->setRowCount(3);
        thumbnailsWidget->setItem(0, 0, thumbnail);
    
        w.setCentralWidget(thumbnailsWidget);
    } else {
        qDebug()<<"Image "<<imgPath<<" was not opened!";
    }
    

    希望对您有所帮助!祝你好运!

    【讨论】:

    • 完成。图像已正确加载...所以没有任何改变。
    • 您是否尝试过不同的图像(使用不同的图像格式——pngjpg 等)?
    【解决方案2】:

    好的,我不得不重新缩放图像:

    thumbnail->setData(Qt::DecorationRole, QPixmap::fromImage(*img).scaled(100, 100));
    

    【讨论】:

    • 如果这真的是你的问题,你很不专心。将您的问题标记为已解决。
    • 别担心。我明天会做。
    • 如何获取数据(获取img路径)?
    • @FarzanNjr - 数据在图像中(即磁盘上的文件),其路径是硬编码的。只是为了保持简单并专注于问题。
    【解决方案3】:

    您可以尝试以下方法 - 这里我们使用资源文件夹中的图像...

    QString imgPath = ":/image.png";
    QImage imageName = *new QImage(imgPath);
    
    QTableWidgetItem *thumbnail = new QTableWidgetItem;
    thumbnail->setData(Qt::DecorationRole, QPixmap::fromImage(imageName));
    

    然后 - 将缩略图设置为您想要的表格行/列 - 例如在第 1 列和第 1 行中:

    tableWidget->setItem( 1, 1, thumbnail);
    

    需要注意的是需要具体的头文件:

    #include <QPixmap>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-26
      • 2011-03-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-16
      • 1970-01-01
      相关资源
      最近更新 更多