qt designer und signale
-
netchamber
- Beiträge: 4
- Registriert: 7. April 2006 13:53
qt designer und signale
hallo,
ich habe mir die neuste qt version inklusive qt designer runtergeladen, kompiliert und installiert. ich habe auch schon ein paar schöne formulare erstellt. mein problem ist, dass ich weder in der doku noch in diesem forum rausgefunden habe, wie ich bspw. beim klicken auf einen button eine beliebige funktion ausführen kann, die nicht zwingend etwas mit den anderen komponenten auf dem formular zu tun hat. ich möchte also nicht, m.h. der connect funktion/methode zwei komponenten mit SIGNAL und SLOT miteinander verbinden. stattdessen möchte ich, dass beim klicken auf den button ...
- ein text auf der konsole ausgegeben wird oder
- eine berechnung ausgeführt und ihr ergebnis ausgegeben wird oder
- eine mysql verbindung aufgebaut wird oder
- inhalte von text eingabefeldern gelesen werden und als eingaben für funktionen verwendet werden ... oder oder oder ...
wie mache ich das?
ich habe mir die neuste qt version inklusive qt designer runtergeladen, kompiliert und installiert. ich habe auch schon ein paar schöne formulare erstellt. mein problem ist, dass ich weder in der doku noch in diesem forum rausgefunden habe, wie ich bspw. beim klicken auf einen button eine beliebige funktion ausführen kann, die nicht zwingend etwas mit den anderen komponenten auf dem formular zu tun hat. ich möchte also nicht, m.h. der connect funktion/methode zwei komponenten mit SIGNAL und SLOT miteinander verbinden. stattdessen möchte ich, dass beim klicken auf den button ...
- ein text auf der konsole ausgegeben wird oder
- eine berechnung ausgeführt und ihr ergebnis ausgegeben wird oder
- eine mysql verbindung aufgebaut wird oder
- inhalte von text eingabefeldern gelesen werden und als eingaben für funktionen verwendet werden ... oder oder oder ...
wie mache ich das?
qt designer und signale
hallo!
Du kannst die Verknüpfungen zwischen Signalen und Slots im Desginer anlegen oder im Quellcode defineren.
Willst Du beides nicht?
Tschau
Du kannst die Verknüpfungen zwischen Signalen und Slots im Desginer anlegen oder im Quellcode defineren.
Willst Du beides nicht?
Tschau
-
netchamber
- Beiträge: 4
- Registriert: 7. April 2006 13:53
hallo,
ja ich kann mit dem designer bspw. einen close button mit dem formular verbinden, sodass beim klicken auf den button die quit() methode des main windows ausgeführt wird. aber ich möchte beim klick auf einen button eine im quelltext von mir definierte funktionen aufrufen können .... man, ich kann echt gut erklären
ja ich kann mit dem designer bspw. einen close button mit dem formular verbinden, sodass beim klicken auf den button die quit() methode des main windows ausgeführt wird. aber ich möchte beim klick auf einen button eine im quelltext von mir definierte funktionen aufrufen können .... man, ich kann echt gut erklären
dankeschön im voraus
So wie ich das gesehen habe, geht das beim Qt 4 nicht (mehr).
Du kannst aber statt connect auch on_<dein_Button>_clicked() verwenden.
Definiere diese Funktion im private slots: von deiner abgeleitete QDialog Klasse.
Danach kannst du diese Funktion verwenden.
Du kannst aber statt connect auch on_<dein_Button>_clicked() verwenden.
Definiere diese Funktion im private slots: von deiner abgeleitete QDialog Klasse.
Danach kannst du diese Funktion verwenden.
Win 2k, Win XP
QT Win Opensource 4.1.1
MinGW 3.4.2
QT Win Opensource 4.1.1
MinGW 3.4.2
-
netchamber
- Beiträge: 4
- Registriert: 7. April 2006 13:53
hallo,
ich habe im designer mal ein formular erstellt, das nur aus einem mainwindow mit einem push button besteht. die datei hab ich mit konvertiert und in die main.cpp mittels include eingebunden.
easy.h:main.cpp:wie man sieht, habe ich keine von QDialog abgeleitete klasse. wenn ichnach der funktion retranslateUi() aus easy.h einfüge (sowie iostream inkludiere und "using namespace std" hinzufüge), wird die datei zwar kompiliert - die änderung zeigt aber keine wirkung. beim klick auf den pushbutton wird leider nichts ausgegeben. woran liegt das?
ich habe im designer mal ein formular erstellt, das nur aus einem mainwindow mit einem push button besteht. die datei hab ich mit
Code: Alles auswählen
uic -o easy.h easy.heasy.h:
Code: Alles auswählen
#ifndef EASY_H
#define EASY_H
#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QMainWindow>
#include <QtGui/QPushButton>
#include <QtGui/QStatusBar>
#include <QtGui/QWidget>
class Ui_MainWindow
{
public:
QWidget *centralwidget;
QPushButton *pushButton;
QStatusBar *statusbar;
void setupUi(QMainWindow *MainWindow)
{
MainWindow->setObjectName(QString::fromUtf8("MainWindow"));
MainWindow->resize(QSize(121, 47).expandedTo(MainWindow->minimumSizeHint()));
centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
pushButton = new QPushButton(centralwidget);
pushButton->setObjectName(QString::fromUtf8("pushButton"));
pushButton->setGeometry(QRect(20, 0, 73, 25));
MainWindow->setCentralWidget(centralwidget);
statusbar = new QStatusBar(MainWindow);
statusbar->setObjectName(QString::fromUtf8("statusbar"));
statusbar->setGeometry(QRect(0, 28, 121, 19));
MainWindow->setStatusBar(statusbar);
retranslateUi(MainWindow);
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
void retranslateUi(QMainWindow *MainWindow)
{
MainWindow->setWindowTitle(QApplication::translate("MainWindow", "MainWindow", 0, QApplication::UnicodeUTF8));
pushButton->setText(QApplication::translate("MainWindow", "PushButton", 0, QApplication::UnicodeUTF8));
Q_UNUSED(MainWindow);
} // retranslateUi
};
namespace Ui {
class MainWindow: public Ui_MainWindow {};
} // namespace Ui
#endif // EASY_HCode: Alles auswählen
#include "easy.h"
#include <QApplication>
#include <QMainWindow>
int main(int argc, char *argv[]) {
QApplication app(argc, argv);
QMainWindow *window = new QMainWindow;
Ui::MainWindow ui;
ui.setupUi(window);
window->show();
return app.exec();
}Code: Alles auswählen
private slots:
void on_pushButton_clicked() {
cout << "TEST" << endl;
}dankeschön im voraus
Zuuerst: ist das unter Linux oder Windows.netchamber hat geschrieben:cout << "TEST" << endl;
Bei Windows
Wo erwartest du eine Ausgabe? im CMD oder in der Entwicklungsumgebung wie VC 2005 Express?
Den unter CMD wirst du keine Ausgabe Sehen (Auch mit QDebug() nicht). Aber in der MS Entwicklungsumgebung kommt was mit QDebug().
Versuch das einmal mit
Code: Alles auswählen
QMessageBoxKeine Ahnung
Das andere ist die Einbindung:
Im main.cpp wird normalerweise die Dialogklasse eingebunden (z.B dialog.cpp & dialog.h). Und dort werden dann die Funktionen für dein Dialog definiert.
main.cpp
Code: Alles auswählen
#include <QApplication>
#include <QWidget>
#include "dialog.h"
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
MainDialog MyDialog;
MyDialog.show();
return app.exec();
}
Code: Alles auswählen
#ifndef DIALOG_H
#define DIALOG_H
#include "easy.h"
// Klasse für den Dialog
class MainDialog : public QDialog, private Ui::MainDialog
{
Q_OBJECT
public:
MainDialog(QWidget *parent = 0);
~MainDialog();
private slots:
// Auto-Connect
void on_pushButton_clicked();
};
#endif
Code: Alles auswählen
#include "dialog.h"
// Hauptfenster initialisieren
MainDialog::MainDialog(QWidget *parent) : QDialog(parent)
{
setupUi(this); // Form laden
}
void MainDialog::on_pushButton_clicked()
{
QMessageBox::information(this, tr("Testmeldung"), tr("Das ist ein Test"), QMessageBox::Cancel);
}
Zuletzt geändert von Adi am 11. April 2006 13:38, insgesamt 2-mal geändert.
Win 2k, Win XP
QT Win Opensource 4.1.1
MinGW 3.4.2
QT Win Opensource 4.1.1
MinGW 3.4.2
-
netchamber
- Beiträge: 4
- Registriert: 7. April 2006 13:53
hallo,
erstmal dankeschön für die zahlreichen code beispiele... in welcher datei steht der letzte codeblock deines postings?ausgeführt. leider bekomme ich beim kompilieren zahlreiche fehlermeldungen ...hmm ...
erstmal dankeschön für die zahlreichen code beispiele... in welcher datei steht der letzte codeblock deines postings?
meinst du damit "dialog.cpp"? unter dieser annahme, habe ichAdi hat geschrieben:Code: Alles auswählen
#include "dialog.h" // Hauptfenster initialisieren MainDialog::MainDialog(QWidget *parent) : QDialog(parent) { setupUi(this); // Form laden } void MainDialog::on_pushButton_clicked() { QMessageBox::information(this, tr("Testmeldung"), tr("Das ist ein Test"), QMessageBox::Cancel); }
Code: Alles auswählen
qmake -projekt
qmake
makeCode: Alles auswählen
$ make
g++ -c -pipe -g -Wall -W -D_REENTRANT -DQT_GUI_LIB -DQT_CORE_LIB -DQT_SHARED -I/usr/local/Trolltech/Qt-4.1.2/mkspecs/linux-g++ -I. -I/usr/local/Trolltech/Qt-4.1.2/include/QtCore -I/usr/local/Trolltech/Qt-4.1.2/include/QtGui -I/usr/local/Trolltech/Qt-4.1.2/include -I. -I. -I. -o dialog.o dialog.cpp
In file included from dialog.cpp:1:
dialog.h:8: error: `MainDialog' is not a class or namespace
dialog.h:8: error: invalid base-class specification
dialog.h:8: error: base class `QDialog' has incomplete type
dialog.h:8: Warnung: `class MainDialog' has virtual functions but non-virtual
destructor
In Datei, eingefügt von dialog.cpp:1:
dialog.h:20:7: Warnung: Kein Newline am Dateiende
dialog.cpp: In constructor `MainDialog::MainDialog(QWidget*)':
dialog.cpp:5: error: type `class QDialog' is not a direct base of `MainDialog'
dialog.cpp:7: error: `setupUi' undeclared (first use this function)
dialog.cpp:7: error: (Each undeclared identifier is reported only once for each
function it appears in.)
dialog.cpp: In member function `void MainDialog::on_pushButton_clicked()':
dialog.cpp:12: error: no matching function for call to `QMessageBox::
information(MainDialog* const, QString, QString, QMessageBox::Button)'
/usr/local/Trolltech/Qt-4.1.2/include/QtGui/qmessagebox.h:81: error: candidates
are: static int QMessageBox::information(QWidget*, const QString&, const
QString&, int, int, int)
/usr/local/Trolltech/Qt-4.1.2/include/QtGui/qmessagebox.h:88: error:
static int QMessageBox::information(QWidget*, const QString&, const
QString&, const QString&, const QString&, const QString&, int, int)
make: *** [dialog.o] Fehler 1dankeschön im voraus