2014-05-14 20 views
6

Sono nuovo a Qt. Sto cercando di implementare un programma di calcolatrice davvero semplice. Sto solo provando a mettere un bottone, e quando viene cliccato, voglio che stampi "Hello, World!" alla riga successiva Modifica. Funziona bene quando ho un solo pulsante, ma quando aggiungo il secondo, non viene compilato. E dato che sto codificando una calcolatrice, ho bisogno di quei pulsanti.Il codice Qt non viene compilato quando tento di connettere un segnale a uno slot

Qui ci sono gli errori:

C:\Users\user\Desktop\Calc\build-Calc-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\moc_mainwindow.o:-1: In function `ZN10MainWindow18qt_static_metacallEP7QObjectN11QMetaObject4CallEiPPv': 
C:\Users\user\Desktop\Calc\build-Calc-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\moc_mainwindow.cpp:75: error: undefined reference to `MainWindow::on_pushButton_clicked()' 
C:\Users\user\Desktop\Calc\build-Calc-Desktop_Qt_5_3_0_MinGW_32bit-Debug\debug\moc_mainwindow.cpp:76: error: undefined reference to `MainWindow::on_pushButton_2_clicked()' 

Ecco il metodo MainWindow:

void MainWindow::qt_static_metacall(QObject *_o, QMetaObject::Call _c, int _id, void **_a) 
{ 
    if (_c == QMetaObject::InvokeMetaMethod) { 
     MainWindow *_t = static_cast<MainWindow *>(_o); 
     switch (_id) { 
     case 0: _t->on_pushButton_clicked(); break; 
     case 1: _t->on_pushButton_2_clicked(); break; 
     case 2: _t->on_pushButton_11_clicked(); break; 
     default: ; 
     } 
    } 
    Q_UNUSED(_a); 
} 

Ed ecco come faccio il collegamento:

#include "mainwindow.h" 
#include "ui_mainwindow.h" 
MainWindow::MainWindow(QWidget *parent) : 
    QMainWindow(parent), 
    ui(new Ui::MainWindow) 
{ 
    ui->setupUi(this); 
} 

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


// this is the problematic part 
void MainWindow::on_pushButton_11_clicked() 
{ 
    ui->lineEdit->setText("Hello, World!"); 
} 

Qualcuno sa come risolvere questo problema ? Grazie per il tuo tempo.

risposta

5

// Questa è la parte problematica

MainWindow vuoto :: on_pushButton_11_clicked()

Infatti.

si sta perdendo l'attuazione dei seguenti due metodi:

MainWindow::on_pushButton_clicked() 
{ 
    ui->lineEdit->setText("Hello, World 2!"); 
} 

e

MainWindow::on_pushButton_2_clicked() 
{ 
    ui->lineEdit->setText("Hello, World 3!"); 
} 

Così, sembra avere tre slot alla fine invece di due. Dovrai implementare gli altri secondo il tuo desiderio. Nota che i testi sono al di sopra dei soli segnaposto per qualsiasi azione tu voglia farci.

+1

ah, grazie! Ho pensato che cancellando una vecchia connessione Qt Creator cancellasse anche dal codice. Apparentemente no. –

+1

@ AtakanArıkan: sì, se non ne hai bisogno, basta cancellare la loro dichiarazione nell'intestazione e rigenerare il file moc. – lpapp

Problemi correlati