QT 6.4无法完整显示4K图像仅显顶部1/6,1080P正常求解决
问题描述
使用QT 6.4版本,将PCIE接收的数据存入内存后进行显示,但3840x2160的4K图像仅顶部1/6区域有画面,下方无图像;而接收1080P数据时可正常显示。已尝试修改UI及QImage的分辨率,问题仍未解决。
错误截图:4K图像仅顶部约1/6区域显示正常画面,剩余下方区域无图像内容
相关代码
newWindow::newWindow(QWidget *parent) : QWidget(parent), ui(new Ui::newWindow) { ui->setupUi(this); pcie_c2h_event0.isplay = false; connect(&pcie_c2h_event0, SIGNAL(sig_inform_disp()), this, SLOT(disp_slot())); connect(&pcie_c2h_event0, SIGNAL(finished()), this, SLOT(slotThreadFinish())); m_Qimage = new QImage(c2h_align_mem_tmp,3840,2160,QImage::Format_RGB32); if(!pcie_c2h_event0.isRunning()) pcie_c2h_event0.start(); } newWindow::~newWindow() { pcie_c2h_event0.isplay = false; while (pcie_c2h_event0.isRunning()); pcie_close(); delete ui; } void newWindow::disp_slot() { QPixmap m_Qpixmap; if(pcie_c2h_event0.isplay == false) return; ui->label->setAutoFillBackground(true); read_pack((char*)c2h_align_mem_tmp,3840*2160*4,0); m_Qpixmap = QPixmap::fromImage(*m_Qimage,Qt::AutoColor); ui->label->setPixmap(m_Qpixmap); }
排查方向与解决方案
- 修正代码语法错误:构造函数中创建QImage的参数用了中文逗号
3840,2160,需改为英文逗号3840, 2160,否则会导致尺寸解析异常。 - 检查内存缓冲区与数据读取完整性:
4K RGB32图像需3840*2160*4=31104000字节内存,确认c2h_align_mem_tmp的分配容量足够;调用read_pack后验证实际读取的字节数是否等于预期值,排查是否因数据未完全读取导致画面缺失。 - 指定QImage行跨度参数:QT默认会对图像内存做对齐处理,若缓冲区未按要求对齐,会导致行扫描偏移。修改QImage创建代码,强制指定行字节数:
m_Qimage = new QImage(c2h_align_mem_tmp, 3840, 2160, 3840*4, QImage::Format_RGB32); - 配置UI控件缩放模式:给label添加缩放设置,确保图像能完整显示:
ui->label->setScaledContents(true); - 检查PCIE数据传输逻辑:4K数据量远大于1080P,确认
read_pack或PCIE传输模块是否支持大尺寸数据的完整拼接,避免分块传输时丢失后续数据。
内容的提问来源于stack exchange,提问作者yimengxiaoyao
相关产品推荐
相关产品推荐

