Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

Stylesheets and sizeFromContents



  • I am trying to get a better understanding of the behavior I describe below.

    I sub-classed QWidget to create a custom widget. For the sake of this question assume all that I did was add a label.

    class MyWidget : public QWidget
    {
        Q_OBJECT
        
        public:
            MyWidget();
            ~MyWidget();
        private:
            QLabel myLabel;
    }
    
    MyWidget::MyWidget(QWidget *parent = 0) :
     Qwidget(parent),
    myLabel(new QLabel("",this)
    {
    }
    

    ....

    I have stylesheet loaded into the application that specifies the minimum and maxiume size of MyWidget and the QLabel.

    Example:

    MyWidget,
    MyWidget QLabel {
    min-height: 65;
    max-height: 65:
    min-width: 200;
    max-width: 200;
    }

    I am trying to draw this inside a listview with a custom delegate but the sizeHint function that I wrote does not behave as I would expect.

    QSize MyItemDelegate::sizeHint(const QStyleOptionViewItem &option,
                   const QModelIndex &index) const
    {
        qDebug() << "sizehint" << endl;
        if(index.data().canConvert<MyModelItem>())
        {
            MyModelItem item = qvariant_cast<MyModelItem>(index.data());
            qDebug() << QApplication::style()->sizeFromContents(QStyle::CT_ItemViewItem, &option, QSize(),  item.getItem()) << endl
            
            return style->sizeFromContents(QStyle::CT_ItemViewItem, &option, QSize(),  item.getItem());
        }
        else
        {
            
            qDebug() << "Delegate...something broken" << QStyledItemDelegate::sizeHint( option, index) << endl;
            return QStyledItemDelegate::sizeHint( option, index);
        }
    
    }
    

    MyModelItem is just structure that has pointer to a MyWidget object.

    This returns a QSize of 0,37. I am trying to figure out why it is not returning the size that I specified in the stylesheet.



  • I'm not sure if this is going to fix your problem, but I think things like min-width, max-width, etc are supposed to end with px such as 65px; and 200px;. Also, you might want to post this in the General Desktop category. You posted this in Language Bindings which gets a lot less views than General Desktop. But you aren't using PyQt, PySide, etc.


Log in to reply