在 QWizard 中启用最大化按钮

Enable maximize button in QWizard

我有一个基于 QWizard(继承自 QDialog)的 Windows 应用程序。它必须有一个有效的最大化按钮。

默认情况下,最大化按钮甚至不可见。我已将其设置为显示,使用:

auto flags = windowFlags();
flags ^= Qt::WindowContextHelpButtonHint;
flags |= Qt::WindowMinMaxButtonsHint;
setWindowFlags(flags);

但是,它显示为禁用(变灰,无响应)。

如何启用它?

有人 here 说这解决了他的问题:

setWindowFlags(Qt::Window);

我相信您创建自己的对话框会获得更好的结果,但如果您真的想这样做,一种方法是使用 window 样式(仅限 Windows,不能跨平台) .

向导class示例:

class wizard : public QWizard
{
public:
    wizard() {}
    ~wizard() {}

protected:
    bool event(QEvent *event)
    {
#ifdef Q_OS_WIN /*Make this code Windows OS only*/
        if (event->type() == QEvent::WinIdChange)
        {
            HWND hwnd = (HWND)winId();
            LONG lStyle = GetWindowLong(hwnd, GWL_STYLE);
            lStyle |= (WS_MINIMIZEBOX | WS_MAXIMIZEBOX); /*Enable minimize and maximize*/
            SetWindowLong(hwnd, GWL_STYLE, lStyle);
        }
#endif

        return QWizard::event(event);
    }
};

这对我有用:

setWindowFlags(windowFlags() | Qt::CustomizeWindowHint |
                               Qt::WindowMinimizeButtonHint |
                               Qt::WindowMaximizeButtonHint |
                               Qt::WindowCloseButtonHint);

根据 documentation,您必须使用 Qt::CustomizeWindowHint 才能更改 min/max 按钮上的个别提示。

我有这个:

QWizard *wizard = new QWizard(this, Qt::CustomizeWindowHint | Qt::WindowMaximizeButtonHint | Qt::Window);
wizard->setSizeGripEnabled(true);

运行 Windows 10 在我的开发箱上,Qt 5.5.1,为我工作。

我的一个页面是一个很大的 QTableWidget,它最终变成了某种 Excel sheet(一个用于验证和就地编辑大量数据的大页面)。使 window 可调整大小并让用户根据需要将其最大化,这样使用起来就容易得多,而不必在小对话框中不断滚动。

通常你会说:如果你需要这么大的 window,它可能不应该在 QWizard 中。但在这种情况下,它确实是工作流程的中间部分。一个很大的 'verify, edit-if-needed and continue' 页面,所以之前停止 QWizard 然后又不得不启动另一个页面或其他东西会很奇怪。