Qt中根据pc屏幕分辨率按比例修改窗口的大小
2016-06-23 11:37
501 查看
#ifndef FITWINDOW_H #define FITWINDOW_H #include <QObject> #include <QWidget> /////////////////////////////////////////////// /// \brief The FitWindow class,适用于固定尺寸及内部控件大小位置固定的窗口 /// class FitWindow : public QObject { Q_OBJECT public: FitWindow(); static void resetUI(QWidget* pWidget); static float getScale(); }; #endif // FITWINDOW_H
#include "fitwindow.h"
#include <QObjectList>
#include <QDesktopWidget>
#include <QApplication>
#include <QMetaProperty>
#include <QPushButton>
FitWindow::FitWindow()
{
}
void FitWindow::resetUI(QWidget *pWidget)
{
if(!pWidget){
return;
}
QDesktopWidget* desktopWidget = QApplication::desktop();
//获取可用桌面大小
QRect deskRect = desktopWidget->availableGeometry();
// 如果分辨率已经在1920及以上,则不需要进行处理
if(deskRect.width() >= 1920){
return;
}
//仅使用x比例,否则窗口会变形
float scale = deskRect.width() / 1920.0;
QObjectList lst = pWidget->children();
QPoint pt(0,0);
for(auto l : lst)
{
auto widget = qobject_cast<QWidget*>(l);
if(widget)
{
pt = widget->pos();
widget->move(QPoint(pt.x() * scale, pt.y() * scale));
widget->resize(widget->width() * scale, widget->height() * scale);
QFont font;
int nIndex = widget->metaObject()->indexOfProperty("font");
auto propertyFont = widget->metaObject()->property(nIndex);
QVariant var = propertyFont.read(widget);
if(var.canConvert(QMetaType::QFont))
{
font = var.value<QFont>();
font.setPointSizeF(font.pointSizeF() * scale);
propertyFont.write(widget,QVariant::fromValue(font));
}
QPixmap pixmap;
nIndex = widget->metaObject()->indexOfProperty("pixmap");
auto pixmapProp = widget->metaObject()->property(nIndex);
var = pixmapProp.read(widget);
if(var.canConvert(QMetaType::QPixmap))
{
pixmap = var.value<QPixmap>();
if(!pixmap.isNull())
{
QSize sizePixmap(pixmap.size().width() * scale, pixmap.size().height() * scale);
pixmap = pixmap.scaled(sizePixmap);
pixmapProp.write(widget,QVariant::fromValue(pixmap));
}
}
}
}
pWidget->resize(pWidget->width() * scale, pWidget->height() * scale);
}
float FitWindow::getScale()
{
QDesktopWidget* desktopWidget = QApplication::desktop();
//获取可用桌面大小
QRect deskRect = desktopWidget->availableGeometry();
return deskRect.width() / 1920.0;
}
使用:
FitWindow::resetUI(pToolsDlg);
相关文章推荐
- qt 制作dll 插件
- FindQt5 not provided for cmake
- qt 编译时提示error: multiple definition of
- QT远程调试fl2440的配置
- Qt 程序桌面居中显示的方法
- qt 更改 调试、发布目录
- win732位 + QT4.8.6 + QT CRETER 环境配置的搭建
- PyQt的一些使用总结
- Qt Style Sheet实践(一):按钮及关联菜单(24K纯开源,一共四篇)
- Qt之JSON生成与解析
- 从零开发MQTT服务(二)
- QT 一些非常常用的操作
- QT 下把编辑框内的中文字符转换为 char*
- Qt学习(一)--了解信号与槽
- QTableWidget中表格显示图片
- Qt 显示中文代码
- VTK-6.3.0编译(支持Qt编程)以及QVTKwidget插件安装
- Qt——中心窗口部件
- 在Ubuntu上用命令创建你的第一个Qt程序
- 学习记录-Qt MDI子窗口显示大小调整