Qt中有没有一种方法可以获取表单上的所有小部件

Is there a way in Qt to get all widgets on a form?

本文关键字:表单 获取 小部 有没有 方法 一种 Qt      更新时间:2023-10-16

例如,我在一个表单上有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语句,并创建一个以小部件为参数的函数?

所有小部件都附加到窗体或窗口吗?

您可以从UI父窗口小部件中获取所有子窗口小部件,并迭代子窗口小组件的集合。

根据你的小部件层次结构,你应该做一些类似的事情

QObjectList *widgetList = parentWidget->findChildren();

在您的具体情况下:

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

编辑:如果没有你的其余代码,我不知道ui代表什么,因此我给出了一般的答案。我假设你的ui是一个主窗口,在我的代码中如下所示

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();
}

reggie!你不认为你做错了吗?

关于布局

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

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

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

此功能允许您覆盖默认字体;但是重写可能是个坏主意,因为例如,有些地方需要超大字体来支持其特殊字符。