2016-04-13 5 views
1

Ich versuche, eine Bildlaufleiste für meine Etiketten zu erstellen. Für den Moment, wenn die Benutzer zu viele Etiketten erstellen, werden die Größen der Schaltfläche und der Textzone reduziert, deshalb wollte ich eine Bildlaufleiste erstellen, und wenn es zu viele Etiketten gibt, werden sie den Aspekt des Fensters nicht ändern .Scrollen Liste der Etiketten auf Qt

Dies ist mein eigentlicher 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); 
} 

Und das ist die .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_ */ 

Antwort

1

gibt es verschiedene Lösungen, je nachdem, was genau wollen Sie

  1. QTextEdit ist Qt Widget-Klasse für scrollbaren Text. Durch Drehen Text Interaktion Fahnen, Frame-Stil und Entschärfen Hintergrundfarbe aus werden Sie im Grunde scrollbaren QLabel

  2. QScrollArea bekommen als eine generische Lösung

+0

es genau ist, dass wenn ich eine QScrollArea tun, dauert es alle meine Widgets, und die qscrollarea muss selbst in meinem Layout sein? – Michael003

+1

@ Michael003, müssen Sie: 1. Scroll-Bereich in Ihrem Widget platzieren 2. Scrollbare Widget erstellen 3. [set] (http://doc.qt.io/qt-4.8/qscrollarea.html#setWidget) scrollbare Widget 4 Setzen Sie untergeordnete Widgets in scrollbares Widget –