ضغط الماوس لعدة QGraphicsItem's في QT
-
25-09-2019 - |
سؤال
لديّ مصفوفة من QGraphicsItem's في QGraphicsScene وعندما أنقر على عنصر يغير لونه. يتم تنفيذ هذا مع mousePressEvent()
. أريد أن أكون قادرًا على النقر والاحتفاظ ثم تحريك المؤشر عبر QGraphicsItem الأخرى وتغيير لونها أيضًا ، وبالتالي تفعيلهم mousePressEvent()
.
المشكلة هي أنه نظرًا للاستيلاء على الماوس للعنصر الأول ، نقر "الاحتفاظ" بجميع الأحداث و hoverEnterEvent()
لا يتم تشغيله. حاولت إضافة ungrabMouse()
ل mousePressEvent()
لكن هذا لم يساعد.
أعتقد أن أحد الحلول سيكون لجعل السحب القابل للتسرب من QGraphicSitem واستخدام وظائف السحب والإسقاط QT لذلك. في الواقع لدي هذا:
void dragEnterEvent(QGraphicsSceneDragDropEvent *event)
{
changeColor();
}
وعندما أسحب بعض النص من التطبيق على العناصر ، فإنه يعمل كما أريد ولكن ليس عندما "أسحب" QGrahphicSitem.
فهل الحل الوحيد لجعل QGraphicsItem قابل للسحب ليكون قادرًا على تشغيل الأحداث أثناء التحويل فوقها باستخدام زر الماوس النقر؟
المحلول 2
لقد وجدت حلاً بنفسي. أضفت جميع QGraphicsRectItem's إلى QGraphicsItemGroup ونفذت الأحداث لهذه المجموعة. في المجموعة :: MousemoveEvent () أتحقق من موقف المؤشر وتطبيق الحدث على أطفاله. تبدو هكذا:
void Group::mouseMoveEvent ( QGraphicsSceneMouseEvent * event )
{
if (boundingRect().adjusted(0,0,-1,-1).contains(event->pos()))
{
if (CellCoordinate(event->pos()) != lastChangedCell_) {
lastChangedCell_ = CellCoordinate(event->pos());
modifyCell(CellCoordinate(event->pos()));
}
}
}
إذا كان لديك نفس المشكلة وتحتاج إلى مزيد من المعلومات ، فلا تتردد في الاتصال بي.
نصائح أخرى
أوصي باستخدام mouseMoveEvent()
.
تحرير: mouseMoveEvent()
من الوالد QGraphicsView
.