QObject *mainwindowpointer;QObject *find_object_recurse(QObject *pobj,QString n){ QObjectList olist; olist=pobj->children(); for(int i=0;i<olist.size();++i) { QObject *currobj; currobj=olist.at(i); qDebug() << "Object " << currobj->objectName(); if(n==currobj->objectName()) return currobj; else return find_object_recurse(currobj,n); } return NULL;}QObject *find_object(QString n){ qDebug() << "Find object " << n << "..."; QObject *findobj; findobj=find_object_recurse(mainwindowpointer,n); // Вызывается рекурсивный поиск if(findobj==NULL) { qDebug() << "Try find unavaiable object " << n; exit(1); } else return findobj;}
int main(int argc, char ** argv){ QApplication app( argc, argv ); mainwindow win; // класс mainwindow - это виджет основного окна mainwindowpointer=&win; // инициализация стартовой точки поиска объектов win.show(); return app.exec();}
find_object("objectname")
(editor)find_object("editorinstance")
int main(int argc, char ** argv){ QApplication app( argc, argv ); mainwindow* win = new mainwindow(app); win->show(); return app.exec();}
qApp->findChild<QAction*>("actionExit")->trigger();
qFindChild(qApp,"editor")->set_text_to_textarea("Main text");
ошибка: нет соответствующей функции для вызова 'qFindChild(QApplication*, const char [7])
template<typename T> inline T findChild(const QString &aName = QString()) const { return qFindChild<T>(this, aName); }
template<typename T>inline T qFindChild(const QObject *o, const QString &name){ return static_cast<T>(qt_qFindChild_helper(o, name, reinterpret_cast<T>(0)->staticMetaObject)); }
return static_cast<T>(qt_qFindChild_helper(o, name, reinterpret_cast<T>(0)->staticMetaObject));
qFindChild(qApp,"editor");
qFindChild<editor>(qApp,"editor");
qFindChild<editor*>(qApp,"editor");[code]
Object tree.NAME _layout, QMainWindowLayout..QTimer..QWidgetAnimator...QTimer.QRubberBand.NAME editor, editor..NAME editbold, QToolButton..NAME editnumericlist, QToolButton..NAME vboxLayout, QVBoxLayout...NAME hboxLayout1, QHBoxLayout
// Поиск объекта editor от корня, проходит нормально editor *edt; edt=qFindChild<editor *>(qApp,"editor"); edt->set_text_to_textarea("Main text"); // Вызов метода найденного объекта, проходит нормально
// Поиск кнопки на объекте editor от корня, не работает QToolButton *btn1; btn1=qFindChild<QToolButton *>(qApp,"editnumericlist"); if(btn1!=0) btn1->setText("From main code for btn1"); else qDebug() << "Not found editnumericlist from qApp";
// Поиск кнопки на объекте editor от объекта editor, не работает QToolButton *btn2; btn2=qFindChild<QToolButton *>(edt,"editnumericlist"); if(btn2!=0) btn2->setText("From main code for btn2"); else qDebug() << "Not found editnumericlist from edt";
editor *edt; edt=qFindChild<editor *>(mainwindowpointer,"editor"); edt->set_text_to_textarea("Main text"); // чЩЪПЧ НЕФПДБ ОБКДЕООПЗП ПВЯЕЛФБ, РТПИПДЙФ ОПТНБМШОП // рПЙУЛ ЛОПРЛЙ ОБ ПВЯЕЛФЕ editor ПФ ЛПТОС, ОЕ ТБВПФБЕФ QToolButton *btn1; btn1=qFindChild<QToolButton *>(mainwindowpointer,"editnumericlist"); if(btn1!=0) btn1->setText("From main code for btn1"); else qDebug() << "Not found editnumericlist from qApp"; // рПЙУЛ ЛОПРЛЙ ОБ ПВЯЕЛФЕ editor ПФ ПВЯЕЛФБ editor, ОЕ ТБВПФБЕФ QToolButton *btn2; btn2=qFindChild<QToolButton *>(mainwindowpointer,"editnumericlist"); if(btn2!=0) btn2->setText("From main code for btn2"); else qDebug() << "Not found editnumericlist from edt";
const char * qPrintable ( const QString & str )
qDebug() << "bla-bla-bla: " << 1 << 1.2;