0

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
   }
}

注: 残念ながら、十分な担当者がいないため、まだカーソルの写真を投稿できません。

4

2 に答える 2

0

以下は、ダイアログ コードを 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
   }
}

カーソルが正しくデフォルトに戻りました。

于 2013-05-02T20:18:47.810 に答える