Go back to Richel Bilderbeek's homepage.

Go back to Richel Bilderbeek's C++ page.

 

 

 

 

 

(C++) QListWidgetExample4

 

Technical facts

 

Operating system(s) or programming environment(s)

IDE(s):

Project type:

C++ standard:

Compiler(s):

Libraries used:

 

 

 

 

 

Qt project file: ./CppQListWidgetExample4/CppQListWidgetExample4.pro

 

include(../../DesktopApplication.pri) #Or use the code below
#
# QT       += core gui
# greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#
# win32 {
#   greaterThan(QT_MAJOR_VERSION, 4): QT += svg
# }
#
# TEMPLATE = app
#
# CONFIG(debug, debug|release) {
#   message(Debug mode)
# }
#
# CONFIG(release, debug|release) {
#   message(Release mode)
#   DEFINES += NDEBUG NTRACE_BILDERBIKKEL
# }
#
# QMAKE_CXXFLAGS += -std=c++11 -Wall -Wextra -Weffc++
#
# unix {
#   QMAKE_CXXFLAGS += -Werror
# }



SOURCES += \
  main.cpp \
  dialog.cpp \
  qtautoresizelistwidget.cpp

HEADERS  += \
  dialog.h \
  qtautoresizelistwidget.h

FORMS += dialog.ui

 

 

 

 

 

./CppQListWidgetExample4/dialog.h

 

#ifndef DIALOG_H
#define DIALOG_H

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include <QDialog>
#pragma GCC diagnostic pop

namespace Ui {
  class Dialog;
}

class Dialog : public QDialog
{
  Q_OBJECT

public:
  explicit Dialog(QWidget *parent = 0);
  Dialog(const Dialog&) = delete;
  Dialog& operator=(const Dialog&) = delete;
  ~Dialog();

private slots:
  void on_pushButton_clicked();

private:
  Ui::Dialog *ui;
};

#endif // DIALOG_H

 

 

 

 

 

./CppQListWidgetExample4/dialog.cpp

 

#include "dialog.h"

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include <QScrollBar>
#include <QTimer>

#include "ui_dialog.h"
#pragma GCC diagnostic pop

Dialog::Dialog(QWidget *parent) :
  QDialog(parent),
  ui(new Ui::Dialog)
{
  ui->setupUi(this);
  ui->listWidget->setAlternatingRowColors(true);
  ui->listWidget->setWordWrap(true);
}

Dialog::~Dialog()
{
  delete ui;
}

void Dialog::on_pushButton_clicked()
{
  QListWidgetItem * const item = new QListWidgetItem;
  item->setText("0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789 0123456789");
  ui->listWidget->addItem(item);
}

 

 

 

 

 

./CppQListWidgetExample4/main.cpp

 

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include "dialog.h"
#include <QApplication>
#pragma GCC diagnostic pop

int main(int argc, char *argv[])
{
  QApplication a(argc, argv);
  Dialog w;
  w.show();
  return a.exec();
}

 

 

 

 

 

./CppQListWidgetExample4/qtautoresizelistwidget.h

 

#ifndef QTAUTORESIZELISTWIDGET_H
#define QTAUTORESIZELISTWIDGET_H

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include <QListWidget>
#pragma GCC diagnostic pop

struct QtAutoResizeListWidget : public QListWidget
{
  QtAutoResizeListWidget(QWidget *parent = 0);
  QtAutoResizeListWidget(const QtAutoResizeListWidget&) = delete;
  QtAutoResizeListWidget& operator=(const QtAutoResizeListWidget&) = delete;
  void addItem(QListWidgetItem *item);

  private:
  QTimer * const m_timer;

  void OnTimer();
};

#endif // QTAUTORESIZELISTWIDGET_H

 

 

 

 

 

./CppQListWidgetExample4/qtautoresizelistwidget.cpp

 

#include "qtautoresizelistwidget.h"

#pragma GCC diagnostic push
#pragma GCC diagnostic ignored "-Weffc++"
#pragma GCC diagnostic ignored "-Wunused-local-typedefs"
#include <QObject>
#include <QScrollBar>
#include <QTimer>
#pragma GCC diagnostic pop

QtAutoResizeListWidget::QtAutoResizeListWidget(QWidget *parent)
  : QListWidget(parent),
    m_timer(new QTimer)
{
  QObject::connect(m_timer,&QTimer::timeout,this,&QtAutoResizeListWidget::OnTimer);
  m_timer->setInterval(1);
  m_timer->start();
}

void QtAutoResizeListWidget::addItem(QListWidgetItem *item)
{

  QListWidget::addItem(item);
  this->repaint();
  m_timer->start();
}

void QtAutoResizeListWidget::OnTimer()
{
  if (this->verticalScrollBar()->isVisible())
  {
    const int height = this->height();
    this->setMinimumHeight(height + 1);
  }
  else
  {
    m_timer->stop();
  }
}

 

 

 

 

 

Go back to Richel Bilderbeek's C++ page.

Go back to Richel Bilderbeek's homepage.

 

Valid XHTML 1.0 Strict

This page has been created by the tool CodeToHtml