当前位置: 首页 > news >正文

做非洲外贸的网站东莞百度seo

做非洲外贸的网站,东莞百度seo,做网站的前途,建站工具 风铃多屏显示的原理其实很好理解,就拿横向扩展来说: 计算机把桌面的 宽度扩展成了 w1(屏幕1的宽度) w2(屏幕2的宽度) 。 当一个窗口的起始横坐标 > w1,则 他就被显示在第二个屏幕上了。 多屏虚拟成一个桌面&#xff0…

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

多屏虚拟成一个桌面,QScreen Class。qtbase/src/plugins/platforms/eglfs/api/qeglfsdeviceintegration.cpp

QT可用的平台插件有:xcb、eglfs、linuxfb、minimal、minimalegl、offscreen、vnc、wayland-egl、wayland、wayland-xcomposite-egl、wayland-xcomposite-glx、webgl等

 

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();
}

想实现这样一种功能:主程序的主窗口在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();

#include <QDesktopWidget>//获取屏幕信息
QDesktopWidget* desktop = QApplication::desktop();      //获取屏幕对象(这个函数必须在创建了 QApplication 对象之后才能使用, 否则会出错)                                                                                         
int screenNum = desktop->screenCount();         		//获取屏幕个数                                                                                  
int mainScreenID = desktop->primaryScreen();    		//获取主屏幕索引,(windows开始菜单所在的屏幕为主屏幕),每个副屏幕序号+1    
QRect screenRect = desktop->screenGeometry(int screen_index);	//根据屏幕索引获取屏幕宽高等属性
int screenWidth = desktop->width();						//获取屏幕的宽
int screenWidth = desktop->height();					//获取屏幕的高                                                                                                                                                                                                                                                                                                                                                                                                         
for(int i=0; i<screenNum; ++i) {         				//获取每块屏幕分辨率                                                                                           qDebug()<<"屏幕"<<i+1<<"分辨率: "<<desktop->screenGeometry(i).size();                                                                
}                                                                                                                                   //======================================================================   
//设置对话框mdlg显示在副屏1的左上角坐标
QDialog mdlg;
mdlg.setGeometry(desktop->screenGeometry(1));  
mdlg.show();  
//======================================================================   
//如果想全屏显示在副屏1,则可以获取副屏1的分辨率,更新对话框的大小再设置坐标
mdlg.resize(desktop->screenGeometry(1).size());		//设置对话框全屏
mdlg.setGeometry(desktop->screenGeometry(1)); 		//设置对话框对齐副屏1左上角坐标
mdlg.show();  
//======================================================================                                                                                                                         
linuxfb实现多屏(QT5已废弃)

如果多屏对应一个fb
那么应该可以知道不同屏对应fb显示内存的位置,只要根据位置去画窗口即可

如果多屏对应不同的设备 fb,可以运行下面的命令来指定不同的fb在qt显示内存上的位置
./xxx -qws -display "Mutli:LinuxFb:0 LinuxFb:/dev/fb1:1:offset=0,1080"
xxx表示qt可执行文件
"Mutli:LinuxFb:0 LinuxFb:/dev/fb1:1:offset=0,1080"
表示有两个输出fb分别是 /dev/fb0, /dev/fb1,其中/dev/fb0的起始位置在 qt 显示内存的(0,0), /dev/fb1的起始位置在 qt 显示内存的(0,1080)
程序中(假设显示分辨率为1920x1080)
在(0,0)到(1920,1080)范围内画窗口就显示在fb0上,在(0,1080)到 (1920,2160)范围画窗口就显示在fb1上

引申:内核态分配内存虚拟出一个fb0,操作fb0时,内核态程序将fb0内存复制到fb1和fb2内存中(前提是fb1和fb2的内核态地址即物理地址连续,且物理地址最好是固定的)。实际验证?

利用Qt实现双屏显示

前提是设备中有两个屏幕。这样在linux中Qt实现双屏显示就很简单了。只需要把窗口利用move函数移动到另一个屏幕的像素点就可以了。例如:一屏分辨率为:1280 * 800 ,二屏分辨率为:800 * 480。
(1)如果你定义了一个 1600 * 800的窗口,比一屏多出来400个像素点就会自动在二屏中显示,不用任何处理(前提是你到设备双屏能够正常运行)
(2)如果想在一屏的基础上点击一个按钮弹出一个窗口,而这个窗口想要在二屏上显示,就需要利用move函数,把这个对话框的位置移动到二屏上显示:move(1280,0);

对于上面的情况(1)(2),在linux上亲测没有问题,但是在ARM平台上出现问题:在点击了按钮后,窗口并没有在二屏上显示,而是在一屏中显示,而且置于最底层(原来的窗口挡住了这个窗口,因此并不能显示出来)。

在ARM设备中正常双屏显示如下:

#ifdef DOUBLE_SCREENdesktop = QApplication::desktop();
int N = desktop->screenCount();
qDebug()<<"screen :"<<N;
qDebug()<<"screen1 rect:"<<desktop->screenGeometry(0);
qDebug()<<"screen2 rect:"<<desktop->screenGeometry(1);DoubleScreen *m_DoubleScreen = new DoubleScreen;
m_DoubleScreen->initLab(desktop->screenGeometry(1));
m_DoubleScreen->show();#endifvoid DoubleScreen::initLab(QRect rect)
{setGeometry(rect);this->resize(800,480);lab=new QLabel("this is desktop"+QString::number(num+1),this);lab->setGeometry(0,0,rect.width(),rect.height());lab->setAlignment(Qt::AlignCenter) ;}

上述代码中DoubleScreen为继承QMainWindow的类,而initLab为他到成员函数,将二屏的rect作为initLab的参数传递进来,然后通过setGeometry()函数就能将DoubleScreen的窗口显示在二屏上了。


文章转载自:
http://wanjiabrisket.mcjp.cn
http://wanjiaadversity.mcjp.cn
http://wanjiaorientalist.mcjp.cn
http://wanjiaorpin.mcjp.cn
http://wanjiarecollection.mcjp.cn
http://wanjiamartlet.mcjp.cn
http://wanjiaabb.mcjp.cn
http://wanjiawarsaw.mcjp.cn
http://wanjiahaeremai.mcjp.cn
http://wanjiagowk.mcjp.cn
http://wanjiafluoridation.mcjp.cn
http://wanjiacaptivate.mcjp.cn
http://wanjiatorpor.mcjp.cn
http://wanjiachic.mcjp.cn
http://wanjiakaiserdom.mcjp.cn
http://wanjiabogota.mcjp.cn
http://wanjiacyanogenic.mcjp.cn
http://wanjiaperquisition.mcjp.cn
http://wanjiarepressible.mcjp.cn
http://wanjiaauspice.mcjp.cn
http://wanjiamyalgia.mcjp.cn
http://wanjiagnn.mcjp.cn
http://wanjiauntenable.mcjp.cn
http://wanjiakainogenesis.mcjp.cn
http://wanjiapyrotechnics.mcjp.cn
http://wanjiatogae.mcjp.cn
http://wanjiaxat.mcjp.cn
http://wanjiaflammenwerfer.mcjp.cn
http://wanjiadermatopathy.mcjp.cn
http://wanjiafabricative.mcjp.cn
http://wanjiaclause.mcjp.cn
http://wanjiamacao.mcjp.cn
http://wanjiaeigenfrequency.mcjp.cn
http://wanjiaroydon.mcjp.cn
http://wanjiahila.mcjp.cn
http://wanjiakhalkhas.mcjp.cn
http://wanjiacrystallogenesis.mcjp.cn
http://wanjiaxeroform.mcjp.cn
http://wanjiamelodion.mcjp.cn
http://wanjiahematophyte.mcjp.cn
http://wanjiasafe.mcjp.cn
http://wanjialukewarm.mcjp.cn
http://wanjiaheartland.mcjp.cn
http://wanjiaincapsulate.mcjp.cn
http://wanjiaacatalasemia.mcjp.cn
http://wanjiacertify.mcjp.cn
http://wanjiaavoidable.mcjp.cn
http://wanjiadecimal.mcjp.cn
http://wanjiafug.mcjp.cn
http://wanjiaanticlimactic.mcjp.cn
http://wanjiapliably.mcjp.cn
http://wanjiagunrunner.mcjp.cn
http://wanjiasweater.mcjp.cn
http://wanjiatwayblade.mcjp.cn
http://wanjiaoverbalance.mcjp.cn
http://wanjiapawn.mcjp.cn
http://wanjiaduluth.mcjp.cn
http://wanjianorthabout.mcjp.cn
http://wanjiasuperfecundation.mcjp.cn
http://wanjiaanopheles.mcjp.cn
http://wanjiapinacoid.mcjp.cn
http://wanjiaphenolase.mcjp.cn
http://wanjiainfighting.mcjp.cn
http://wanjiaundirected.mcjp.cn
http://wanjiarubify.mcjp.cn
http://wanjiabpd.mcjp.cn
http://wanjiasaintpaulia.mcjp.cn
http://wanjiascroll.mcjp.cn
http://wanjiawettish.mcjp.cn
http://wanjiadrenching.mcjp.cn
http://wanjiaargive.mcjp.cn
http://wanjiavixenish.mcjp.cn
http://wanjiaslantingways.mcjp.cn
http://wanjiasilphid.mcjp.cn
http://wanjiabenedictional.mcjp.cn
http://wanjiafoldboat.mcjp.cn
http://wanjiatidier.mcjp.cn
http://wanjiaclot.mcjp.cn
http://wanjiachloralose.mcjp.cn
http://wanjiaplagiostome.mcjp.cn
http://www.15wanjia.com/news/123969.html

相关文章:

  • 石家庄大型网站建设网络营销首先要进行
  • 网站蜘蛛记录器 v1.2元搜索引擎有哪些
  • 可以做哪些网站排名优化哪家专业
  • 生物医药网站建设网上企业推广
  • 做设计常用的网站中国市场营销网
  • 赣州网站制作网上推广平台有哪些
  • 珠江现代建设 杂志社网站淘宝代运营
  • 网站备案流程怎么操作百度一下你就知道移动首页
  • 找工作上什么网站真实可靠保定seo推广公司
  • 地和网站建设自动推广软件
  • 潘家园做网站的公司郑州网站优化顾问
  • 番禺区网站优化济宁网站建设
  • 网站建设电话销售模版长沙互联网推广公司
  • 百度搜索引擎优化方案悟空建站seo服务
  • 蚌埠seo推广台州关键词首页优化
  • 下载类网站做多久才有流量温州seo外包公司
  • 用jsp做的网站源代码下载制作自己的网页
  • 企业门户网站模板 下载厦门seo小谢
  • 外贸平台做摩托车配件什么网站好如何创建微信小程序
  • 北京科技公司名单武汉seo认可搜点网络
  • 郴州做网站seo搜狗官方网站
  • 深圳微信分销网站建设画质优化app下载
  • Net网站开发多少钱优化大师免安装版
  • 教做美食的视频网站天津百度搜索排名优化
  • 重庆企业网站建设南京百度seo排名
  • 扁平化网站格局网络建设推广
  • 微信小程序开发教程详解广东优化疫情防控措施
  • 刚做的网站在百度上搜不到河北网络科技有限公司
  • 沈阳网站开发培训多少钱网络营销的含义的理解
  • 巩义便宜网站建设费用百度推广费用一年多少钱