• 0
_Leader_

مشكلة في الوصول إلى دالة في Header ؟

سؤال

السلام عليكم ورحمة الله وبركاتة

 

في البداية انا جديد على لغة الـ C++ ..

 

عمل برنامج وضيفته انه إذا أتى الماوس(مؤشر الفأرة) على زر يقوم هذا الزر بالإنتقال(pos) إلى الأعلى قليلاً وإذا ابتعد الماوس عن الزر يرجع الزر إلى مكانه السابق

وقمت بإنشاء الكود من خلال QT Creator .. قمت بالإستعانه بـ Thread ..

 

هذه ملفات المشروع :

UwuUNg.jpg

 

هذه الأكود لكل ملف عدا ملف الـui :

 

widget.h

#ifndef WIDGET_H#define WIDGET_H#include <QWidget>#include <mythread.h>namespace Ui {class Widget;}class Widget : public QWidget{    Q_OBJECTpublic:    explicit Widget(QWidget *parent = 0);    ~Widget();    bool buttonsUnderMuse();    void movebuttonToUp();    void movebuttonToDown();private:    Ui::Widget *ui;};#endif // WIDGET_H

widget.cpp

#include "widget.h"#include "ui_widget.h"#include <QPropertyAnimation>Widget::Widget(QWidget *parent) :    QWidget(parent),    ui(new Ui::Widget){    ui->setupUi(this);}Widget::~Widget(){    delete ui;}bool Widget::buttonsUnderMuse(){    return ui->pushButton->underMouse();}void Widget::movebuttonToUp(){    QPropertyAnimation *B_one = new QPropertyAnimation(ui->pushButton, "pos");    B_one->setDuration(1200);    B_one->setEasingCurve(QEasingCurve::InBack);    B_one->setStartValue(QPoint(0,260));    B_one->setEndValue(QPoint(0,200));    B_one->start();}void Widget::movebuttonToDown(){    QPropertyAnimation *B_one = new QPropertyAnimation(ui->pushButton, "pos");    B_one->setDuration(1200);    B_one->setEasingCurve(QEasingCurve::InBack);    B_one->setStartValue(QPoint(0,200));    B_one->setEndValue(QPoint(0,260));    B_one->start();}

وهذا الملفات الخاصة بالـ Thread :

mythread.h

#ifndef MYTHREAD_H#define MYTHREAD_H#include <QThread>#include <widget.h>class myThread : public QThread{    Q_OBJECTpublic:    explicit myThread(QObject *parent = 0);    void run();    bool getBottnUnderMuse();signals:public slots:};#endif // MYTHREAD_H

mythread.cpp

#include "mythread.h"#include "widget.h"myThread::myThread(QObject *parent) :    QThread(parent){}void myThread::run(){    while(true)    {        if(getBottnUnderMuse() == true)        {            MovebuttonToUp;         // I get error here ... error: 'MovebuttonToUp' was not declared in this scope        }        else        {            movebuttonToDow;         // I get error here ... error: 'movebuttonToDow' was not declared in this scope         }        msleep(200);    }}bool myThread::getBottnUnderMuse(){    return buttonsUnderMuse;        // I get error here ... error: 'buttonsUnderMuse' was not declared in this scope} 

-------------------------------

 

المشكلة التي واجهتني هي اني لا استطيع الوصول من خلال "mythread.cpp" إلى الدوال الموجودة في ملف الهيدرا "widget.h" رغم اني وضعت ملف الهيدرا "widget.h" ضمن الـ include ..

اعتقد ان المشكلة واضحه

 

وكذلك نقطة آخرى .. ربما اكون قد عملت هذا البرنامج بطريقة معقدة او ما شابه مثلاً .. البرنامج لا يحتاج إلى Thread بينما قمت بإستعمال ثريد لعمل مثل هذه الوظيفة .. لذلك لا مانع من طريق اخرى

 

وشكراً لحسن القراءة

1

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه

1 إجابات على هذا السؤال .

  • 0

وضعك للملف الرأسي لايعني أنه يمكنك يمكنك الوصول لوظائف الفئة Widget بدون أن تنشئ أو تحصل على كائن من Widget، وطريقة استخدام الوظائف Widget ـ MovebuttonToUp و MovebuttonToUp وbuttonsUnderMuse ـ في myThread غير صحيحة، فينقصك اسم كائن وقوسين (). أيضاً لم تقم بإنشاء كائن من myThread.

 

ممكن أن تقرأ لك درس في البرمجة الكائنية في c++، هذي أخطاء في الأساسيات.

2

شارك هذا الرد


رابط المشاركة
شارك الرد من خلال المواقع ادناه
زوار
This topic is now closed to further replies.

  • يستعرض القسم حالياً   0 members

    لا يوجد أعضاء مسجلين يشاهدون هذه الصفحة .