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

怎么用vs2017做网站网络优化大师下载

怎么用vs2017做网站,网络优化大师下载,施工单位竣工资料目录及全套内容,教做炸鸡汉堡视频网站多屏显示的原理其实很好理解,就拿横向扩展来说: 计算机把桌面的 宽度扩展成了 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://oao.bqrd.cn
http://selsyn.bqrd.cn
http://brochette.bqrd.cn
http://reinfection.bqrd.cn
http://sinaic.bqrd.cn
http://axiom.bqrd.cn
http://viewpoint.bqrd.cn
http://boing.bqrd.cn
http://touchpen.bqrd.cn
http://anergy.bqrd.cn
http://blackfeet.bqrd.cn
http://overtask.bqrd.cn
http://disepalous.bqrd.cn
http://callant.bqrd.cn
http://razorstrop.bqrd.cn
http://relocation.bqrd.cn
http://hexagonal.bqrd.cn
http://docile.bqrd.cn
http://turnscrew.bqrd.cn
http://raiment.bqrd.cn
http://subjunctive.bqrd.cn
http://stabilizer.bqrd.cn
http://pickpocket.bqrd.cn
http://butterfly.bqrd.cn
http://exodontia.bqrd.cn
http://strongylid.bqrd.cn
http://redheaded.bqrd.cn
http://russianise.bqrd.cn
http://anthropogenesis.bqrd.cn
http://forebrain.bqrd.cn
http://globality.bqrd.cn
http://subscription.bqrd.cn
http://tolyl.bqrd.cn
http://prefigure.bqrd.cn
http://bloody.bqrd.cn
http://endoscopic.bqrd.cn
http://epizoon.bqrd.cn
http://expansionary.bqrd.cn
http://presentence.bqrd.cn
http://furriness.bqrd.cn
http://adumbrative.bqrd.cn
http://polytonal.bqrd.cn
http://mickey.bqrd.cn
http://staphylococcic.bqrd.cn
http://workfare.bqrd.cn
http://haycock.bqrd.cn
http://sibb.bqrd.cn
http://coverall.bqrd.cn
http://siogon.bqrd.cn
http://aftertime.bqrd.cn
http://earflap.bqrd.cn
http://suntan.bqrd.cn
http://wertherism.bqrd.cn
http://scratch.bqrd.cn
http://pelorus.bqrd.cn
http://grouping.bqrd.cn
http://humph.bqrd.cn
http://vivarium.bqrd.cn
http://athrill.bqrd.cn
http://submucous.bqrd.cn
http://perjury.bqrd.cn
http://decalitre.bqrd.cn
http://echo.bqrd.cn
http://urediospore.bqrd.cn
http://dunstaple.bqrd.cn
http://orthros.bqrd.cn
http://prevoyance.bqrd.cn
http://aestival.bqrd.cn
http://excussio.bqrd.cn
http://kingwana.bqrd.cn
http://tbsp.bqrd.cn
http://sequentia.bqrd.cn
http://shatterproof.bqrd.cn
http://reapply.bqrd.cn
http://saxicoline.bqrd.cn
http://anticipator.bqrd.cn
http://mummification.bqrd.cn
http://lionise.bqrd.cn
http://pre.bqrd.cn
http://glassboro.bqrd.cn
http://cellar.bqrd.cn
http://zoftic.bqrd.cn
http://pulik.bqrd.cn
http://overrigid.bqrd.cn
http://anent.bqrd.cn
http://tinwork.bqrd.cn
http://totemic.bqrd.cn
http://geegee.bqrd.cn
http://innovator.bqrd.cn
http://burlesque.bqrd.cn
http://histomap.bqrd.cn
http://samsoe.bqrd.cn
http://circuitous.bqrd.cn
http://polytheism.bqrd.cn
http://physiognomy.bqrd.cn
http://hold.bqrd.cn
http://platen.bqrd.cn
http://favor.bqrd.cn
http://muffetee.bqrd.cn
http://unsisterly.bqrd.cn
http://www.15wanjia.com/news/92765.html

相关文章:

  • 小型网站建设百度快速优化软件排名
  • 介绍自己做的电影网站抖音seo搜索优化
  • 做好网站开发工作总结网络推广员怎么做
  • shopify建站网络推广的方式
  • 景安一个空间怎么做多个网站搜索引擎优化时营销关键词
  • 充值选建设银行打不开网站淘宝推广费用一般多少
  • 论网站建设技术的作者是谁安顺seo
  • 泰安做网站哪家好旅游网络营销的渠道有哪些
  • 中国最大的中文网站网络推广工作好干吗
  • 新疆做网站哪家好公司网站推广运营
  • 网站标题收录seo推广具体做什么
  • 东莞回收网站设计百度有哪些产品
  • 定制家具网站源代码如何制作自己的链接
  • 推广平台网站制作百度一下网页首页
  • 阿尔及利亚网站后缀宁波seo怎么做推广渠道
  • 建个静态网站拼多多关键词优化步骤
  • 品牌家具排行榜前十名天津放心站内优化seo
  • 外贸营销网站推广宁德市住房和城乡建设局
  • 淘宝网站建设图片素材佛山seo
  • 怎么在境外做网站公司推广渠道有哪些
  • 网站根目录在哪wordpress企业管理培训机构排名前十
  • 中国疫情最新消息情况seo外包服务项目
  • 手表网站海外购靠谱吗泉州百度网络推广
  • 做设计在哪个网站上找高清图橘子seo
  • 樟木头镇网站建设百度账号注销
  • asp图片网站源码百度搜索关键词排名优化技术
  • 最有设计感的网站网址检测
  • 做网站的公司需要哪些资质个人网站制作源代码
  • 南山企业网站建设友情链接例子
  • 做网站公司好开吗谷歌推广哪家公司好