[gelöst]Frage zum Thema qt-programmierung

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
mampfi
Beiträge: 1765
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

[gelöst]Frage zum Thema qt-programmierung

Beitrag von mampfi » 02.07.2015 00:54:43

Eine auf den ersten Blick profane Frage, würde gerne wissen, wie man in einem qt-Fenster Text ausgibt.


Es geht also um das klassische Hello-World-Programm.

Was in C printf bzw. puts wäre bzw. in klassischem C++ cout.


Das entsprechende Objekt der Begierde ist ein automatisch von qtcreator erzeugtes Programm bestehend unter anderem aus:
(pushButton_ende wurde mit grafischem Editor erstellt)

main.cpp:

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}


mainwindow.cpp:

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>


MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);

connect(ui->pushButton_ende, SIGNAL(clicked()), SLOT(anwendung_quit()));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::anwendung_quit()

{
qApp->quit();
}
mainwindow.cpp
mainwindow.h
Zuletzt geändert von mampfi am 02.07.2015 18:38:29, insgesamt 1-mal geändert.
Es gibt viele Foren

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Frage zum Thema qt-programmierung

Beitrag von eggy » 02.07.2015 09:26:01

Was meinst Du mit "in einem Fester ausgeben"?

Du kannst in Textboxen aller Art (label, textarea, lineedit etc) Text schreiben. In der Regel wird das mit meinfeld.setText("hallo") gemacht. Oder willst Du "auf die Shell Schreiben", das geht wie sonst in c++ mit cout oder mit QDebug.

Code: Alles auswählen

#include <QDebug>
[...]
qDebug() << "hallo";
Ich find die Variante mit QDebug (und seiner Verwandschaft: warning/critical/fatal/... http://doc.qt.io/qt-5/qtglobal.html ) oftmals ganz nützlich, man spart sich das Umformatieren der QStrings, und für viele Qt-Objekte kennt es nen brauchbares Ausgabeformat. Und mit den richtigen Compileflags sind alle Meldungen auf einen Schlag weg ;)

mampfi
Beiträge: 1765
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

Re: Frage zum Thema qt-programmierung

Beitrag von mampfi » 02.07.2015 11:01:41

Das ist schon mal ein Hinweis.





Ich qt-Anfänger arbeite momentan mit dem qt-Creator und baue so Demo-Beispiele in Programme ein.

Die Datei mainwindows.cpp in meinem qt_widget1 sieht beispielsweise so aus (hier könnte man dann den Befehl von Dir eingeben simmts?):

Code: Alles auswählen

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    connect(ui->pushButton_ende, SIGNAL(clicked()), SLOT(anwendung_quit()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::anwendung_quit()

{
 qApp->quit();
}
Es gibt viele Foren

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: Frage zum Thema qt-programmierung

Beitrag von eggy » 02.07.2015 16:25:47

Code: Alles auswählen

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QDebug>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_pushButton_ende_clicked()
{
qDebug()<<"Hallo";
ui->pushButton_ende->setText("Welt");
}

mampfi
Beiträge: 1765
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

Re: Frage zum Thema qt-programmierung

Beitrag von mampfi » 02.07.2015 18:37:46

Danke herzlich.

Eine 1-zu-1-Entsprechung für print, Writeln, puts gibts wohl nicht, boshafte Gemüter würden fragen, wozo man sowas braucht ;-)

Ich hab in meinem Demo-Programm mit qtcreator einen neuen Button kreeirt und die Routinen ihm "zugeordnet".




Code: Alles auswählen

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QtGui>


MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);


    connect(ui->pushButton_hello, SIGNAL(clicked()), SLOT(hello_world()));
    connect(ui->pushButton_ende, SIGNAL(clicked()), SLOT(anwendung_quit()));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::hello_world()

{
    qDebug()<<"Hallo Welt im debug-Fenster";
    ui->pushButton_hello->setText("Hallo Welt");
}


void MainWindow::anwendung_quit()

{
 qApp->quit();
}
Zuletzt geändert von mampfi am 02.07.2015 19:10:53, insgesamt 3-mal geändert.
Es gibt viele Foren

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: [gelöst]Frage zum Thema qt-programmierung

Beitrag von eggy » 02.07.2015 19:00:31

Du kannst alles was es auch sonst bei c++ gibt, benutzen.
Ausserdem gibts bei qDebug und co auch noch die andere Schreibweise (den Link zur Doku hatte ich nicht ohne Absicht gepostet):

Code: Alles auswählen

qDebug("Items in list: %d", myList.size());

mampfi
Beiträge: 1765
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

Re: [gelöst]Frage zum Thema qt-programmierung

Beitrag von mampfi » 02.07.2015 19:14:13

Ah vergessen zu erwähnen, das Problem wurde auch hier gewälzt:

Das Problem wurde auch in folgendem Forum gewälzt: http://www.qtforum.de/forum/viewtopic.php?f=14&t=17110
Es gibt viele Foren

mampfi
Beiträge: 1765
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

Re: [gelöst]Frage zum Thema qt-programmierung

Beitrag von mampfi » 02.07.2015 19:25:49

Du hast recht:

Fügt man bei mainwindow.cpp oben
#include <iostream> ein

und in der Routine hello_world(): std::cout << "Der klassische cout;


Dann wird ohne Murren kompiliert.

Wohin der cout schreibt, war allerdings nicht festzustellen.
Es gibt viele Foren

eggy
Beiträge: 3331
Registriert: 10.05.2008 11:23:50

Re: [gelöst]Frage zum Thema qt-programmierung

Beitrag von eggy » 02.07.2015 19:50:05

Grüße an die Kollegen von "nebenan" :mrgreen:

Um die "Verwirrung" dort aufzuklären:
Jedesmal wenn ein Qt-Fenster neu gezeichnet wird, wird der(/das?) PaintEvent gerufen. Wenn Du hierdrin sagst: 'male ein grosses rotes X auf den Button' "schreibst" Du auf den Button - oder direkt "auf" das Fenster oder auf das Objekt, dessen PainEvent Du veränderst. Deswegen die erste Antwort.
Die Antwort mit dem QLabel ist in etwa das was ich auch vorgeschlagen hatte: Man legt sich ein zusätzliches Element in sein Fenster und ändert dessen "Inhalt". QLabel sind einfach nur "ausgegebener Text" - der eigentlich nichts tut außer da zu sein. QLabel haben aber wie die meisten anderen Qt-Objekte ebenfalls .setText() und kann somit einfach verändert werden.

Ich würde Dir empfehlen einfach mal die Beispiele (falls Du die Doku mitinstalliert hast in /usr/lib/qt4/examples/ bzw entsprechendes in ../qt5 (falls die 5er nicht woanders gelandet sind) oder durch den Qt-Installer sonstwohin installiert wurden) durchzuschauen. Die Schritt für Schritt erklärten Codeschnipsel/Tutorials sind nicht schlecht http://doc.qt.io/qt-5/gettingstartedqt.html - mehr auf http://doc.qt.io/qt-5/qtexamplesandtutorials.html.
Außerdem lohnt sich ein Blick in eins der Qt-Bücher (ich glaub das Thema wurde hier schonmal behandelt, die Suche sollte ein oder zwei Treffer ausspucken). Falls Du Englisch kannst https://www.youtube.com/watch?v=6KtOzh0 ... A4688E9D63 (100+ Videos zu fast allem was man Anfangs zu Qt wissen will, ausgewogen, nicht zu anspruchsvoll, nicht zu langweilig) - sonst mal nen Blick hier reinwerfen http://www.neonway.com/qtleipzig/ das gibt Dir auch nen ganz brauchbaren ersten Überblick.

mampfi
Beiträge: 1765
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

Re: [gelöst]Frage zum Thema qt-programmierung

Beitrag von mampfi » 02.07.2015 20:43:10

Das letzte Video kenne ich: Von einem (in seiner Art irgendwie rührenden, aber sehr kompetenten) Max Schlee.

Er erklärt sehr gut und sehr viel, mir wäre aber zum Start mein "Hello, World" lieber gewesen.


Ein grafisches Objekt im Fenster anzulegen dann zu befüllen, würde meine "fanatische" Aufgabenstellung nicht erfüllen. ;-)

Mittlerweile weiß ich, dann man Objekte im Fenster grafisch anlegen kann und auch per Befehl.


Schau mer mal, was ich in meine Beispiel-Programme noch alles einbaue.
Es gibt viele Foren

mampfi
Beiträge: 1765
Registriert: 16.08.2005 18:15:29
Lizenz eigener Beiträge: GNU General Public License
Wohnort: münchen

Re: [gelöst]Frage zum Thema qt-programmierung

Beitrag von mampfi » 16.07.2015 01:30:33

Im Qt-Forum auch nachgetragen:

Kleiner Nachtrag:

Bin noch auf das gestoßen:

http://cs.smith.edu/dftwiki/index.php/Q ... pplication

(Allerdings noch nicht ausprobiert, in meinem Demo-Programm)
Es gibt viele Foren

Antworten