2

例如,我在一个表单上有 20 个小部件。我需要根据屏幕分辨率调整它们的大小所以这是我的方法

newHeight=(desktopHeight * ui->widget1->height())/768;
newWidth=(desktopWidth * ui->widget1->width())/1024;
newY=(desktopHeight * ui->widget1->y())/768;
newX=(desktopWidth * ui->widget1->x())/1024;
ui->widget1->setGeometry(newX,
              newY,
              newWidth,
              newHeight);
newFontSize=(desktopHeight * ui->widget1->font().pointSize())/768;
ui->widget1->setFont(QFont ("Ubuntu",newFontSize, QFont::Bold));

我将对剩余的 19 个小部件重复此方法。有没有办法获取所有小部件并创建一个 do while 语句并创建一个以小部件为参数的函数?

4

2 回答 2

4

所有小部件是否都附加到表单或窗口?

您可以从其 UI 父小部件中获取所有子小部件并迭代子集。

根据您的小部件层次结构,您应该执行类似的操作

QObjectList *widgetList = parentWidget->findChildren();

在您的具体情况下:

QObjectList *widgetList = ui->centralWidget->findChildren();

编辑:没有你的其余代码,我不知道 ui 代表什么,因此我的通用答案。我假设您的 ui 是 MainWindow 在我的代码中如下所示

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
        ui->setupUi(this);

        QObjectList widgetList = ui->centralWidget->children();
        qDebug() << "Amount of children found :" << widgetList.count();

}
于 2013-08-12T01:26:25.217 回答
2

雷吉!你不觉得你做错了吗?

关于布局

您的方法用于非常特定的情况,因为 Qt 中有现成的即用型解决方案,称为布局管理。

在这里您可以阅读:布局管理,也可以查看使用示例和直观的如何在 Qt 设计器中使用它

关于字体:QApplication::setFont,因此您可以在程序范围内更改字体。但是在官方文档中你可以找到:

此功能可让您覆盖默认字体;但是覆盖可能不是一个好主意,因为例如,某些语言环境需要超大字体来支持其特殊字符。

于 2013-08-12T07:24:44.080 回答