Cast?



  • Hallo bin Anfänger was QT angeht, habe folgende funktion geschrieben:

    QString a = this->lineEdit2->text();
    QString b = this->lineEdit2_2->text();
    int ergebnis = (a.toInt() + b.toInt());
    this->lineEdit2_2_2->setText(ergebnis);
    

    Nun ist es nicht möglich das ergebnis wieder in QString zurück zu casten, explizit mit QString() geht es auch nicht. Weiß jemand ne lösung?



  • QString::number(ergebnis);



  • Danke, es kommt zumindest keine Fehlermeldung mehr 😉 Aber beim debuggen merke ich dass er anscheinend den Slot nicht findet. Hier mal der code:

    Im Konstruktor der Form:

    connect(pushButton1, SIGNAL(pressed()), this, SLOT(rechnung()));
    

    Aber auf knopfdruck passiert gar nichts 😞



  • sTyL3X schrieb:

    Danke, es kommt zumindest keine Fehlermeldung mehr 😉 Aber beim debuggen merke ich dass er anscheinend den Slot nicht findet. Hier mal der code:

    Im Konstruktor der Form:

    connect(pushButton1, SIGNAL(pressed()), this, SLOT(rechnung()));
    

    Aber auf knopfdruck passiert gar nichts 😞

    Gibt es eine meldung in der Konsole?



  • beim debuggen ja:

    QObject::connect: No such slot Form1::rechnung()
    QObject::connect:  (sender name:   'pushButton1')
    QObject::connect:  (receiver name: 'Form1')
    


  • sTyL3X schrieb:

    beim debuggen ja:

    QObject::connect: No such slot Form1::rechnung()
    QObject::connect:  (sender name:   'pushButton1')
    QObject::connect:  (receiver name: 'Form1')
    

    Wenn Form1 keinen Slot hat, dann hat es halt keinen. Du musst mal die Definition von Form1 zeigen. Am besten den ganzen Header.



  • #ifndef FORM1_H
    #define FORM1_H
    
    #include <qvariant.h>
    #include <qmainwindow.h>
    
    class QVBoxLayout;
    class QHBoxLayout;
    class QGridLayout;
    class QSpacerItem;
    class QAction;
    class QActionGroup;
    class QToolBar;
    class QPopupMenu;
    class QLineEdit;
    class QLabel;
    class QPushButton;
    
    class Form1 : public QMainWindow
    {
        Q_OBJECT
    
    public:
        Form1( QWidget* parent = 0, const char* name = 0, WFlags fl = WType_TopLevel );
        ~Form1();
    
        QLineEdit* lineEdit2;
        QLabel* textLabel1;
        QLabel* textLabel1_2;
        QLineEdit* lineEdit2_2;
        QLineEdit* lineEdit2_2_2;
        QPushButton* pushButton1;
    
    protected slots:
        virtual void languageChange();
        void rechnung (void);
    
    };
    
    #endif // FORM1_H
    


  • Hm, sieht eigentlich ganz gut aus. Hilft es den Slot public zu machen?

    Ansonsten zeig mal den ganzen Code.



  • Leider nicht poste hier nochmal den konstruktor und die funktionen:

    Form1::Form1( QWidget* parent, const char* name, WFlags fl )
        : QMainWindow( parent, name, fl )
    {
        (void)statusBar();
        if ( !name )
    	setName( "Form1" );
        setCentralWidget( new QWidget( this, "qt_central_widget" ) );
    
        lineEdit2 = new QLineEdit( centralWidget(), "lineEdit2" );
        lineEdit2->setGeometry( QRect( 50, 89, 89, 20 ) );
    
        textLabel1 = new QLabel( centralWidget(), "textLabel1" );
        textLabel1->setGeometry( QRect( 160, 80, 20, 33 ) );
        QFont textLabel1_font(  textLabel1->font() );
        textLabel1_font.setPointSize( 20 );
        textLabel1_font.setBold( TRUE );
        textLabel1->setFont( textLabel1_font ); 
    
        textLabel1_2 = new QLabel( centralWidget(), "textLabel1_2" );
        textLabel1_2->setGeometry( QRect( 310, 80, 20, 33 ) );
        QFont textLabel1_2_font(  textLabel1_2->font() );
        textLabel1_2_font.setPointSize( 20 );
        textLabel1_2_font.setBold( TRUE );
        textLabel1_2->setFont( textLabel1_2_font ); 
    
        lineEdit2_2 = new QLineEdit( centralWidget(), "lineEdit2_2" );
        lineEdit2_2->setGeometry( QRect( 200, 90, 89, 20 ) );
    
        lineEdit2_2_2 = new QLineEdit( centralWidget(), "lineEdit2_2_2" );
        lineEdit2_2_2->setGeometry( QRect( 360, 90, 89, 20 ) );
    
        pushButton1 = new QPushButton( centralWidget(), "pushButton1" );
        pushButton1->setGeometry( QRect( 370, 140, 81, 31 ) );
        connect(pushButton1, SIGNAL(pressed()), this, SLOT(rechnung()));
    
        // toolbars
    
        languageChange();
        resize( QSize(600, 480).expandedTo(minimumSizeHint()) );
        clearWState( WState_Polished );
    
    }
    
    /*
     *  Destroys the object and frees any allocated resources
     */
    Form1::~Form1()
    {
        // no need to delete child widgets, Qt does it all for us
    }
    
    /*
     *  Sets the strings of the subwidgets using the current
     *  language.
     */
    void Form1::languageChange()
    {
        setCaption( tr( "Form1" ) );
        textLabel1->setText( tr( "+" ) );
        textLabel1_2->setText( tr( "=" ) );
        pushButton1->setText( tr( "&Berechne" ) );
        pushButton1->setAccel( QKeySequence( tr( "Alt+B" ) ) );
    }
    void Form1::rechnung (void)
    {
        QString a = this->lineEdit2->text();
        QString b = this->lineEdit2_2->text();
        int ergebnis = (a.toInt() + b.toInt());
        this->lineEdit2_2_2->setText(QString::number(ergebnis));
    }
    


  • Bei mir funktioniert der Code mit der trivialen main.cpp:

    #include <qapplication.h>
    #include <qpushbutton.h>
    
    #include "form1.h"
    int main( int argc, char **argv )
    {
        QApplication a( argc, argv );
    
        Form1 hello;
    
        a.setMainWidget( &hello );
        hello.show();
        return a.exec();
    }
    

    Vielleicht solltest du alles neu bauen.



  • Gut nach dem Rebuild hats gefunzt 🙂
    Aber ich schieß gleich noch ne frage hinterher:
    Gibt es eine Möglichkeit QString in char zu casten? wegen einer switch-anweisung

    Edit: Ok habs inzwischen hinbekommen weiß zwar nicht ob es so elegant ist aber schaut selbst

    QString abc = comboBox1->currentText();
    const char *operand = abc.latin1();
    char operand1 = operand[0];
    

Anmelden zum Antworten