Qt程序设置界面显示在屏幕中央(包括多屏机的处理)

在为金融分析师和操盘手开发Qt程序时,发现程序界面无法在多屏环境中居中显示,给用户带来不便。通过研究QDesktopWidget类,找到了解决方案。代码示例实现了在所有屏幕中正确居中显示Qt界面,简化了多屏用户的查看体验。
摘要由CSDN通过智能技术生成

        最近养了一只笨笨的狗子,感觉和养个孩子似的,心累...

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

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

 

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)。在给他们使用程序的时候他们的一致反馈是程序的界面总是显示不全,查看起来不方便。类似这样:

 

可以使用单例模式来实现在 Windows Server 2016 系统中限制程序只打开一个界面。具体实现方式如下: 1. 在程序启动时,先检查系统中是否已经存在该程序的进程,如果存在,则把新的进程直接退出。 2. 如果不存在该程序的进程,则把程序的主窗口设置为顶层窗口,并显示在屏幕中央。 下面是一个简单的示例代码: ```cpp #include <QApplication> #include <QMessageBox> #include <QLocalServer> #include <QLocalSocket> int main(int argc, char *argv[]) { QApplication a(argc, argv); // 创建本地服务器 QLocalServer server; server.listen("myapp"); // 如果服务器已经启动,则退出 if (server.serverError() == QAbstractSocket::AddressInUseError) { QLocalSocket socket; socket.connectToServer("myapp"); if (socket.waitForConnected(500)) { QMessageBox::warning(nullptr, "Warning", "Another instance is already running."); return 0; } } // 创建主窗口,并设置为顶层窗口 QWidget w; w.setWindowFlags(Qt::WindowStaysOnTopHint); w.show(); return a.exec(); } ``` 在上面的代码中,我们使用了 `QLocalServer` 和 `QLocalSocket` 来实现进程间通信。我们创建了一个名为 "myapp" 的本地服务器,在程序启动时,会尝试监听该服务器。如果服务器已经存在(即程序已经运行),则会显示一个警告框,并退出程序。如果服务器不存在,则会创建一个主窗口,并将其设置为顶层窗口。这样,无论多少个用户打开该程序,都只会显示一个主窗口。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值