在Qt中是否有办法在表单上获取所有小部件?

时间:2013-08-12 01:16:32

标签: c++ qt

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

2 个答案:

答案 0 :(得分: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();

}

答案 1 :(得分:2)

雷吉!难道你不认为你做错了吗?

关于布局

您的方法用于非常具体的情况,因为Qt中的盒子解决方案中有即用型,称为布局管理。

您可以在这里阅读相关内容:Layout Management,另请参阅example of usage以及直观的操作方法use it in Qt designer

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

  

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