qt多屏显示程序

qt多屏显示程序

最近写一个qt程序在一台电脑上,两个屏幕显示程序,主屏幕用来控制,第二屏幕用来显示视频,现在将网上收集的一些资料汇总一下。

收集资料一:

感谢作者分享,转载自:http://blog.sina.com.cn/s/blog_4868f98601019odo.html
如果造成任何不便,请联系我删除。

最近要用到多屏显示。
多屏显示的原理其实很好理解,就拿横向扩展来说:
计算机把桌面的 宽度扩展成了 w1(屏幕1的宽度) + w2(屏幕2的宽度) 。
当一个窗口的起始横坐标 > w1,则 他就被显示在第二个屏幕上了。

qt的说明文档中用一张图阐述了这个情况:
在这里插入图片描述
QApplication 提供了一个获得virtual desktop的方法:
QDesktopWidget *desktop = QApplication::desktop();
返回的 QDesktopWidget 存储着当前桌面的信息。

注意 ,这个函数必须在创建了 QApplication 对象之后才能使用, 否则会出错。具体原因,要问qt。

这个desktop有几个很有用的函数,用来获取当前的屏幕状态和分辨率
1) int desktop->primaryScreen()
获取主屏幕的索引序号,(windows开始菜单所在的屏幕为主屏幕), 每个副屏幕序号+1

2) int desktop->screenCount()
获取当前屏幕个数

3) QRect desktop->screenGeometry(int screen_index)
根据当前的屏幕序号获取屏幕宽高等属性

4) int desktop->width()
获取虚拟屏幕全宽, 注意这个比较猛,是获取的总宽度,对于横向扩展屏来说,也就是 屏幕1+ 屏幕2 + … 的宽度
5) int desktop->height()
获取虚拟屏幕全高

下面的这个程序就可以测试多屏(只测了横屏,没测试纵屏): 根据当前屏幕数量n,生成n个窗口,每个窗口都占据了一个屏幕

#include "mainwindow.h"
#include <QApplication>
#include <QDesktopWidget>
#include <cstdio>
#include <QMessageBox>


typedef struct{
int screen_no;
QRect rect;
}SCREEN;
SCREEN g_screens[10];


int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QDesktopWidget *desktop = QApplication::desktop();

int screen_count = desktop->screenCount();

int prim_screen = desktop->primaryScreen();
char warning[100], *idx=warning;
for(int i=0; i<screen_count ;i++ ){
g_screens[i].screen_no = prim_screen + i;
g_screens[i].rect = desktop->screenGeometry(prim_screen + i);
sprintf(idx, "screen%d w[%d], h[%d] ",i, g_screens[i].rect.width(),g_screens[i].rect.height() );
idx += strlen(idx);
}
sprintf(idx, "total width[%d] , total height[%d] n", desktop->width(), desktop->height() );
QMessageBox::warning(NULL, "screen", warning, QMessageBox::Ok);

MainWindow wnd[5];
for(int i=0; i < screen_count; i++){
wnd[i].resize(g_screens[i].rect.width(),g_screens[i].rect.height());
if(i == 0)
wnd[i].move(0,0);
else
wnd[i].move(i* g_screens[i-1].rect.width(),0);
char str[50];
sprintf(str,"this is screen %d",i);
wnd[i].show();
}
return app.exec();
}

收集资料二:

感谢作者分享,转载自:http://blog.sina.com.cn/s/blog_4e7e25c20102v0oy.html
如果造成任何不便,请联系我删除。

想实现这样一种功能:主程序的主窗口在PC上显示,而其子dialog在另外的显示器上显示(做实验时方便监控且不会有多余的干扰)。

方法如下 :建立Qdesktopwidget对象
QDesktopWidget* desktop = Application::desktop();

获取当前显示器的个数

N = desktop->screenCount();

如果有两个显示,则N=2,qt默认的计算机主机的index = 0,外接显示器的index = 1;
QDialog 有个成员函数叫setGeometry,只需要将dialog对象的Geometry设置为index为1的显示器即可,默认为0.如果要显示的dialog的对象为mdlg,则
mdlg.setGeometry(desktop->screenGeometry(1));
mdlg.show();

  • 3
    点赞
  • 49
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Ubuntu中使用Qt进行多屏显示是相对简单的。首先,确保已经按照Qt框架并配置好开发环境。 在Qt中,可以使用QScreen类来管理和操作屏幕。要实现多屏显示,可以使用以下步骤: 1. 引入QScreen头文件:`#include <QScreen>` 2. 使用QApplication的实例来获取主屏幕的QScreen对象:`QScreen *primaryScreen = QApplication::primaryScreen()` 3. 通过主屏幕的QScreen对象,获取其他屏幕的QScreen对象列表:`QList<QScreen*> allScreens = QApplication::screens()` 4. 遍历QScreen对象列表,可以获取每个屏幕的相关属性,比如分辨率、位置等:`foreach (QScreen *screen, allScreens) { ... }` 5. 可以通过QScreen的方法获取屏幕的宽度和高度:`int screenWidth = screen->geometry().width()`,`int screenHeight = screen->geometry().height()` 6. 如果想在特定的屏幕上显示Qt组件,可以通过QWidget的方法设置组件所在的屏幕:`widget->setScreen(screen)` 7. 对于需要在多个屏幕上显示不同内容的应用程序,可以根据需求将不同的QWidget放置在不同的屏幕上。 需要注意的是,如果在多屏显示时需要处理各个屏幕之间的交互或同步,可能需要使用多线程或其他相应的机制来实现。 总之,在Ubuntu的Qt开发中,通过QScreen类的相关方法和属性,可以方便地实现多屏显示的功能。根据屏幕的数量和需要显示的内容,可以灵活地进行布局和控制,以满足特定应用程序的需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值