求助,急:qt字体大小怎么随不同分辨率的电脑变化?

qq_33571338 2017-06-16 05:42:44
我现在想使ui界面在不同分辨率的电脑上显示同样大小,在网上百度到了如何使控件自适应大小的方法,但是pushbutton或者textLine中的字体还是原来的大小,怎么解决?谢谢!
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

float currentScreenWid = QApplication::desktop()->width();
float currentScreenHei = QApplication::desktop()->height();

// QFont m=ui->textEdit->font();
// m.setPointSize(9);

float lfWidMultiple=currentScreenWid/1366;
float lfHeiMuiltiple=currentScreenHei/768;

ui->label->setScaledContents(true);
resetGrid(this,lfWidMultiple,lfHeiMuiltiple);
resetGrid(ui->groupBox,lfWidMultiple,lfHeiMuiltiple);
resetGrid(ui->pushButton,lfWidMultiple,lfHeiMuiltiple);
resetGrid(ui->tableWidget,lfWidMultiple,lfHeiMuiltiple);
resetGrid(ui->textEdit,lfWidMultiple,lfHeiMuiltiple);
resetGrid(ui->comboBox,lfWidMultiple,lfHeiMuiltiple);
resetGrid(ui->radioButton,lfWidMultiple,lfHeiMuiltiple);
resetGrid(ui->widget,lfWidMultiple,lfHeiMuiltiple);

QDesktopWidget *m_pdesktop=QApplication::desktop();
move((m_pdesktop->width()-this->width())/2,(m_pdesktop->height()-this->height())/2);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::resetGrid(QWidget *widget, double lfFactorx, double lfFactory)
{
int widgetX = widget->x();
int widgetY = widget->y();
int widgetWid = widget->width();
int widgetHei = widget->height();
int nWidgetX = (int)(widgetX*lfFactorx);
int nWidgetY = (int)(widgetY*lfFactory);
int nWidgetWid = (int)(widgetWid*lfFactorx);
int nWidgetHei = (int)(widgetHei*lfFactory);
widget->setGeometry(nWidgetX,nWidgetY,nWidgetWid,nWidgetHei);
}
界面如下:
也百度,加入
QFont m=ui->textEdit->font();
m.setPointSize(9);
改变字体,说是setPointSize()会根据分辨率改变大小,但是并没有效果(字体大小没变,比如puahButton上的字体显示不全),求教——如何使ui界面的字体随分辨率变化?
...全文
3499 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwei2 2021-07-05
  • 打赏
  • 举报
回复

楼主,请问你实现了Ui界面的字体不随分辨率变化吗?目前我也碰到这个问题,求助一下,想看看你是怎么实现的?

雲天之巔 2017-06-23
  • 打赏
  • 举报
回复
引用 1 楼 qqwangfan 的回复:
在resizeEvent函数中先取得字体的大小,再将字体根据宽高的缩放比例缩放,即可改变。 字体大小的获得,改变与设置: QFont font =ui.label->m_font; // 取得最开始的字体大小 int fontsize = font.pixelSize(); if (fontsize == -1) { fontsize = font.pointSize(); if (fontsize == -1) { qreal sizef = font.pointSizeF(); font.setPointSizeF(sizef* fontscale); } else { font.setPixelSize(fontsize * fontscale * 90 / 72); // 设置字体大小为像素大小,而不是以磅为单位, } } else { font.setPixelSize(fontsize * fontscale); } ui.label->setFont(font);
字体信息一般情况下都是通过QSS来设置的,这种情况也可以么?
qq_33571338 2017-06-22
  • 打赏
  • 举报
回复
引用 6 楼 军神关云长的回复:
int QFont::pixelSize() const Returns the pixel size of the font if it was set with setPixelSize(). Returns -1 if the size was set with setPointSize() or setPointSizeF(). pixelSize()和pointSize()、pointSizeF() 都需要判断返回值是否是-1,因为如果不是相应的set函数设置的字体,是会返回-1的。因为不确定是那种方式设置的字体,因此每个都判断,不过windows下我本机试过是pointsize()方式,因此直接获取pointsize也可以不用判断-1. “ui界面在不同分辨率的电脑上显示同样大小”,你这个应该是程序一起来就要根据屏幕分辨率显示字体了。可以这样,在窗口类构造函数中获取窗口的长宽大小和字体,再根据屏幕分辨率自适应大小和字体,如: int width = ui.widget->width(); int height = ui.widget->height(); QFont font = ui.font; int pointsize = font.pointsize(); float currentScreenWid = QApplication::desktop()->width(); float currentScreenHei = QApplication::desktop()->height(); float scalew = currentScreenWid/ width; float scaleh = currentScreenHei /height ; float scale = scalew < scaleh ? scalew : scaleh; font.setfixsize(pointsize *scale * 90 / 72); ui.setfont(font); //大体是以上这样,至于为什么是*90/72,这个可以上网查一下qt字体大小的计算DPI,公式为:Pixel = DPI * Point / 72 如链接所说:http://blog.csdn.net/liuqz2009/article/details/7208931 以上方法在不同分辨率下可能大小不是很相同,但应该差别不大。
并不行。。。设置pixelsize没变化。。。放弃了。。。
  • 打赏
  • 举报
回复
int QFont::pixelSize() const Returns the pixel size of the font if it was set with setPixelSize(). Returns -1 if the size was set with setPointSize() or setPointSizeF(). pixelSize()和pointSize()、pointSizeF() 都需要判断返回值是否是-1,因为如果不是相应的set函数设置的字体,是会返回-1的。因为不确定是那种方式设置的字体,因此每个都判断,不过windows下我本机试过是pointsize()方式,因此直接获取pointsize也可以不用判断-1. “ui界面在不同分辨率的电脑上显示同样大小”,你这个应该是程序一起来就要根据屏幕分辨率显示字体了。可以这样,在窗口类构造函数中获取窗口的长宽大小和字体,再根据屏幕分辨率自适应大小和字体,如: int width = ui.widget->width(); int height = ui.widget->height(); QFont font = ui.font; int pointsize = font.pointsize(); float currentScreenWid = QApplication::desktop()->width(); float currentScreenHei = QApplication::desktop()->height(); float scalew = currentScreenWid/ width; float scaleh = currentScreenHei /height ; float scale = scalew < scaleh ? scalew : scaleh; font.setfixsize(pointsize *scale * 90 / 72); ui.setfont(font); //大体是以上这样,至于为什么是*90/72,这个可以上网查一下qt字体大小的计算DPI,公式为:Pixel = DPI * Point / 72 如链接所说:http://blog.csdn.net/liuqz2009/article/details/7208931 以上方法在不同分辨率下可能大小不是很相同,但应该差别不大。
trytry1992 2017-06-19
  • 打赏
  • 举报
回复
你看下setPointSize的参数貌似不是很直白的字体大小
qq_33571338 2017-06-18
  • 打赏
  • 举报
回复
加100分奖励啊!紧急求助
qq_33571338 2017-06-17
  • 打赏
  • 举报
回复
引用 1 楼 军神关云长的回复:
在resizeEvent函数中先取得字体的大小,再将字体根据宽高的缩放比例缩放,即可改变。 字体大小的获得,改变与设置: QFont font =ui.label->m_font; // 取得最开始的字体大小 int fontsize = font.pixelSize(); if (fontsize == -1) { fontsize = font.pointSize(); if (fontsize == -1) { qreal sizef = font.pointSizeF(); font.setPointSizeF(sizef* fontscale); } else { font.setPixelSize(fontsize * fontscale * 90 / 72); // 设置字体大小为像素大小,而不是以磅为单位, } } else { font.setPixelSize(fontsize * fontscale); } ui.label->setFont(font);
还有设置字体大小时 90/72 是什么意思?另外你说在resizeEvent里进行字体大小获取,设置,意思是把你写的这些代码都放在resizeEvent里?大白一枚,求指教
qq_33571338 2017-06-16
  • 打赏
  • 举报
回复
引用 1 楼 军神关云长的回复:
在resizeEvent函数中先取得字体的大小,再将字体根据宽高的缩放比例缩放,即可改变。 字体大小的获得,改变与设置: QFont font =ui.label->m_font; // 取得最开始的字体大小 int fontsize = font.pixelSize(); if (fontsize == -1) { fontsize = font.pointSize(); if (fontsize == -1) { qreal sizef = font.pointSizeF(); font.setPointSizeF(sizef* fontscale); } else { font.setPixelSize(fontsize * fontscale * 90 / 72); // 设置字体大小为像素大小,而不是以磅为单位, } } else { font.setPixelSize(fontsize * fontscale); } ui.label->setFont(font);
不明白: fontsize==-1是指?怎么fontsize==-1的判断里还有一个fontsize==-1的判断?sizef*fontscale中的fontscale变量是什么?
  • 打赏
  • 举报
回复
在resizeEvent函数中先取得字体的大小,再将字体根据宽高的缩放比例缩放,即可改变。 字体大小的获得,改变与设置: QFont font =ui.label->m_font; // 取得最开始的字体大小 int fontsize = font.pixelSize(); if (fontsize == -1) { fontsize = font.pointSize(); if (fontsize == -1) { qreal sizef = font.pointSizeF(); font.setPointSizeF(sizef* fontscale); } else { font.setPixelSize(fontsize * fontscale * 90 / 72); // 设置字体大小为像素大小,而不是以磅为单位, } } else { font.setPixelSize(fontsize * fontscale); } ui.label->setFont(font);

16,175

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧