0
我從其他表單需要的(WorkersList)返回一些值的Qt4,這些表單將調用WorkersList,然後WorkerList將傳回值取決於使呼叫。爲了從WorkersList傳回值給調用者,我要實現爲每個這樣的形式是這樣的方法:如何投射一個指向Qt4表格的指針
僞代碼:
class WorkersList : public QDialog
{
Q_OBJECT
public:
explicit WorkersList(QWidget *parent = 0);
void getWorkersList();
void setWorkerForm(Ui::WorkerMod *workerMod); // The method to pass back to the caller 1
void setWorkerForm2(Ui::WorkerDel *workerDel); // The method to pass back to the caller 2
void setSuspendForm(Ui::WorkerSuspend *worker); // The method to pass back to the caller 3
void setResumeForm(Ui::WorkerResume *worker); // The method to pass back to the caller 4
~WorkersList();
private:
Ui::WorkersList *ui;
Ui::WorkerMod *workerForm;
Ui::WorkerDel *workerForm2;
Ui::WorkerSuspend *workerSuspendForm;
Ui::WorkerResume *workerResumeForm;
QStringList infoWorker;
};
有沒有一種方法,使我有僅實現一個方法,通過呼叫者作爲參數,以及從該方法我提出的投給調用者是這樣的:
class WorkersList : public QDialog
{
Q_OBJECT
public:
explicit WorkersList(QWidget *parent = 0);
void getWorkersList();
void setForm(void *from, int caller);
~WorkersList();
private:
Ui::WorkersList *ui;
Ui::WorkerMod *workerForm;
Ui::WorkerDel *workerForm2;
Ui::WorkerSuspend *workerSuspendForm;
Ui::WorkerResume *workerResumeForm;
QStringList infoWorker;
};
...
void WorkersList::setForm(void *form, int caller)
{
if(caller == 0)
workerForm = (Ui::WorkerMod *)form;
else if(caller == 1)
workerForm2 = (Ui::WorkerDel *)form;
else if(caller == 2)
workerSuspendForm = (Ui::WorkerSuspend *)form;
else if(caller == 3)
workerResumeForm = (Ui::WorkerResume *)form;
}
UPDATE
我嘗試這樣做:
void WorkersList::setForm(QObject *obj, int form)
{
if(form == 0)
{
this->workerAbsenceForm = qobject_cast<Ui::AbsenceAdd *>(obj);
}
if(form == 1)
{
this->workerAbsenceForm3 = qobject_cast<Ui::AbsenceMod >(obj);
}
}
編譯器生成的錯誤:
/usr/local/include/qt4/QtCore/qobject.h: In function 'T qobject_cast(QObject*) [with T = Ui::AbsenceAdd*]':
workerslist.cpp:259: instantiated from here
/usr/local/include/qt4/QtCore/qobject.h:378: error: 'class Ui::AbsenceAdd' has no member named 'qt_check_for_QOBJECT_macro'
/usr/local/include/qt4/QtCore/qobject.h:380: error: 'class Ui::AbsenceAdd' has no member named 'staticMetaObject'
而其他提示我想:
void WorkersList::setForm(void *obj, int form)
{
if(form == 0)
{
this->workerAbsenceForm = (Ui::AbsenceAdd *)obj;
}
if(form == 1)
{
this->workerAbsenceForm3 = (Ui::AbsenceMod *)obj;
}
}
它編譯,但是GUI一直沒有露面向上。