1

QComboBoxのエントリに「削除」アイコンを含めたいのですが、マウスプレスイベントをキャッチできません。コンボボックスでそれをキャッチしようとしました。また、QIconクラスを再実装して、そこでマウスプレスをキャッチしようとしました。サイコロはありません。誰かがこれを行う方法を知っていますか?

-D

4

2 に答える 2

0

アイコン上でイベントが発生したかどうかを確認するために、再実装 して と一緒にQComboBox::mousePressEvent(QMouseEvent *e)使用することができます。e.x()QComboBox::iconSize()

これにより、Qt スタイルがコンボ ボックスのラベルとアイコンの位置を切り替えることを決定した場合、ブレークが発生します。それが可能かどうかわかりませんか?

于 2010-04-09T14:56:56.330 に答える
0

コンボ ボックス内にツリー ビューを配置し、ツリーのチェック ボックスがクリックされたときにアクションを実行する必要がある、このようなコードを作成しました。私が最終的に行ったことは、コンボ ボックスにイベント フィルターをインストールして、マウス クリックをインターセプトし、マウス クリックがどこで発生したかを把握してから、アクションを実行することでした。おそらく、アイコンで同じようなことができるでしょう。コードは次のとおりです。

bool TreeComboBox::eventFilter(QObject* object, QEvent* event)
{
  if (event->type() == QEvent::MouseButtonPress || event->type() == QEvent::MouseButtonRelease)
  {
    QMouseEvent* m = static_cast<QMouseEvent*>(event); 
    QModelIndex index = view()->indexAt(m->pos());
    QRect vrect = view()->visualRect(index);

    if(event->type() == QEvent::MouseButtonPress  && 
      (model()->flags(index) & Qt::ItemIsUserCheckable) &&
      vrect.contains(m->pos()))
    {
// Your action here
      ToggleItem(index);
      UpdateSelectionString(); 
    }
    if (view()->rect().contains(m->pos()))
      skipNextHide = true;
  }
  return QComboBox::eventFilter(object, event);
}
于 2010-05-06T18:09:18.560 に答える