سؤال

أرغب في تضمين أيقونة "إزالة" على إدخالات في QCombobox ، لكنني أواجه مشكلة في اللحاق بالحدث الصحفي للماوس. لقد حاولت التقاطها على combobox ، وحاولت إعادة تعويض فئة QICON للقبض على المسيرة هناك. لا النرد. لا أحد يعرف كيفية القيام بذلك؟

هل كانت مفيدة؟

المحلول

لقد كتبت رمزًا مثل هذا قليلاً ، حيث أردت وضع عرض شجرة داخل مربع التحرير والسرد وكنت بحاجة إلى اتخاذ إجراء عندما تم النقر فوق خانة الاختيار على الشجرة. ما انتهى بي الأمر هو تثبيت مرشح حدث على مربع التحرير والسرد لاعتراض نقرات الماوس ، واكتشف أين كانت النقرات الماوس تحدث ، ثم اتخاذ إجراء. ربما يمكنك أن تفعل نفس الشيء مع الرمز الخاص بك. هنا هو الرمز:

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

نصائح أخرى

ربما يمكنك إعادة التنفيذ QComboBox::mousePressEvent(QMouseEvent *e) والاستخدام e.x() معا مع QComboBox::iconSize() للعثور على ما إذا كان الحدث قد حدث على الرمز.

سيؤدي ذلك إلى إيقاف تشغيله إذا قرر نمط QT تبديل الملصقات وموضع الرمز في مربعات التحرير والسرد. لا أعرف ما إذا كان هذا ممكنا؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top