<div dir="ltr">Hi!<br><div><div class="gmail_extra"><br><br><div class="gmail_quote">2013/5/2 David Faure <span dir="ltr"><<a href="mailto:faure@kde.org" target="_blank">faure@kde.org</a>></span><br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<div class="im">On Thursday 02 May 2013 13:07:34 David Faure wrote:<br>
> > BTW, the definition of QInputDialog says that it "provides a simple<br>
> > convenience dialog to get a single value from the user." The future new<br>
> > method getItemList will be able to return more than one value (in a<br>
> > QStringList, for example). It will force me to change the documentation<br>
> > and<br>
> > the definition. We will see, what the reviews say.<br>
<br>
</div>Hold on, Kévin and I just had a look at all the users of getItemList, to see<br>
if it was really used.<br>
<br>
It turns out that it *is* used (in knewstuff, kile, kmymoney and libkcddb),<br>
but in all cases, the application then takes the first one out of the returned<br>
list!<br>
Why don't they just use getItem then? The answer: because getItem shows a<br>
closed combobox, while getItemList shows a much nicer flat list, which shows<br>
multiple items to the user.<br>
<br>
So the real solution is not to add getItemList to Qt, but rather to change<br>
Qt's getItem to use a QListView rather than a QComboBox, in order to improve<br>
usability.<br>
<br>
And meanwhile we can deprecate getItemList in favour of Qt's getItem.<br>
<div class="im"><br></div></blockquote><div><br></div><div>After studying the code, I came to the conclusion that that can't be really done for the following reasons.<br><br></div><div>--QInputDialog has QComboBox as the default widget for item lists. The method for setting the items is not setItems, but setComboBoxItems. After that, a QListView can be set modifying the options.<br>
<br>    QInputDialog dialog;<br>    dialog.setComboBoxItems(list);<br>    dialog.setOptions(QInputDialog::UseListViewForComboBoxItems);<br></div><div><br></div><div>--The parameters of getItem are:<br><br>QString QInputDialog::getItem(QWidget *parent, const QString &title, const QString &label,<br>
                              const QStringList &items, int current, bool editable, bool *ok,<br>                              Qt::WindowFlags flags, Qt::InputMethodHints inputMethodHints)<br><br></div><div>That "editable" is only for QComboBox, not for QListView.<br>
<br></div><div>--The method ensureListView calls ensureComboBox and then sets the model of the comboBox to the listView.<br><br>Q_Q(QInputDialog);<br>    if (!listView) {<br>        ensureComboBox();<br><br>        listView = new QListView(q);<br>
        listView->hide();<br>        listView->setEditTriggers(QAbstractItemView::NoEditTriggers);<br>        listView->setSelectionMode(QAbstractItemView::SingleSelection);<br>        listView->setModel(comboBox->model());<br>
</div><div><br></div><div>The listView depends on the existence of the comboBox.<br><br></div><div>--The listView occupies much more space than the comboBox.<br></div><div><br></div><div>Therefore, I think that it would be best to add a static method called getItemFromListView. What do you think?<br>
<br></div><div>Best regards,<br><br></div><div>David Gil<br></div><div><a href="http://www.hackingastrology.net">www.hackingastrology.net</a><br></div></div></div></div></div>