ich befasse mich seit längerem hobbymäßig mit c++ Programmierung in Qt. Habe natürlich schon viele Tutorials, Unterlagen aus Uni-Vorlesungen oder Ausschnitte aus Büchern gelesen. Allerdings fällt es mir oft schwer die Theorie in der Praxis zu verstehen und umzusetzen. Ich habe aktuell ein paar Fragen zu einem kleinen Projekt welches ich programmiere, welches ich im folgenden auf das wesentliche kürze. Wenn ich Dinge falsch formuliere bitte ich um Verbesserungen.
Ich versuche Daten (Uhrzeiten mit Informationen) aus einer Textdateien einzulesen und grafisch zu visualisieren. Das Programm funktioniert auch bereits, allerdings habe ich ein paar Verständnisprobleme, da ich ein paar Dinge aus Tutorials abgeschrieben und angepasst habe. Im wesentlichen geht es um die Funktion paintEvent(QPaintEvent *e) der Klasse Dialog (void Dialog::paintEvent(QPaintEvent *e)).
Ausschnitt aus "Dialog.cpp", Header-File spare ich mir vorerst mal.
Code: Alles auswählen
Dialog::Dialog(QWidget *parent) :
QDialog(parent),
ui(new Ui::Dialog)
{
ui->setupUi(this);
}
Dialog::~Dialog()
{
delete ui;
}
void Dialog::paintEvent(QPaintEvent *e){
QPainter painter(this);
QRect rec(startposition_x,startposition_y,breite,hoehe); //Variablen vorher natürlich angelegt und mit Werten gefüllt
painter.drawRect(rec);
}
void Dialog::on_LoadFile_clicked()
{
QString fileName = QFileDialog::getOpenFileName(this,
tr("LOG-File"), "/Users/michael/Desktop", tr("LOG (*.log)"));
// Dialog::paintEvent( ??? );
}
in der main:
Code: Alles auswählen
#include "dialog.h"
#include "readin.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Dialog w;
w.show();
return a.exec();
}
1. Warum wird die Funktion paintEvent(QPaintEvent *e) überhaupt beim Starten des Programms ausgeführt? in der Main wird ja nur das Objekt w der Klasse Dialog angelegt. D.h. für mein Verständnis, dass eigentlich nur alles, was im Konstruktor steht, ausgeführt werden sollte. Und dieser ist unverändert von mir. Da steht nur das drin, was von Qt vorgegeben wurde.
2. Ich möchte später, dass ich per Button die auszuwertende Datei auswählen kann, den Pfad der Datei der Funktion paintEvent übergeben (zum auswerten und festlegen, was gezeichnet werden soll) und dass die Funktion paintEvent neu ausgeführt wird. Allerdings scheitert es gerade schon daran, dass ich "paintEvent" durch klick auf einen Button (void Dialog::on_LoadFile_clicked()), ohne Übergabe des Pfades, erneut ausführen möchte, da ich nicht weiß, was die Funktion als Argument benötigt.
Kann mir jemand sagen, wozu "QPaintEvent *e" benötigt wird und was ich dann übergeben muss? Wenn ich versuche die Funktion paintEvent ohne Parameter zu implementieren, funktioniert gar nichts mehr.
Ergänzung: Aus diesem Tutorial habe ich das Grundgerüst übernommen: https://www.youtube.com/watch?v=5JE5ek_oN_0
Bin für jede Hilfe dankbar.
Grüße und einen schönen Sonntag