Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. QListView setItemDelegate problem sizeHint and paint not being called
Forum Updated to NodeBB v4.3 + New Features

QListView setItemDelegate problem sizeHint and paint not being called

Scheduled Pinned Locked Moved Solved General and Desktop
4 Posts 2 Posters 524 Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • S Offline
    S Offline
    steveq
    wrote on last edited by
    #1

    Hey All,

    I am trying to implement this:
    https://forum.qt.io/topic/91480/implementing-chat-type-listview-with-text-bubbles

    If I do this, it works a treat::

    #include "mainwindow.h"
    #include "listviewdelegate.h"
    #include <QApplication>
    
    #include <QtWidgets>
    
    int main(int argc, char *argv[])
    {
    	QApplication a(argc, argv);
    //	MainWindow w;
    //	w.show();
    
    	// create some data and put it in a model
    	QStandardItemModel mymodel;
    	QStandardItem *item1 = new QStandardItem("This is item one");
    	item1->setData("Incoming", Qt::UserRole + 1);
    	mymodel.appendRow(item1);
    	QStandardItem *item2 = new QStandardItem("This is item <b>two</b>, it is a very long item, but it's not the item's fault, it is me typing all this text.");
    	item2->setData("Outgoing", Qt::UserRole + 1);
    	mymodel.appendRow(item2);
    	QStandardItem *item3 = new QStandardItem("This is the third item");
    	item3->setData("Incoming", Qt::UserRole + 1);
    	mymodel.appendRow(item3);
    
    	// create a view and set our data
    	QListView listview;
    	listview.setResizeMode(QListView::Adjust);
    	listview.setWordWrap(true);
    	listview.setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
    	listview.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    	listview.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    	listview.setModel(&mymodel);
    	listview.setMinimumSize(200,350);
    
    	// NOW tell the view to rely on out custom delegate for drawing
    	listview.setItemDelegate(new ListViewDelegate());
    
    	// show it
    	listview.show();
    
    	return a.exec();
    }
    

    However I don't want to use it this way, I want to uncomment the MainWindow lines:

    #include "mainwindow.h"
    #include "listviewdelegate.h"
    #include <QApplication>
    
    #include <QtWidgets>
    
    int main(int argc, char *argv[])
    {
    	QApplication a(argc, argv);
    	MainWindow w;
    	w.show();
    
    	// create some data and put it in a model
    //	QStandardItemModel mymodel;
    //	QStandardItem *item1 = new QStandardItem("This is item one");
    //	item1->setData("Incoming", Qt::UserRole + 1);
    //	mymodel.appendRow(item1);
    //	QStandardItem *item2 = new QStandardItem("This is item <b>two</b>, it is a very long item, but it's not the item's fault, it is me typing all this text.");
    //	item2->setData("Outgoing", Qt::UserRole + 1);
    //	mymodel.appendRow(item2);
    //	QStandardItem *item3 = new QStandardItem("This is the third item");
    //	item3->setData("Incoming", Qt::UserRole + 1);
    //	mymodel.appendRow(item3);
    
    //	// create a view and set our data
    //	QListView listview;
    //	listview.setResizeMode(QListView::Adjust);
    //	listview.setWordWrap(true);
    //	listview.setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
    //	listview.setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    //	listview.setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    //	listview.setModel(&mymodel);
    //	listview.setMinimumSize(200,350);
    
    //	// NOW tell the view to rely on out custom delegate for drawing
    //	listview.setItemDelegate(new ListViewDelegate());
    
    //	// show it
    //	listview.show();
    
    	return a.exec();
    }
    

    And then do this in the MainWindow class creation:

    #include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include "listviewdelegate.h"
    
    #include <QStandardItemModel>
    #include <QListView>
    
    MainWindow::MainWindow(QWidget *parent) :
    	QMainWindow(parent),
    	ui(new Ui::MainWindow)
    {
    	ui->setupUi(this);
    
    	QStandardItemModel mymodel;
    	QStandardItem *item1 = new QStandardItem("This is item one");
    	item1->setData("Incoming", Qt::UserRole + 1);
    	mymodel.appendRow(item1);
    	QStandardItem *item2 = new QStandardItem("This is item <b>two</b>, it is a very long item, but it's not the item's fault, it is me typing all this text.");
    	item2->setData("Outgoing", Qt::UserRole + 1);
    	mymodel.appendRow(item2);
    	QStandardItem *item3 = new QStandardItem("This is the third item");
    	item3->setData("Incoming", Qt::UserRole + 1);
    	mymodel.appendRow(item3);
    
    	// create a view and set our data
    	ui->listview->setResizeMode(QListView::Adjust);
    	ui->listview->setWordWrap(true);
    	ui->listview->setVerticalScrollMode(QAbstractItemView::ScrollPerPixel);
    	ui->listview->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    	ui->listview->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
    	ui->listview->setModel(&mymodel);
    	ui->listview->setMinimumSize(200,350);
    
    	// NOW tell the view to rely on out custom delegate for drawing
    	ui->listview->setItemDelegate(new ListViewDelegate);
    }
    
    MainWindow::~MainWindow()
    {
    	delete ui;
    }
    

    That is, I want to use the QListView I've created in QDesigner, but if I do this, sizeHint and paint never get called and I just get a blank QListView.

    Can someone help me please?

    Many thanks,

    Steve Q. :-)

    1 Reply Last reply
    0
    • Christian EhrlicherC Offline
      Christian EhrlicherC Offline
      Christian Ehrlicher
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @steveq said in QListView setItemDelegate problem sizeHint and paint not being called:

      QStandardItemModel mymodel;

      C++ basics - how long do you think does this object lives?

      Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
      Visit the Qt Academy at https://academy.qt.io/catalog

      1 Reply Last reply
      2
      • S Offline
        S Offline
        steveq
        wrote on last edited by
        #3

        Oh dear... that is a little embarrassing.

        Can't believe I looked over this countless times.

        Sorry to waste your time... thanks @Christian-Ehrlicher

        1 Reply Last reply
        0
        • Christian EhrlicherC Offline
          Christian EhrlicherC Offline
          Christian Ehrlicher
          Lifetime Qt Champion
          wrote on last edited by
          #4

          No problem, nice to get it solved :)

          Qt Online Installer direct download: https://download.qt.io/official_releases/online_installers/
          Visit the Qt Academy at https://academy.qt.io/catalog

          1 Reply Last reply
          0

          • Login

          • Login or register to search.
          • First post
            Last post
          0
          • Categories
          • Recent
          • Tags
          • Popular
          • Users
          • Groups
          • Search
          • Get Qt Extensions
          • Unsolved