有多种方法:
用图标的方式:
QTableWidgetItem *it = ui->tableWidget->item(row, col)if (it==0)
{
it=new QTableWidgetItem()
setItem(row, col, it)
}
it->setIcon(QIcon(pixMap))
用setCellWidget:
QLabel* label=new QLabellabel->setPixmap(pixMap)
ui->tableWidget->setCellWidget(row, col, label)
用代理:
class QPixmapItemDele : public QStyledItemDelegate{
public:
QPixmapItemDele(QObject* parent = 0) : QStyledItemDelegate(parent) {}
virtual void paint ( QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index ) const
{
if (index.data(Qt::DisplayRole).canConvert<QPixmap>())
{
QPixmap pm = index.data(Qt::DisplayRole).value<QPixmap>()
painter->drawPixmap(0,0,pm)
}
else
{
QStyledItemDelegate::paint(painter, option, index)
}
}
}
......
ui->tableWidget->setItemDelegate(new QPixmapItemDele)
ui->tableWidget->item(row,col)->setData(Qt::DisplayRole, QVariant::fromValue<QPixmap>(pixMap))
你的QLabel控件有没有添加到主窗体或者是有没有显示呢,添加图片我一般用QIcon类型的,下面的代码你可以参考一下QIcon qiBattery
QPixmap *pixmap0
pixmap0=new QPixmap("Battery.PNG")
qiBattery.addPixmap(*pixmap0)
ui->pushButton_Control->setIcon(qiBattery)
ui->pushButton_Control->setIconSize(QSize(47,47))
1、如果你是从文件读,那么直接用QImage或QPixmap的带有文件路径的构造函数构造一个对象,
然后用QLabel的setPixmap
2、如果你的图像已经存在内存中,你只是想进行如ARGB转换成灰度或是2值图像的话,
那么你可以用QImage的成员函数convertToFormat进行转换
其中第一个参数是一个枚举类型,表示的是你的图像类型,如8位的灰度类型或是RGB类型等
文档解释的很清楚,可以自己看。
*注意一点就是QImage可以转换成QPimap,转换是很快的,浅引用里面的ImageData而已,详细内容你可以看源码,于是你就可以通过QLabel的setPixmap进行显示了
3、如果你是想通过字节自己变化,
那就直接通过QImage或是QPixmap的scanLine获取起始的字节指针
然后根据图像的宽度进行遍历就是,关于RGB和灰度转换的算法或是根据阈值转换2值图像的算法有很多,自己去研究吧。最后将你处理的设置到QLabel就行了
一点建议:如果你真要在Qt上做一些图像算子处理什么的,别用QLabel,QLabel是轻量级的,你最好是用GraphicsView-Scene-item这个去做
补充的问题回答:
你颜色空间都不一样,那就不能直接读了,你可以先将YUV的颜色空间转换成Rgb24的,Qt只支持HSV,HSL,CMYK,RGB这四种颜色空间。。
所以你自己先将该图像的字节流数据用文件流的方式读,然后根据颜色空间转换的算法转换成RGB24,然后可以根据你转换后的整个字节数组获得一个QImage或是QPixmap
继续补充:二值图就是1个像素是1位,不是很清楚你问的问题“如何知道二值图是24位或8位”,你能描述清楚点么,你要是不懂图像处理,就搞个PPT或是书研究下基础吧。
你要是有什么问题可以HI我…
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)