gpt4 book ai didi

c++ - 在Qt中,如何确定屏幕的大小?

转载 作者:行者123 更新时间:2023-11-30 03:42:08 24 4
gpt4 key购买 nike

我希望我的应用程序以最大化开始,因为整个计算机都将专用于该任务,所以我找到了满足该要求的 showMaximized() 函数,而不是标准的 show( )。问题是我希望我的小部件与应用程序窗口的最终有用大小成比例,这样我们就可以在将来的某个时候更改硬件或窗口管理器,而根本不接触应用程序。

我自己找到的最佳方法如下,但它依赖于通常有效但有时会导致整个 UI 挤在左上角的竞争条件。重新启动应用程序可以修复它,但我宁愿不必告诉非技术用户这样做。

主要.h:

#ifndef MAIN_H
#define MAIN_H

#include <QtWidgets>



class ResizeFilter : public QObject
{
Q_OBJECT

public:
ResizeFilter();

protected:
bool eventFilter(QObject* obj, QEvent* event);

signals:
void ResizeEvent(QSize size);
};



class MainWindow : public QMainWindow
{
Q_OBJECT

public:
static MainWindow* GetInstance();

private:
static MainWindow* singleton;
MainWindow();
~MainWindow();
ResizeFilter* filter;

private slots:
void FinishInit(QSize size);
};



#endif // MAIN_H

主要.cpp:

#include "main.h"
#include <QApplication>

int main(int argc, char* argv[])
{
QApplication app(argc, argv);
MainWindow::GetInstance();
return app.exec();
}



ResizeFilter::ResizeFilter()
: QObject()
{
}

bool ResizeFilter::eventFilter(QObject* obj, QEvent* event)
{
if(event->type() == QEvent::Resize)
{
QResizeEvent* resizeEv = static_cast<QResizeEvent*>(event);
emit ResizeEvent(resizeEv->size());
}
return QObject::eventFilter(obj, event);
}



MainWindow* MainWindow::singleton = 0;

MainWindow* MainWindow::GetInstance()
{
if(singleton == 0)
{
singleton = new MainWindow();
}
return singleton;
}

MainWindow::MainWindow()
: QMainWindow(0)
{
filter = new ResizeFilter();
installEventFilter(filter);
showMaximized(); //do this before connecting so we miss the first resize event (wrong size) and catch the second (right size)
connect(filter, SIGNAL(ResizeEvent(QSize)), this, SLOT(FinishInit(QSize)));
}

void MainWindow::FinishInit(QSize size)
{
disconnect(filter, SIGNAL(ResizeEvent(QSize)), this, SLOT(FinishInit(QSize)));
delete filter;
filter = 0;

//build widgets based on size argument
}

MainWindow::~MainWindow()
{
}

我也愿意接受一种不那么土气的戈德堡方式。这对我来说看起来有点乱,但它非常紧凑,我认为我可以用我目前的知识得到它。

(单例架构用于项目的另一部分。)

最佳答案

您可以使用 DesktopWidget 获取屏幕的几何形状和尺寸.

关于c++ - 在Qt中,如何确定屏幕的大小?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36959983/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com