Возможно ли изменить масштаб графического интерфейса Qt без переписывания кода?
Я отвечаю за большое приложение (100+KLOC) Qt с десятками окон и сотнями различных типов виджетов в нем.
Сегодня один пользователь спросил меня, можно ли как-нибудь подогнать некоторые из больших окон приложения к дисплею его 13-дюймового ноутбука.
Конечно, есть способы сделать окна более экономичными, реорганизовать графический интерфейс, чтобы больше отображать / скрывать различные объекты, использовать меньший шрифт и так далее... но я думаю, что он действительно хочет, это способ просто равномерно уменьшите все окно на определенный процент.... эффект, похожий на то, что делает Apple Expose, или на то, что делают некоторые клиенты VNC.
Итак, мой вопрос... есть ли способ сказать Qt уменьшить масштаб всего окна на x%, что не включает изменение / редизайн большей части кодовой базы? Я знаю, что в QPainter есть метод setScale(), а QGraphicsView допускает хорошее глобальное масштабирование, но мое приложение имеет разновидность иерархии QWidgets, поэтому мне нужен способ масштабирования всей иерархии, а не только масштабирования внутри конкретного QWidget. холст.
2 ответа
Я не знаю о вашей основной программе и GUI, который вы используете, но при условии, что вы используете GUI, основанный на QMainWindow, это будет работать:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Window w;
w.show();
w.resize(new_width, new_height);
return a.exec();
}
с окном:
namespace Ui {
class Window;
}
class Window : public QMainWindow
{
Q_OBJECT
public:
explicit Window(QWidget *parent = 0);
~Window();
private:
Ui::Window *ui;
};
Предполагая, что вы используете QML, в ответственном классе есть тот же метод, который отображает файл qml.
Используя таблицы стилей, вы можете изменять поля и интервалы виджетов, вы можете изменить шрифты на меньшие. Все остальное, вероятно, потребует от вас переосмысления дизайна пользовательского интерфейса.