الرسم الخطي اليد الحرة في صورة باستخدام كيو تي [مغلقة]

StackOverflow https://stackoverflow.com//questions/10701357

  •  13-12-2019
  •  | 
  •  

سؤال

أريد إنشاء حدث عندما تم الضغط على زر البرنامج يجب أن تسمح لرسم خطوط اليد الحرة باستخدام مؤشر الماوس في صورة.حاليا أنا في المرحلة حيث يمكنني عرض ألبوم الصور في نافذة علامة التبويب.يمكن لأي شخص أن يساعد في ذلك من خلال تقديم بعض المبادئ التوجيهية أو القرائن???

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

المحلول

هنا مثال على كيفية الطلاء مع حركات الماوس:

http://qt-project.org/doc/qt-4.8/widgets-scribble.html

نصائح أخرى

سؤالك واسع جدا ، أخشى.أنصح بإجراء بعض الأبحاث حول ما تريد تحقيقه ، وربما النظر في كيفية حل الآخرين لنفس المشكلة.ستحصل على أقصى استفادة من ذلك عن طريق استخدامه أكثر كمورد للإجابة على أسئلة محددة.

هكذا قال, وهنا بضعة أشياء يمكن أن ننظر في:

QGraphicsScene:سطح التي يمكن أن تحتوي على أعداد كبيرة من الكائنات الرسومات د 2 (أي.الخطوط التي سوف تسمح للمستخدم لرسم)

QGraphicsSceneMouseEvent:الحدث تحتاج إلى التقاط والتعامل معها من أجل الحصول على مدخلات من الماوس إلى المشهد الخاص بك.يمكنك التعامل مع هذا الحدث إما عن طريق إنشاء فئة فرعية من QGraphicsScene وإعادة التنفيذ QGraphicsScene::mouseMoveEvent, ، أو بواسطة تثبيت مرشح الحدث على المشهد الخاص بك.

إذا كنت تعرض الصورة باستخدام كويدجيت بسيط (أعني ، ليس شيئا معقدا مثل غرفيكسسين) ، مجرد إعادة تنفيذ QWidget::mouseMoveEvent(QMouseEvent *e).عندما يضغط المستخدم على زر الماوس (e->buttons() != 0) هل يمكن أن تفعل لوحة داخل الصورة.

لنفترض أن لديك صورتك في عضو QImage img وتتبع موضع المؤشر السابق في QPoint cursorLast.دعونا نفترض أيضا أن تقوم بعرض الصورة باستخدام شيء مثل كلابيل ، حيث يمكنك فقط تعيين الصورة في الممتلكات.ثم هل يمكن أن تفعل هذه اللوحة مثل هذا:

void MyWidget::mouseMoveEvent(QMouseEvent *e) {
    if(e->buttons()) {
        if(!cursorLast.isNull()) {
            QPainter p(&img); // and set pen
            p.drawLine(cursorLast, e->pos());
            p.end();
            setImage(img); // update image in your view
        }
        cursorLast = e->pos();
    }
}

لا تنسى إعادة تعيين cursorLast عضو عندما يحصل على الافراج عن الماوس:

void MyWidget::mouseReleaseEvent(QMouseEvent *e) {
    cursorLast = QPoint(); // reset
}

لاحظ أن هذا الرمز لم يتم اختباره وربما استخدمت أسماء خاطئة قليلا في الأساليب ، ولكن سيكون من السهل العثور على الأسماء الحقيقية.

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