Michael003
Michael003

Reputation: 442

Scrolling list of labels on Qt

I'm trying to create a scrollbar for my labels. For the moment, if the users create too many labels, the sizes of the button and of the text zone are reduced, that's why I wanted to create a scrollbar then if there is too many labels, they will not change the aspect of the window.

This is my actual code :

#include <iostream>
#include <QApplication>
#include <QPushButton>
#include <QLineEdit>
#include <QWidget>
#include <QFormLayout>
#include "LibQt.hpp"

LibQt::LibQt() : QWidget()
{
  this->size_x = 500;
  this->size_y = 500;
  QWidget::setWindowTitle("The Plazza");
  setFixedSize(this->size_x, this->size_y);
  manageOrder();
}

LibQt::~LibQt()
{
}

void LibQt::keyPressEvent(QKeyEvent* event)
{
  if (event->key() == Qt::Key_Escape)
    QCoreApplication::quit();
  else
    QWidget::keyPressEvent(event);
}

void LibQt::manageOrder()
{
  this->converLayout = new QFormLayout;
  this->testline = new QLineEdit;
  this->m_button = new QPushButton("Send");
  this->m_button->setCursor(Qt::PointingHandCursor);
  this->m_button->setFont(QFont("Comic Sans MS", 14));
  this->converLayout->addRow("Order : ", this->testline);
  this->converLayout->addWidget(this->m_button);
  QObject::connect(m_button, SIGNAL(clicked()), this, SLOT(ClearAndGetTxt()));
  CreateLabel("test");
  CreateLabel("test2");
}

void            LibQt::CreateLabel(std::string text)
{
  QString qstr = QString::fromStdString(text);

  this->label = new QLabel(qstr);
  this->converLayout->addWidget(this->label);
  this->setLayout(converLayout);
}

std::string     LibQt::ClearAndGetTxt()
{
  QString txt = this->testline->text();

  if (!txt.isEmpty())
    {
      this->usertxt = txt.toStdString();
      std::cout << this->usertxt << std::endl;
      this->testline->clear();
      CreateLabel(this->usertxt);
      return (this->usertxt);
    }
  return (this->usertxt);
}

std::string     LibQt::getUsertxt()
{
  return (this->usertxt);
}

And this is the .hpp :

#ifndef _LIBQT_HPP_
#define _LIBQT_HPP_

#include <QApplication>
#include <QWidget>
#include <QPushButton>
#include <QFormLayout>
#include <QLabel>
#include <QLineEdit>
#include <QKeyEvent>

class   LibQt : public QWidget
{
  Q_OBJECT

public:
  LibQt();
  ~LibQt();
  void manageOrder();
  std::string getUsertxt();
  void keyPressEvent(QKeyEvent *event);
  void keyPressEventEnter(QKeyEvent *event);
  void CreateLabel(std::string text);
public slots:
  std::string ClearAndGetTxt();
protected:
  int   size_x;
  int   size_y;
  QPushButton *m_button;
  QLineEdit *testline;
  std::string usertxt;
  QLabel *label;
  QFormLayout *converLayout;
};

#endif /* _LIBQT_HPP_ */

Upvotes: 1

Views: 3905

Answers (1)

Andrei R.
Andrei R.

Reputation: 2462

there are different solutions depending on what precisely do you want

  1. QTextEdit is Qt widget class for scrollable text. By turning off text interaction flags, frame style and unsetting background color you will basically get scrollable QLabel

  2. QScrollArea as a more generic solution

Upvotes: 1

Related Questions