【问题标题】:Is it possible to rescale a Qt GUI without rewriting the code?是否可以在不重写代码的情况下重新调整 Qt GUI?
【发布时间】:2012-02-08 07:21:51
【问题描述】:

我负责一个大型 (100+KLOC) Qt 应用程序,其中包含数十个窗口和数百种不同类型的小部件。

今天,一位用户问我是否有任何方法可以让该应用的某些较大的窗口更适合他的 13 英寸笔记本电脑的显示屏。

当然有办法让窗口更节省空间,重新组织 GUI 以允许更多地显示/隐藏各种事物,使用更小的字体等等......但我认为他真正想要的是一种简单地将整个窗口统一缩小一定百分比的方法....类似于 Apple 的 Expose 所做的或某些 VNC 客户端所做的效果。

所以我的问题是...有没有办法告诉 Qt 将整个窗口缩小 x%,而 涉及修改/重新设计大部分代码库?我知道 QPainter 有一个 setScale() 方法,并且 QGraphicsView 允许很好的全局缩放,但是我的应用程序属于 QWidgets 的层次结构,所以我需要一种方法来缩放整个层次结构,而不仅仅是在特定 QWidget 的画布。

【问题讨论】:

  • 我不知道这是否是一个选项,但他们可以在 VirtualBox 中运行您的应用程序,然后使用 VirtualBox 的缩放功能使其成为他们需要的任何大小。

标签: qt resolution-independence


【解决方案1】:

使用样式表您可以修改小部件的边距和间距,您可以将字体更改为更小。其他任何事情都可能需要您重新考虑 UI 设计。

【讨论】:

    【解决方案2】:

    我不知道您的主程序和您正在使用的 GUI,但假设您使用的是基于 QMainWindow 的 GUI,这将起作用:

    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 文件的类中有相同的方法。

    【讨论】:

    • 这不会缩放 GUI,它只是调整主窗口的大小(如果包含的内容太大,则会被裁剪)。
    猜你喜欢
    • 1970-01-01
    • 2021-12-02
    • 1970-01-01
    • 2021-08-02
    • 2020-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-04-21
    相关资源
    最近更新 更多