admin管理员组

文章数量:1570218

        最近在程序中遇到一个问题,在网上搜了很久也没搜到类似的问题,不过还是搜到了几篇相关的博文,才解决了,所以特来把这个问题以及解决方式写在这里,方便后期遇到类似问题的人有所启发。

       我们写界面的时候都会让它显示在屏幕中央,因为到处乱跑的话实在是不方便,之前我一直使用下面这句代码:

 

int main(int argc, char * argv[])
{
    QApplication app(argc, argv);
    Window window;//这个类继承自QWidget
    window.move((app.desktop()->width() - window.width()) / 2, (app.desktop()->height() - window.height()) / 2); 
    window.show();
    return app.exec();
}

        这段代码是没问题的,百试百灵,包治百病。但是因为面向的客户大多是金融分析师和操盘手,他们为了更直观全面的看到实时行情,所以他们的电脑都是多屏机,少则2个显示器,多则能达到8个屏幕(2*4)。在给他们使用程序的时候他们的一致反馈是程序的界面总是显示不全,查看起来不方便。类似这样:

 

查阅了很多资料查到一个最根本的类QDesktopWidget。有关于这个类的详细说明请参考Qt助手文档或者这篇博客QDesktopWidget详细说明。下面直接放一个小程序的代码,复制即可用: 

 

 
  1. int main(int argc, char * argv[])

  2. {

  3. QApplication a(argc, argv);

  4. screenTest widget;

  5. widget.show();

  6. return a.exec();

  7. }

  8.  
  9. void screenTest::showInfo()//自己定义的函数,用于显示信息

  10. {

  11. QDesktopWidget * desktop = QApplication::desktop();

  12.  
  13. //获取程序所在屏幕是第几个屏幕

  14. int current_screen = desktop->screenNumber(this);

  15. //获取程序所在屏幕的尺寸

  16. QRect rect = desktop->screenGeometry(current_screen);

  17. //获取所有屏幕总大小

  18. QRect rectA = desktop->geometry();

  19. //获取所有屏幕的个数

  20. int screen_count = desktop->screenCount();

  21. //获取主屏幕是第几个

  22. int prim_screen = desktop->primaryScreen();

  23.  
  24. QString temp = "total screen size = " + QString::number(screen_count);

  25.     temp = temp + "\ncurrent screen num = " + QString::number(current_screen);

  26.     temp = temp + "\ncurrent screen rect " + QString::number(rect.width()) + "*" + QString::number(rect.height());

  27.     temp = temp + "\nwhole screen rect " + QString::number(rectA.width()) + "*" + QString::number(rectA.height());

  28. }

       这样子就可以了,是不是很简单。希望能帮助到你,比心。

本文标签: 界面屏幕中央程序多屏