Qt Focus продвигается при отмене максимизации QMdiSubwindow с QGridLayout - PullRequest
0 голосов
/ 22 сентября 2019

Каждый раз, когда я раскрываю окно QMdiSubwindow, фокус-виджет продвигается вперед.Как я могу предотвратить продвижение виджета фокуса в QGridLayout при отмене максимизации QMdiSubwindow?Это было протестировано с QMake 3.1 и QT 5.9.5

tl; dr Я пытаюсь написать приложение Mdi, в котором один QMdiSubwindow содержит кнопки для запуска других QMdiSubwindows.Окно QMdiSubwindow, имеющее кнопки, перемещает фокусированную кнопку, когда я ее максимизирую, что нежелательно.

enter image description here enter image description here

// tabtest.h
#include <QtGui>
#include <QMainWindow>
class QMdiArea;

class MainWindow : public QMainWindow {
  Q_OBJECT
public:
  MainWindow();
private:
  QMdiArea* mdiArea;
};

// tabtest.cpp
#include <QApplication>
#include <QPushButton>
#include <QMdiArea>
#include <QMdiSubWindow>
#include <QScrollArea>
#include <QGridLayout>

#include "tabtest.h"

MainWindow::MainWindow() {
  mdiArea = new QMdiArea;
  setCentralWidget(mdiArea);

  QScrollArea* area = new QScrollArea;
  area->setWidgetResizable(true);

  QWidget* client = new QWidget;
  area->setWidget(client);

  QGridLayout* layout = new QGridLayout();
  client->setLayout(layout);

  for (int i=0; i<300; ++i) {
    char buffer[20];
    sprintf(buffer, "  %d  ", i);
    QPushButton* button = new QPushButton(buffer);
    button->setStyleSheet("QPushButton:focus { background-color: DarkGray; }");
    layout->addWidget(button, i/5, i%5);
    if (i == 1)
      button->setFocus();
  }

  QMdiSubWindow* subWindow = mdiArea->addSubWindow(area);
  subWindow->setAttribute(Qt::WA_DeleteOnClose);
  subWindow->showMaximized();

  subWindow->show();
}

int main(int argc, char *argv[]) {
    QApplication app(argc, argv);
    MainWindow mainWin;
    mainWin.show();
    return app.exec();
}

qmake -project "QT += widgets" "QT += printsupport" "CONFIG += debug"
qmake
make
...