QMessageBox 使用快捷键打开多次

Posted

技术标签:

【中文标题】QMessageBox 使用快捷键打开多次【英文标题】:QMessageBox open multiple times using shortcutkeys 【发布时间】:2019-04-12 05:39:36 【问题描述】:

我将 QMesssageBox 与 CTRL + N 的快捷键内联(这意味着将打开新文件)。当我在对象动画时按住快捷键。是 Linux 的 UI 问题,因为我使用的是 Linux 操作系统,然后我尝试在其他操作系统中但它没有发生,或者我忘记了任何代码? 谢谢。

【问题讨论】:

提供minimal reproducible example 【参考方案1】:

如果您的目标是一次最多出现一个 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() 只有在 openMBox 为 NULL 时才会实际创建一个新的 QMessageBox,也就是说,只有在尚不存在消息框的情况下。

(代码在userClickedButton() 方法中调用deleteLater(),而不是使用delete 运算符,因为userClickedButton() 方法本身很可能是从QMessageBox 对象的方法中调用的,因此我们不这样做'不想删除 QMessageBox 对象,直到它不在方法调用的中间)

【讨论】:

感谢您的想法。我从你提供的代码中得到了一些想法。

以上是关于QMessageBox 使用快捷键打开多次的主要内容,如果未能解决你的问题,请参考以下文章

Qt中的标准对话框之QMessageBox

QMessageBox类学习:

QMessageBox的用法

如何使用标志修改创建 QMessageBox 的子类?

QMessageBox::information 自定义按钮

QMessageBox::information 自定义按钮