Название: Как узнать к какому классу относится QWidget* Отправлено: igorko от Июнь 15, 2006, 21:52 Здравствуйте все!
Хочу назаписывать в QList<QWidget*> указателей на разные widget-ы (QLineEdit-ы, QTextEdit-ы, QComboBox-ы, ...), а потом вызывать методы соответствующие для классов. Например для lineEdit->setText(...) для textEdit->setPlainText(...) для comboBox->addItem(...) Как это правильно делать? Спасибо! Название: Re: Как узнать к какому классу относится QWidget* Отправлено: QCasper от Июнь 15, 2006, 23:10 Цитата: "igorko" Здравствуйте все! Хочу назаписывать в QList<QWidget*> указателей на разные widget-ы (QLineEdit-ы, QTextEdit-ы, QComboBox-ы, ...), а потом вызывать методы соответствующие для классов. Например для lineEdit->setText(...) для textEdit->setPlainText(...) для comboBox->addItem(...) Как это правильно делать? Спасибо! ну типа: Код: QList<QWidget*> lw; если ты конечно твердо уверен, что нулевой это QLineEdit и в том духе Название: Как узнать к какому классу относится QWidget* Отправлено: AlexKiriukha от Июнь 16, 2006, 01:29 Сам не пробовал, но нашел в документации к 4.1.0 такую информацию:
Цитировать bool QObject::inherits ( const char * className ) const Returns true if this object is an instance of a class that inherits className or a QObject subclass that inherits className; otherwise returns false. A class is considered to inherit itself. Example: QTimer *timer = new QTimer; // QTimer inherits QObject timer->inherits("QTimer"); // returns true timer->inherits("QObject"); // returns true timer->inherits("QAbstractButton"); // returns false // QLayout inherits QObject and QLayoutItem QLayout *layout = new QLayout; layout->inherits("QObject"); // returns true layout->inherits("QLayoutItem"); // returns false (QLayoutItem is not a QObject.) Consider using qobject_cast<Type *>(object) instead. The method is both faster and safer. See also metaObject() and qobject_cast(). Название: Как узнать к какому классу относится QWidget* Отправлено: BaltikS от Июнь 16, 2006, 06:27 А есть ещё такая штука как className()
Название: Как узнать к какому классу относится QWidget* Отправлено: igorko от Июнь 16, 2006, 11:42 Спасибо всем!
2 QCasper: В том то и дело что совсем не уверен 2 BaltikS: className - это из Qt 3 Support Members for QObject и не рекомендуется использовать в новом коде 2 AlexKiriukha: Ваша цитата походит лучше всего И ключевая фраза из цитаты: "A class is considered to inherit itself." Буду пробовать такое: if (widgets.at(i)->inherits("QLineEdit") ) { работаем как с QLineEdit; } else if (widgets.at(i)->inherits("QTextEdit") ) { работаем как с QTextEdit; } ... Надеюсь будет работать... Еще раз СПАСИБО! Название: Как узнать к какому классу относится QWidget* Отправлено: Asaphus_Expansus от Июнь 16, 2006, 13:14 void CMainWindow::widgetActivated()
{ QObject* oPtr = sender(); // Line Edit - get QString value and save it into configuration QLineEdit* le = qobject_cast<QLineEdit *>(oPtr); if( le ) dataObject->saveValue(le->text()); // Combo Box - get QString value and save it into configuration QComboBox* cb = qobject_cast<QComboBox *>(oPtr); if( cb ) dataObject->saveValue(cb->currentText()); и т.д. } Название: Как узнать к какому классу относится QWidget* Отправлено: igorko от Июнь 16, 2006, 15:16 Дельный совет Asaphus.
Thanks a million! Название: Как узнать к какому классу относится QWidget* Отправлено: AlexKiriukha от Июнь 19, 2006, 11:48 Насколько я знаю, qobject_cast появился в Qt > 3. Так что если используется четверка - то это более удобный вариант.
Название: Как узнать к какому классу относится QWidget* Отправлено: RSS от Июнь 20, 2006, 17:11 Есть традиционный способ для C++ - использовать dynamic_cast, который возвращает NULL, если преобразование невозможно. Для компилятора MSVC++ надо явно включить опцию (/GR). Остальные понимают так.
Т.е. QLineEdit* le = dynamic_cast<QLineEdit *>(oPtr); if( le ) dataObject->saveValue(le->text()); Название: Как узнать к какому классу относится QWidget* Отправлено: Gryz от Август 04, 2006, 11:18 Цитата: "igorko" Спасибо всем! 2 BaltikS: className - это из Qt 3 Support Members for QObject и не рекомендуется использовать в новом коде Это неправда. obj->metaObject()->className() Так работает добавлено спустя 1 минуту: Цитата: "AlexKiriukha" Насколько я знаю, qobject_cast появился в Qt > 3. Так что если используется четверка - то это более удобный вариант. Да. А в 3 вместо этого есть qt_cast |