QT界面与视频同时显示在屏幕上

本文探讨了DM81xxx处理器上QT与视频无法同时显示的问题。介绍了QT与视频各自单独显示正常,但同时显示时QT会覆盖视频的情况。文中提供了解决方案,包括设置透明模式及调整QT的背景颜色。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

DM81xxx 处理器

遇到的问题:QT与视频同时显示在屏幕上

 

显示情况:视频可以单独显示,QT可以单独显示,但视频与QT不能同时显示,显示时QT图像把视频覆盖。

QT显示在FramBuffer层。

从网上找了很多方法,都不奏效。

网上有的介绍tiny4412平台所以没有 在一个显示屏幕上有FB0, FB1, FB2...

我的设备两个显示屏幕:HDMI 对应fb0 ,TV对应fb1;

 

解决方法:

在程序中有 TI81XXFB_FEATURE_ENABLE;  透明模式 要设置

 

QT (版本4.8.1)设置

 

qwsserver默认情况下有一层绿色背景。因此需要去掉这层背景才能显示下层视频。

 

添加下面这句话:

QWSServer::setBackground(QColor(0,0,0,0));

而 QWSServer::setBackground(QBrush(Qt::NoBrush));使用后QT的hide close函数失效

编译时,在PC上有错误,error: undefined reference to `_imp___ZN9QWSServer13setBackgroundERK6QBrush'

但在linux系统下没有错误。

 

运行时:

./youapp -qws 即可 qt程序需要添加-qws参数来启动qwsserver才能运行。

 

 

 

<think>根据提供的引用内容,用户的问题是关于QT界面中主屏幕切换后消失无法显示的解决方案。引用[1]和[2]描述了主界面和子界面之间切换的实现方式,引用[4]提到了视频显示相关的问题。用户遇到的问题可能界面切换逻辑或视频显示刷新有关。从引用[1]和[2]中可以看到,主界面和子界面的切换是通过信号和槽机制实现的:-主界面点击按钮后隐藏,并创建子界面同时连接子界面的信号到主界面的reshow()槽。-子界面点击按钮时,发射信号,然后关闭自己。这个信号触发主界面的reshow()函数,使主界面重新显示。用户描述的问题是“主屏幕切换后消失无法显示”,可能是指切换回主界面时主界面没有重新显示。根据引用[2],主界面必须实现reshow()函数,例如:```cppvoidMainWindow::reshow(){this->show();}```另外,引用[4]提到视频显示的问题,如果用户的子界面涉及视频播放,则可能由于视频刷新问题导致界面显示引用[4]建议使用QScreen获取刷新率来调整视频更新频率。综合以上,解决方案可能包括:1.检查主界面的reshow()槽函数是否正确实现,是否调用了show()函数。2.确保信号和槽的连接正确,并且在子界面关闭时确实发射了信号。3.如果涉及视频播放,检查视频刷新的逻辑,考虑使用显示器的刷新率来同步。下面分步骤详细说明:</think> ### QT界面屏幕切换后消失无法显示的解决方案 根据您提供的引用内容和问题描述,核心问题在于界面切换逻辑设计不当导致主界面无法重新显示。以下是完整解决方案(引用已标注): #### 1. **主界面信号处理修正** 主界面隐藏时应连接子界面的返回信号,并在`reshow()`槽函数中正确显示: ```cpp // MainWindow.cpp void MainWindow::on_pushButton_clicked() { this->hide(); // 主界面隐藏 video *videodlg = new video(this); // 创建子界面 // 关键:建立返回信号连接 [^1] connect(videodlg, SIGNAL(sendsignal()), this, SLOT(reshow())); videodlg->show(); } // 确保实现reshow槽函数 void MainWindow::reshow() { this->show(); // 重新显示界面 qDebug() << "主界面已重新显示"; // 调试输出 } ``` #### 2. **子界面关闭逻辑优化** 子界面需要正确发射返回信号并自动释放内存: ```cpp // video.cpp void video::on_pushButton_clicked() { emit sendsignal(); // 触发主界面reshow [^2] this->close(); // 关闭子界面 } // 析构时确认对象删除 video::~video() { delete ui; qDebug() << "子界面已销毁"; // 验证资源释放 } ``` #### 3. **视频显示特殊处理** 若涉及视频播放,需注意: - 采用**自适应帧率同步**技术防止界面卡死: ```cpp // 获取显示器刷新率 [^4] if(QScreen* screen = QGuiApplication::primaryScreen()){ qreal refreshRate = screen->refreshRate(); QTimer::singleShot(1000/refreshRate, this, SLOT(updateFrame())); } ``` - **避免跨平台GUI依赖**问题(如OpenCV+QT在ARM的兼容性问题)[^3] #### 4. **内存泄漏防御机制** 在子界面构造函数添加: ```cpp video::video(QWidget *parent) : QDialog(parent), ui(new Ui::video) { ui->setupUi(this); setAttribute(Qt::WA_DeleteOnClose); // 关闭时自动删除 [^2] } ``` **关键调试步骤**: 1. 检查信号槽连接状态: ```cpp qDebug() << connect(videodlg, SIGNAL(sendsignal()), ...); // 输出true即成功 ``` 2. 在`reshow()`添加断点,验证是否触发 3. 监控对象生命周期: ```cpp qDebug() << "子界面地址:" << videodlg; // 关闭后应为0x0 ``` **典型问题排查**: | 现象 | 解决方案 | |------|----------| | 主界面闪退 | 检查信号拼写:`sendsignal()` ≠ `sendSignal()` | | 子界面关闭后残留 | 添加`WA_DeleteOnClose`属性 [^2] | | 视频播放卡死 | 采用QScreen自适应刷新率 [^4] | | ARM平台异常 | 规避OpenCV-GUI直接依赖 [^3] |
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

为了维护世界和平_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值