Seite 1 von 1

anfängerfrage

Verfasst: 17. November 2007 15:30
von bueffel2
hallo,

ich bekomme folgende Fehlermeldung:

Code: Alles auswählen

main.cpp:11: error: no matching function for call to ‘Ui::Dialog::setupUi(QMainWindow*&)’
Ich hab folgendes:

main.cpp

Code: Alles auswählen

#include <QApplication>
#include <QMainWindow>
#include "ui_programm.h"

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    QMainWindow *form = new QMainWindow();
    Ui::Dialog hb;

    hb.setupUi(form);

    form->show();
    return app.exec();
}
programm.h (hab noch eine ui_programm.h - komisch oder?)

Code: Alles auswählen

/********************************************************************************
** Form generated from reading ui file 'programm.ui'
**
** Created: Sat Nov 17 15:09:57 2007
**      by: Qt User Interface Compiler version 4.3.1
**
** WARNING! All changes made in this file will be lost when recompiling ui file!
********************************************************************************/

#ifndef PROGRAMM_H
#define PROGRAMM_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QDialogButtonBox>

class Ui_Dialog
{
public:
    QDialogButtonBox *buttonBox;

    void setupUi(QDialog *Dialog)
    {
    if (Dialog->objectName().isEmpty())
        Dialog->setObjectName(QString::fromUtf8("Dialog"));
    Dialog->resize(400, 300);
    buttonBox = new QDialogButtonBox(Dialog);
    buttonBox->setObjectName(QString::fromUtf8("buttonBox"));
    buttonBox->setGeometry(QRect(30, 240, 341, 32));
    buttonBox->setOrientation(Qt::Horizontal);
    buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::NoButton|QDialogButtonBox::Ok);

    retranslateUi(Dialog);
    QObject::connect(buttonBox, SIGNAL(accepted()), Dialog, SLOT(accept()));
    QObject::connect(buttonBox, SIGNAL(rejected()), Dialog, SLOT(reject()));

    QMetaObject::connectSlotsByName(Dialog);
    } // setupUi

    void retranslateUi(QDialog *Dialog)
    {
    Dialog->setWindowTitle(QApplication::translate("Dialog", "Dialog", 0, QApplication::UnicodeUTF8));
    Q_UNUSED(Dialog);
    } // retranslateUi

};

namespace Ui {
    class Dialog: public Ui_Dialog {};
} // namespace Ui

#endif // PROGRAMM_H

test.pro

Code: Alles auswählen

######################################################################
# Automatically generated by qmake (2.01a) Sat Nov 17 15:10:31 2007
######################################################################

TEMPLATE = app
TARGET = 
DEPENDPATH += .
INCLUDEPATH += .

# Input
HEADERS += programm.h
FORMS += programm.ui
SOURCES += main.cpp
Was ist falsch? Binn blutiger Anfänger?

2. Frage: *Wo* antworte ich auf Ereignisse?

Danke

bueffel

Verfasst: 17. November 2007 16:04
von DeepDiver
Die Methode setupUi() will als Parameter QDialog*.
Du übergibst aber QMainWindow.

Das kann nicht funktionieren!

Arbeite Dich doch durch das Qt Tutorial und die Qt Beispiele.
http://doc.trolltech.com/4.3/tutorial.html
http://doc.trolltech.com/4.3/examples.html

Da wird so ziemlich alles erklärt.

Wenn noch weiter Fragen auftreten, dann bitte hier posten - wir helfen weiter.

CU Tom

Verfasst: 17. November 2007 16:15
von bueffel2
1. Wie würde das oben denn richtig aussehen?
2. Gibt es _gute_ Bücher zum Thema? Hab hier ein Buch namens Qt4 GUI-Entwicklung von Jüergen Wolf, bin aber total unzufrieden.

Verfasst: 17. November 2007 17:56
von DeepDiver

Code: Alles auswählen

#include <QApplication>
#include <QMainWindow>
#include "ui_programm.h"

int main(int argc, char* argv[])
{
    QApplication app(argc, argv);
    QDialog *form = new QDialog();
    Ui::Dialog hb;

    hb.setupUi(form);

    form->show();
    return app.exec();
} 

http://www.amazon.de/C-GUI-Programming- ... 588&sr=8-4

Verfasst: 17. November 2007 20:52
von bueffel2
Vielen Vielen Vielen Dank!

Noch noch eine Bitte: Kannst Du mal ein simples Beispiel geben, wie ich z.b. auf den klick eines Buttons eine QMessageBox ausgeben kann? Oder ein neues Fenster oeffnen kann?
Nur wenn Du die Zeit gerade sowieso hast

Verfasst: 18. November 2007 12:31
von bueffel2
hi

ich bins nochmal.
hab ein dialog mit qt4 designer gebastelt. Hab nun mit uic den code umgewandelt.
Hab das umgewandelte in die main.cpp eingetragen.
In der ui_programm.h mach ich dann:

Code: Alles auswählen


    QObject::connect(pushButton_2, SIGNAL(clicked()), dialog, SLOT( quit() ) );
    QObject::connect(pushButton, SIGNAL(clicked()), tableWidget, SLOT( selectAll() ));
Bekomme aber folgenden Fehler:

Code: Alles auswählen

Object::connect: No such slot QDialog::quit()
Object::connect:  (sender name:   'pushButton_2')
Object::connect:  (receiver name: 'dialog')
Ich denk ich hab vergessen was einzubinden.
ui_programm.h

Code: Alles auswählen

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QDialog>
#include <QtGui/QPushButton>
#include <QtGui/QTableWidget>

Verfasst: 18. November 2007 14:55
von Burgpflanze
1. Ein QDialog hat keinen Slot "quit()".
2. Meines Wissens nach nimmt man in der von uic erstellten Header-Datei keine manuellen Änderungen vor, sondern leitet eine Klasse davon ab.

Und beschäftige dich doch bitte mit der Dokumentation, so wie es DeepDiver schon vorgeschlagen hat!

Verfasst: 18. November 2007 16:00
von DeepDiver
[quote="bueffel2"]Vielen Vielen Vielen Dank!

.../quote]

Gerne geschehen! Aller Anfang ist schwer!
Es ist aber unerlässlich, dass Du Dich mit der Dokumentation auseinander setzt.
Mit Qt hast Du eh Glück - ich kenne keine Software-Bibliothek, die so gut und ausreichend dokumentiert wird.
Nimm Dir bitte die Zeit und arbeite das Tutorial und die Examples Schritt für Schritt durch.
Nur so kannst Du etwas lernen.
Aus Deinen Posts lese ich auch heraus, dass ein gutes C++ Buch auch mal helfen könnte.

Wenn Du auf Deinem Weg durch Tutorial und Examples auf Probleme stößt, poste einfach wieder - wir helfen dann schon ...


Gruß und noch einen schönen Sonntag

Tom

Verfasst: 18. November 2007 18:09
von bueffel2
Hallo,

erst einmal ein dankeschön an Tom, Burgpflanze.
1. Ein QDialog hat keinen Slot "quit()".
Aber einen slot close() :)
2. Meines Wissens nach nimmt man in der von uic erstellten Header-Datei keine manuellen Änderungen vor, sondern leitet eine Klasse davon ab.
Du meinst, man erstellt erst das design im designer und macht es zu einer Header-File. Anschließend leitet man davon eine Klasse ab. Sprich, man schreibt nicht mehr von Hand in die Header-File. Richtig?
tom hat geschrieben:Mit Qt hast Du eh Glück - ich kenne keine Software-Bibliothek, die so gut und ausreichend dokumentiert wird.
Ja, das finde ich auch.
Tom hat geschrieben:Nimm Dir bitte die Zeit und arbeite das Tutorial und die Examples Schritt für Schritt durch. Nur so kannst Du etwas lernen
Ich denke Du hast recht. Werde ich auf jedenfall tun.
Tom hat geschrieben:Aus Deinen Posts lese ich auch heraus, dass ein gutes C++ Buch auch mal helfen könnte.
Richtig! Woran hast Du das bemerkt?

Wie immer großen Dank und angenehmen Sonntag

buffalo