I have a Qt-Windows applicastion.

I have a non-editable QComboBox subclass with a custom QAbstractListModel 
driving it. I have a simple QListView subclass acting as the view for the 
combobox.

I need the list view (NOT the combo) to resize horizontally to fit the widest 
string in the list instead of being fixed to the width of the combo button.

Previously, I used a QListWidget subclass as a the view and overrode the 
sizeHint():

struct ComboListWidget : public QListWidget
{
                ComboListWidget(QWidget *parent = 0)
                :
                                QListWidget(parent)
                {}

                virtual QSize sizeHint() const
                {
                                QFontMetrics fm(font());

                                int maxWidth = 0;
                                for (int i=0; i < count(); ++i)
                                {
                                                QListWidgetItem *it = item(i);
                                                const QSize sz = 
fm.size(Qt::TextSingleLine, it->text());
                                                maxWidth = qMin(qMax(maxWidth, 
sz.width()), MaxListWidth);
                                }

                                QMargins mar = contentsMargins();
                                int hpad = (mar.left() + mar.right()) * 2;

                                return QSize(maxWidth + hpad, 0);
                }
};

But this code was really expensive, particularly if the list contains dozens of 
entries.

As I'm now using a custom model, I tried to implement a custom SizeHintRole:

if (role == Qt::SizeHintRole)
{
                const QString &text = data(index, 
Qt::DisplayRole).value<QString>();

                QFontMetrics fontMetrics(data(index, 
Qt::FontRole).value<QFont>());
                //QSize size(fontMetrics.width(text), fontMetrics.height());
                return QSize(1000,20); // ignores the 1000
                //return size;
}

But the list view only uses the vertical size and I nothing I do seems to work. 
If I set the list view to a fixed width in it's constructor, it breaks the 
selection-highlight such that it only extends as far as the combobox's width.

This only seems to be a problem on Windows. On OSX, the list view expands 
correctly with no additional code.

There must be a way to do this - please help!

________________________________
This email is confidential. It may also be privileged or otherwise protected by 
work product immunity or other legal rules. Errors and Omissions Excluded. If 
you are not the intended recipient please notify the sender. Please delete the 
message from all places in your computer where it is stored. You should not 
copy the email or use it for any purpose or disclose its contents to any other 
person. To do so may be unlawful. Email is an informal means of communicating 
and may be subject to data corruption accidentally or deliberately. For this 
reason it is inappropriate to rely on advice contained in an email without 
obtaining written confirmation of it first.

FXhome Limited is a limited company registered in England and Wales. Registered 
number: 04172812. Registered office: Suite 4 St Giles House, 27 St Giles 
Street, Norwich, Norfolk, NR2 1JN, U.K.
_______________________________________________
Interest mailing list
Interest@qt-project.org
http://lists.qt-project.org/mailman/listinfo/interest

Reply via email to