制作使用不同系统字体大小的Qt应用程序
我正在开发一个针对Windows和Mac OS X的Qt应用程序。我的应用程序中有很多带有文本的对话框。我在Windows上创建了这个应用程序,在那里我调整了对话框的大小,使其能够整齐地适应我的所有文本。当我在MacOSX上编译时,我意识到所有的文本都不适合。此外,在Windows控制面板中设置不同的系统字体大小会导致所有对话框大小不正确制作使用不同系统字体大小的Qt应用程序,qt,fonts,cross-platform,font-size,Qt,Fonts,Cross Platform,Font Size,我正在开发一个针对Windows和Mac OS X的Qt应用程序。我的应用程序中有很多带有文本的对话框。我在Windows上创建了这个应用程序,在那里我调整了对话框的大小,使其能够整齐地适应我的所有文本。当我在MacOSX上编译时,我意识到所有的文本都不适合。此外,在Windows控制面板中设置不同的系统字体大小会导致所有对话框大小不正确 在Qt中,您应该如何处理不同的系统字体大小?您没有:您让Qt为您完成这项工作。使用布局来安排你的小部件;避免设置固定的大小。最后一点:我建议使用Qt设计器来创
在Qt中,您应该如何处理不同的系统字体大小?您没有:您让Qt为您完成这项工作。使用布局来安排你的小部件;避免设置固定的大小。最后一点:我建议使用Qt设计器来创建接口 为Dmitry编辑:下面是来自2个ui文件(使用pyuic4生成)的Python文件,每个文件都有2个QLabel。1 Qlabel字体很大(72),另一个是默认字体(10)
from PyQt4 import QtCore, QtGui
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(115, 160)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())
Dialog.setSizePolicy(sizePolicy)
Dialog.setMinimumSize(QtCore.QSize(115, 160))
Dialog.setMaximumSize(QtCore.QSize(115, 160))
self.verticalLayout = QtGui.QVBoxLayout(Dialog)
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtGui.QLabel(Dialog)
font = QtGui.QFont()
font.setFamily("Andale Mono")
font.setPointSize(72)
self.label.setFont(font)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.label_2 = QtGui.QLabel(Dialog)
self.label_2.setObjectName("label_2")
self.verticalLayout.addWidget(self.label_2)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Dialog", "UGLY", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("Dialog", "Not ugly", None, QtGui.QApplication.UnicodeUTF8))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
from PyQt4 import QtCore, QtGui
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(495, 140)
self.verticalLayout = QtGui.QVBoxLayout(Dialog)
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtGui.QLabel(Dialog)
font = QtGui.QFont()
font.setFamily("Andale Mono")
font.setPointSize(72)
self.label.setFont(font)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.label_2 = QtGui.QLabel(Dialog)
self.label_2.setObjectName("label_2")
self.verticalLayout.addWidget(self.label_2)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Dialog", "less UGLY", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("Dialog", "Not ugly", None, QtGui.QApplication.UnicodeUTF8))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
from PyQt4 import QtCore, QtGui
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(115, 160)
sizePolicy = QtGui.QSizePolicy(QtGui.QSizePolicy.Fixed, QtGui.QSizePolicy.Fixed)
sizePolicy.setHorizontalStretch(0)
sizePolicy.setVerticalStretch(0)
sizePolicy.setHeightForWidth(Dialog.sizePolicy().hasHeightForWidth())
Dialog.setSizePolicy(sizePolicy)
Dialog.setMinimumSize(QtCore.QSize(115, 160))
Dialog.setMaximumSize(QtCore.QSize(115, 160))
self.verticalLayout = QtGui.QVBoxLayout(Dialog)
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtGui.QLabel(Dialog)
font = QtGui.QFont()
font.setFamily("Andale Mono")
font.setPointSize(72)
self.label.setFont(font)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.label_2 = QtGui.QLabel(Dialog)
self.label_2.setObjectName("label_2")
self.verticalLayout.addWidget(self.label_2)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Dialog", "UGLY", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("Dialog", "Not ugly", None, QtGui.QApplication.UnicodeUTF8))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
from PyQt4 import QtCore, QtGui
class Ui_Dialog(object):
def setupUi(self, Dialog):
Dialog.setObjectName("Dialog")
Dialog.resize(495, 140)
self.verticalLayout = QtGui.QVBoxLayout(Dialog)
self.verticalLayout.setObjectName("verticalLayout")
self.label = QtGui.QLabel(Dialog)
font = QtGui.QFont()
font.setFamily("Andale Mono")
font.setPointSize(72)
self.label.setFont(font)
self.label.setObjectName("label")
self.verticalLayout.addWidget(self.label)
self.label_2 = QtGui.QLabel(Dialog)
self.label_2.setObjectName("label_2")
self.verticalLayout.addWidget(self.label_2)
self.retranslateUi(Dialog)
QtCore.QMetaObject.connectSlotsByName(Dialog)
def retranslateUi(self, Dialog):
Dialog.setWindowTitle(QtGui.QApplication.translate("Dialog", "Dialog", None, QtGui.QApplication.UnicodeUTF8))
self.label.setText(QtGui.QApplication.translate("Dialog", "less UGLY", None, QtGui.QApplication.UnicodeUTF8))
self.label_2.setText(QtGui.QApplication.translate("Dialog", "Not ugly", None, QtGui.QApplication.UnicodeUTF8))
if __name__ == "__main__":
import sys
app = QtGui.QApplication(sys.argv)
Dialog = QtGui.QDialog()
ui = Ui_Dialog()
ui.setupUi(Dialog)
Dialog.show()
sys.exit(app.exec_())
布局无法调整外部小部件的大小,它仍然必须设置为您知道的最大大小require@oggmonster如果您没有手动限制小部件的大小(使用QS或setMaximumXXX方法),并且正确使用布局,那么所有这些都应该是可以的。外部小部件也应该放在布局中。如果外部小部件有最大大小,您将无法处理任何字体大小。要么定义最大字体大小,要么释放外部窗口小部件的大小限制。@Frodon,你能提供“丑陋”字体大小的小样本吗?你在对话框中使用过布局吗?这是一个复杂的问题。在自定义过程中,不应使用任何“固定”值。例如,所有字体大小都应设置为相对值(而不是像素)。请查看此相关线程: