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

QListView setItemDelegate problem sizeHint and paint not being called

Scheduled Pinned Locked Moved Solved General and Desktop
4 Posts 2 Posters 615 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