You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.12 16:45:31