【问题标题】:Qt mouse cursor does not change when opening dialog after drop event放置事件后打开对话框时Qt鼠标光标不会改变
【发布时间】:2014-09-02 22:30:11
【问题描述】:

我正在使用 Qt for C++ 并且有一个 dropEvent 可以打开一个对话框。但是,当对话框打开时,鼠标光标会保留放置光标,而不是返回到通用默认光标。这是一种奇怪的行为,尤其是在单击对话框上的按钮时。下面是我的 dropEvent 代码的大致轮廓。

MyClass::dropEvent(QDropEvent *event)
{
   //do some stuff
   event->accept();

   MyDialog::runDialog(arg1, arg2, arg3);
}

MyDialog::runDialog(arg1, arg2, arg3)
{
   MyDialog dlg(arg1, arg2, arg3);

   if(dlg.exec() == QDialog::Accepted)
   {
      //do some stuff
   }
}

注意:很遗憾,我还不能发布游标的图片,因为我没有足够的代表。

【问题讨论】:

  • 我相信你应该调用 event->acceptAction();而不是 event->accept();
  • 不,Qt 允许 event->accept() 或 event->acceptProposedAction();在这种情况下 event->accept() 是正确的选项。

标签: c++ drag-and-drop qt4


【解决方案1】:

以下是我正在使用的解决方法,因为将对话框代码从 exec 更改为 show 是不可行的。

MyClass::MyClass()
{
   //qRegisterMetaType was necessary for two of my parameters.
   qRegisterMetaType<arg1>("arg1");
   qRegisterMetaType<arg2>("arg2");
   connect(this, SIGNAL(signalDialog(arg1, arg2, arg3)), this, SLOT(runDialog(arg1, arg2, arg3)), Qt::QueuedConnection);
}

MyClass::dropEvent(QDropEvent *event)
{
   //do some stuff
   event->accept();

   emit signalDialog(arg1, arg2, arg3);
}

MyClass::runDialog(arg1, arg2, arg3)
{
  MyDialog::runDialog(arg1, arg2, arg3);
}

MyDialog::runDialog(arg1, arg2, arg3)
{
   MyDialog dlg(arg1, arg2, arg3);

   if(dlg.exec() == QDialog::Accepted)
   {
      //do some stuff
   }
}

光标已正确更改回默认值。

【讨论】:

    【解决方案2】:

    我愿意:

    QApplication::restoreOverrideCursor()
    

    【讨论】:

      猜你喜欢
      • 2018-06-10
      • 1970-01-01
      • 1970-01-01
      • 2018-12-01
      • 2012-08-22
      • 1970-01-01
      • 2012-03-23
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多