【问题标题】:Enable maximize button in QWizard在 QWizard 中启用最大化按钮
【发布时间】:2015-04-03 20:52:48
【问题描述】:

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

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

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

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

如何启用它?

【问题讨论】:

  • QWizard 继承自 QDialog,这个问题是所有 QDialog 的普遍问题。见stackoverflow.com/questions/4699808/…,我之前也问过类似的问题。
  • 从代码 sn-p 中可以看出,我知道该解决方案。我只能重复一遍,它不能满足我的需要:设置了这些标志后,会显示最大化按钮,但未启用。
  • 你说得对,我应该更清楚的问题。
  • 你有没有试过打电话给setSizeGripEnabled(true)?我的意思是:如果它有一个尺寸控制,它可以调整大小 - 这反过来意味着它应该是最大化的......
  • 窗口有大小夹并且可以调整大小。但是,最大化按钮被禁用。对于一个实验,我尝试将窗口最大化。该按钮仍处于禁用状态(并且不会更改为“恢复大小”按钮。

标签: c++ qt qdialog


【解决方案1】:

我有这个:

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

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

我的一个页面是一个大的 QTableWidget,它最终就像某种 Excel 表格(一个用于验证和就地编辑大量数据的大页面)。使窗口可调整大小并让用户在需要时将其最大化,这样可以更轻松地使用它,而不必在一个小对话框中不断滚动。

通常你会说:如果你需要这么大的窗口,它可能不应该在 QWizard 中。但在这种情况下,它实际上是工作流程的中间部分。一个大的“验证,如果需要,编辑并继续”页面,因此在之前停止 QWizard 然后必须在之后启动另一个或其他东西会很奇怪。

【讨论】:

    【解决方案2】:

    这对我有用:

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

    根据documentation,您必须使用Qt::CustomizeWindowHint 才能更改最小/最大按钮上的各个提示。

    【讨论】:

      【解决方案3】:

      我相信创建自己的对话框会获得更好的结果,但如果你真的想这样做,一种方法是使用窗口样式(仅限 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 快速将一个向导组合在一起;但是,我为此付出的代价是无法(例如)更改页面字幕位置的痛苦和沮丧
      【解决方案4】:

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

      setWindowFlags(Qt::Window);

      【讨论】:

      • 使用 QWizard,我确实得到了带有这个标志的最小化和最大化按钮,但是最大化按钮仍然被禁用。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-06
      • 2014-05-23
      • 1970-01-01
      相关资源
      最近更新 更多