QMessageBox открывается несколько раз с помощью сочетаний клавиш - PullRequest
0 голосов
/ 12 апреля 2019

Я помещаю QMesssageBox в линию с помощью комбинации клавиш CTRL + N (это означает, что новый файл будет открыт).Когда я нажимаю и удерживаю клавишу быстрого вызова, когда объект анимируется.Это проблема пользовательского интерфейса Linux, так как я использую ОС Linux, а затем пробую в других ОС, а этого не происходит, или какие-либо коды, которые я забыл?Спасибо.

1 Ответ

1 голос
/ 12 апреля 2019

Если ваша цель состоит в том, чтобы одновременно отображалось не более одного QMessageBox, вы можете убедиться в этом в своем коде с помощью чего-то вроде этого:

static QMessageBox * openMBox = NULL;

void MyClass :: showMessageBox()
{
   if (openMBox) return;  // don't open a new QMessageBox if we already have one open!

   openMBox = new QMessageBox(args here...);
   connect(openMBox, SIGNAL(buttonClicked(QAbstractButton*)), this, SLOT(userClickedButton(QAbstractButton*)));
   openMBox->show();
}

void MyClass :: userClickedButton(QAbstractButton * button)
{
   if (openMBox)
   {
      // [code to handle button-click result could go here]

      openMBox->deleteLater();
      openMBox = NULL;
   }
}

Обратите внимание, что showMessageBox() фактически создаст новый QMessageBox, только если openMBox НЕДЕЙСТВИТЕЛЕН, то есть только в том случае, если еще нет сообщения.

(Код вызывает deleteLater() в методе userClickedButton() вместо использования оператора удаления, поскольку вполне вероятно, что метод userClickedButton() сам вызывается из метода объекта QMessageBox, поэтому мы не не хочу удалять объект QMessageBox до тех пор, пока он не будет в середине вызова метода)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...