On 17.04.2011 16:01, Richard Heck wrote: > On 04/17/2011 06:46 AM, Vincent van Ravesteijn wrote: >> On 13-4-2011 16:26, venom00 wrote: >> >>> + // Try to cast to the most common widgets and >>> looks in it's content by each >>> + // It's bad OOP, it would be nice to have a >>> QWidget::toString() overloaded by >>> + // each widget, but this would require to >>> change Qt or subclass each widget. >>> + // Note that we have to ignore the amperstand >>> symbol >>> + if (QAbstractButton * button = >>> qobject_cast<QAbstractButton *>(children[child_index])) { >>> + widget_matches = (new >>> QString(button->text()))->replace('&', "") >>> + .contains(search, >>> Qt::CaseInsensitive); >>> + >>> + } else if (QGroupBox * group_box = >>> qobject_cast<QGroupBox *>(children[child_index])) { >>> + widget_matches = (new >>> QString(group_box->title()))->replace('&', "") >>> + .contains(search, >>> Qt::CaseInsensitive); >>> + >>> + } else if (QLabel * label = qobject_cast<QLabel >>> *>(children[child_index])) { >>> + widget_matches = (new >>> QString(label->text()))->replace('&', "") >>> + .contains(search, >>> Qt::CaseInsensitive); >>> + >>> + } else if (QLineEdit * line_edit = >>> qobject_cast<QLineEdit *>(children[child_index])) { >>> + widget_matches = (new >>> QString(line_edit->text()))->replace('&', "") >>> + .contains(search, >>> Qt::CaseInsensitive); >>> + >>> + } else if (QListWidget * list_widget = >>> qobject_cast<QListWidget *>(children[child_index])) { >>> + widget_matches = >>> (list_widget->findItems(search, Qt::MatchContains)).count() != 0; >>> + >>> + } else if (QTreeWidget * tree_view = >>> qobject_cast<QTreeWidget *>(children[child_index])) { >>> + widget_matches = >>> (tree_view->findItems(search, Qt::MatchContains)).count() != 0; >>> + >>> + } else if (QComboBox * combo_box = >>> qobject_cast<QComboBox *>(children[child_index])) { >>> + widget_matches = >>> (combo_box->findText(search, Qt::MatchContains)) != -1; >>> + >>> + } else { >>> + continue; >>> + } >>> + >> >> This is really ugly, but I can't think of how to solve it right now. >> > Would using typeid help a little bit? >
The casts are needed: button->text()))->replace('&', "") group_box->title()))->replace('&', "") label->text()))->replace('&', "") line_edit->text()))->replace('&', "") list_widget->findItems(search, Qt::MatchContains)).count() != 0; tree_view->findItems(search, Qt::MatchContains)).count() != 0; combo_box->findText(search, Qt::MatchContains)) != -1; Peter