I found a solution. The answer is simply to calculate a scale factor and resize everything. The dialog window as well as all elements in this dialog. Here is an example of how to do this:
void TQtSettings::doResize()
{
// The main dialog window
QSize size = this->size();
QRect rect = this->geometry();
size.scale(scale(size.width()), scale(size.height()), Qt::KeepAspectRatio);
this->resize(size);
this->move(scale(rect.left()), scale(rect.top()));
QWidget *parent = this->parentWidget();
if (parent)
{
rect = parent->geometry();
this->move(rect.center() - this->rect().center());
}
// labels
QFont font = ui->label_Channel->font();
font.setPointSizeF(12.0);
size = ui->label_Channel->size();
size.scale(scale(size.width()), scale(size.height()), Qt::KeepAspectRatio);
ui->label_Channel->resize(size);
rect = ui->label_Channel->geometry();
ui->label_Channel->move(scale(rect.left()), scale(rect.top()));
ui->label_Channel->setFont(font);
[...]
}
int TQtSettings::scale(int value)
{
if (value <= 0 || mScaleFactor == 1.0)
return value;
return (int)((double)value * mScaleFactor);
}
There may be a more elegant way by iterating through the elements instead of writing spaghetti code. However. The above code just demonstrate how to do it.
This results in a dialog like this (for the colours blame the poor theme on the VM):
dialog window