ich möchte eine relativ simple GUI schreiben, bei der es ein paar Felder gibt, um etwas einzutragen und ein paar Knöpfe, die man drücken kann. Theoretisch würde es so funktionieren, wie es jetzt ist, gefällt mir aber nicht. Mein Problem:
Ich mein MainWindow, in das ich mir eine QVBoxLayout gepackt habe. In dieses BoxLayout möchte ich nun weitere Layouts packen, z.B. ein GridLayout, darunter noch ein HBoxLayout, etc.
Ich habe schon ein GridLayout eingefügt und das Ganze sieht nun so aus:

Ich hätte es jetzt gerne so, dass die QLineEdit Objekte den gesamten Platz, der ihnen in der Breite zur Verfügung steht, nutzen. Wie mache ich das am besten?
Ich habe auch noch eine Frage zum Verständnis: Wird das Layout über die diversen Layoutklassen (GridLayout, BoxLayout, etc) geregelt oder über die Objekte, die sich darin befinden? Muss ich also dem LineEdit sagen, dass es sich soviel Platz krallen soll, wie möglich oder muss ich das dem Layout sagen? Oder vielleicht sogar beiden?
Mein Code sieht bisher so aus:
main.cpp
Code: Alles auswählen
#include <QtGui/QApplication>
#include "mainwindow.hpp"
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();
return a.exec();
}
Code: Alles auswählen
#ifndef MAINWINDOW_HPP
#define MAINWINDOW_HPP
#include <QtGui/QMainWindow>
#include <QVBoxLayout>
#include "filemenu.hpp"
class MainWindow : public QMainWindow{
Q_OBJECT
public:
MainWindow(QWidget *parent = 0);
~MainWindow();
private:
// Methoden
void initialise();
// Attribute
QVBoxLayout* vLayout;
FileMenu* fileMenu;
};
#endif // MAINWINDOW_HPP
Code: Alles auswählen
#include "mainwindow.hpp"
// ---------- PUBLIC ----------
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent){
initialise();
}
MainWindow::~MainWindow(){
}
// ---------- PRIVATE ----------
void MainWindow::initialise(){
this->resize(600, 400);
vLayout = new QVBoxLayout();
fileMenu = new FileMenu(this);
fileMenu->adjustSize();
vLayout->addWidget(fileMenu);
}
Code: Alles auswählen
#ifndef FILEMENU_HPP
#define FILEMENU_HPP
#include <QGridLayout>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QWidget>
class FileMenu : public QWidget{
public:
FileMenu(QWidget* parent = 0);
private:
// Methoden
// Attribute in der Reihenfolge der Ansicht
QLabel* sourceLabel;
QLineEdit* sourceLine;
QPushButton* sourceButton;
QPushButton* readFileButton;
QLabel* destLabel;
QLineEdit* destLine;
QPushButton* destButton;
};
#endif // FILEMENU_HPP
Code: Alles auswählen
#include "filemenu.hpp"
FileMenu::FileMenu(QWidget* parent) : QWidget(parent){
QGridLayout* layout = new QGridLayout();
sourceLabel = new QLabel(this);
sourceLabel->setText("Quelldatei:");
layout->addWidget(sourceLabel, 0, 0);
sourceLine = new QLineEdit(this);
sourceLine->setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
layout->addWidget(sourceLine, 0, 1);
sourceButton = new QPushButton("Waehlen", this);
layout->addWidget(sourceButton, 0, 2);
readFileButton = new QPushButton("Datei lesen", this);
layout->addWidget(readFileButton, 0, 3);
destLabel = new QLabel(this);
destLabel->setText("Zieldatei:");
layout->addWidget(destLabel, 1, 0);
destLine = new QLineEdit(this);
layout->addWidget(destLine, 1, 1, 1, 2);
destButton = new QPushButton("Waehlen", this);
layout->addWidget(destButton, 1, 3);
layout->setColumnStretch(1, 10);
setLayout(layout);
}
Schöne Grüße,
Simon