在 QWizard 中启用最大化按钮

8

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

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

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

然而,它显示为禁用状态(灰色、无响应)。

我该如何启用它?


1
QWizard继承自QDialog,这个问题适用于所有QDialog。请参见https://dev59.com/tlfas4cB2Jgan1znQxDx,在此之前我曾经问过类似的问题。 - sashoalm
从代码片段中可以看出,我知道那个解决方案。但我只能重复一遍它并不能满足我的需求:设置这些标志后,最大化按钮会显示,但无法使用。 - Srv19
你说得对,我在问题中应该更加清晰明了。 - Srv19
你尝试过调用setSizeGripEnabled(true)吗?我的意思是,如果它有一个大小调整手柄,它就可以被调整大小,这又意味着它应该可以最大化... - St0fF
窗口具有大小调整手柄并可调整大小。但是,最大化按钮被禁用。 为了进行实验,我尝试将窗口显示为最大化状态。该按钮仍然被禁用(并且不会更改为“恢复大小”按钮)。 - Srv19
4个回答

7

这对我有效:

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

根据文档,您需要使用Qt::CustomizeWindowHint才能更改最小/最大按钮上的个别提示。

5

这里有人,这个方法解决了他的问题:

setWindowFlags(Qt::Window);


1
使用QWizard,我确实可以通过这个标志获得最小化和最大化按钮,但是最大化按钮仍然无法使用。 - Srv19

2

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

向导类示例:

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);
    }
};

我能够迅速地使用qwizard制作向导;然而我为此付出的代价是无法(例如)更改页面副标题位置所带来的痛苦和沮丧。 - Srv19

0

我有这个:

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

在我的开发机上运行Windows 10,Qt 5.5.1,对我来说很好用。

我的其中一个页面是一个大的QTableWidget,最终就像某种形式的Excel表格(一个用于验证和即时编辑大量数据的大页面)。将窗口设置为可调整大小,并允许用户最大化窗口,这样更容易使用,而不必在一个小对话框中不断滚动。

通常你会说:如果你需要这么大的窗口,它可能不应该放在QWizard中。但在这种情况下,它确实是工作流程的中间部分。一个大的“验证、如有需要进行编辑并继续”的页面,所以在之前停止QWizard然后再启动另一个QWizard会很奇怪。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接