2015-02-04 5 views
3

У меня есть приложение Windows, которое построено на QWizard (который наследуется от QDialog). У него должна быть кнопка максимизации работы.Включить кнопку максимизации в QWizard

По умолчанию кнопка максимизации даже не видна. я установил его для отображения, используя:

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

Однако, он обнаруживает, что отключен (выделен серым цветом, не отвечает).

Как его включить?

+0

QWizard наследует от QDialog, эта проблема является общей для всех QDialogs. См. Https://stackoverflow.com/questions/4699808/cant-add-minimize-button-to-qdialog-under-linux. Ранее я задавал аналогичный вопрос. – sashoalm

+0

Как вы можете видеть из фрагмента кода, я знаю об этом решении. Я могу только повторить, что он не делает то, что мне нужно: с помощью этих флажков кнопка максимизации отображается, но не включена. – Srv19

+0

Вы правы, я должен был быть более понятным. – Srv19

ответ

2

Я считаю, что вы получите лучшие результаты, создавая свой собственный диалог, но если вы действительно хотите сделать это, один из способов является использование стилей окна (Только Windows, а не cross-plataform).

Мастер класс пример:

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

Вы правы в своем собственном диалоге. – Srv19

+0

Мне удалось быстро запустить мастера с помощью qwizard; однако цена, которую я плачу за нее, - это боль и разочарование в том, что вы не можете (например) изменить положение субтитров на странице – Srv19

2

Кто-то говорит, что это here решил свою проблему:

setWindowFlags(Qt::Window);

+1

С помощью QWizard я могу свернуть и увеличить кнопку с этим флагом, однако кнопка максимизации по-прежнему отключена. – Srv19

1

Это работает для меня:

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

Согласно documentation, вы должны использовать Qt::CustomizeWindowHint, чтобы иметь возможность изменять отдельные намеки на мин/max.

0

У меня есть это:

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

Запуск Windows 10 на моем Dev-поле, Qt 5.5.1, работает для меня.

Одна из моих страниц - это большой QTableWidget, который заканчивается тем, что он похож на листы Excel (какие-то большие страницы для проверки и редактирования на месте большого количества данных). Изменение размера окна и возможность пользователю максимизировать его, если они хотят, облегчают работу с ним, вместо того чтобы постоянно прокручивать его в маленьком диалоговом окне.

Обычно вы бы сказали: если вам нужно такое большое окно, вероятно, это не должно быть в QWizard. Но в этом случае это действительно середина рабочего процесса. Большая «проверить», отредактировать, если необходимо и продолжить страницу, поэтому было бы странно останавливать QWizard раньше, а затем запускать другую после или что-то еще.

 Смежные вопросы

  • Нет связанных вопросов^_^