Qt-Komponenten und Layout

Es gibt Vielzahl von Qt Komponenten. Komponenten können gemeinsam in das Widget gepackt werden:


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

class MyWidget : public QWidget
{
public:
  MyWidget(void);
};

MyWidget::MyWidget(void)
{
  QLabel* qlab = new QLabel(this);  // Label
  qlab->setText( "first line\nsecond line" );
  qlab->setGeometry(20,20,100,30);
  QLineEdit* ledit = new QLineEdit(this);  // Text-Feld
  ledit->setText( "One editable line ..." );
  ledit->setGeometry(120,20,200,30);
  QPushButton *qpb = new QPushButton("Hello world!",this); // Knopf
  qpb->setGeometry(320,20,400,30);
}
// main ....

Hier absolute Positionierung mit setGeometry(xlow, ylow, xhigh, yhigh) Angabe der Punkte links oben und rechts unten.


Einfacher und flexibler mit Layout-Manager:


// 3 Knoepfe mit einem Layoutmanager
// 3 Knoepfe mit einem Layoutmanager
#include <QApplication>
#include <QPushButton>
#include <QWidget>
#include <QLayout>

class MyWidget : public QWidget
{
public:
  MyWidget();
};

MyWidget::MyWidget()
{
  // Knoepfe erzeugen
  QPushButton* b1 = new QPushButton("Button 1", this);
  b1->setMinimumSize(b1->sizeHint()); // minimal Groesse festlegen
  QPushButton* b2 = new QPushButton("Button 2", this);
  b2->setMinimumSize(b2->sizeHint());
  QPushButton* b3 = new QPushButton("Button 3", this);
  b3->setMinimumSize(b3->sizeHint());

  // Statt QHBoxLayout könnte natürlich auch ein
  // QVBoxLayout für vertikales Layout erzeugt werden.
  QHBoxLayout* layout = new QHBoxLayout(this);// Layoutmanager für horizontales Layout
  layout->addWidget(b1); // Knoepfe hinzufuegen.
  layout->addWidget(b2);
  layout->addWidget(b3);
  layout->activate();    // Layoutmanager aktivieren
}

//....


Text-Editor Fenster

QTextEdit ergibt Text-Editor inclusive automatischen Scrollbars.


#include <QApplication>
#include <QWidget>
#include <QTextEdit>
#include <QResizeEvent>

class MyWidget : public QWidget
{
private:
  QTextEdit* qtxt;
public:
  MyWidget(void);
}; 

MyWidget::MyWidget(void)
{
  qtxt = new QTextEdit(this);  // TextArea
  qtxt->setText( " first line\n second line\n more lines..." );
  qtxt->setGeometry(1,1,280,280);
}
// wird aufgerufen, wenn die Groesse des Fensters veraendert wird
void MyWidget::resizeEvent( QResizeEvent* event )
{
  qtxt->resize( event->size() ); // neue Groesse
}

//....


Painter - Fenster zum Zeichnen


#include <QApplication>
#include <QPainter>
#include <QWidget>

class QPaintEvent; //forward declaration

class MyWidget : public QWidget
{
public:
  MyWidget();
protected:
  virtual void paintEvent(QPaintEvent*);
};

MyWidget::MyWidget()
{
  setBackgroundRole(QPalette::Base);
  setAutoFillBackground(true);
}

void MyWidget::paintEvent(QPaintEvent *)
{

  QBrush b1( Qt::blue );
  QBrush b2( Qt::green, Qt::Dense6Pattern );          // green 12% fill
  QBrush b3( Qt::NoBrush );                           // void brush
  QBrush b4( Qt::CrossPattern );                      // black cross pattern

  QPainter *paint = new QPainter();
  paint->begin(this);
  paint->setPen( Qt::red );
  paint->setBrush( b1 );
  paint->drawRect( 10, 10, 200, 100 );
  paint->setBrush( b2 );
  paint->drawRoundRect( 10, 150, 200, 100, 20, 20 );
  paint->setBrush( b3 );
  paint->drawEllipse( 250, 10, 200, 100 );
  paint->setBrush( b4 );
  paint->drawPie( 250, 150, 200, 100, 45*16, 90*16 );//    paint->translate(20.0,40.0);
  paint->end();
}

int main(int argc, char **argv)
{
    QApplication app(argc,argv);
    MyWidget *wid = new MyWidget();
    wid->show();
    return app.exec();
}

QPainter als Widget für grafische Elemente:

Es gibt noch viele weiter nützliche Komponenten: QSlider, QFileDialog, QDateTime, QTable, QMenu, QMenuBar, ...


GDuckeck 2019-08-01