2014-05-14 10 views
6

Qt를 처음 사용했습니다. 정말 간단한 계산기 프로그램을 구현하려고합니다. 단추를 넣으려고 할 때, 클릭했을 때 "Hello, World!"를 인쇄하고 싶습니다. 다음 줄 편집으로. 버튼 하나만 있으면 잘 작동하지만 두 번째 버튼을 추가하면 컴파일되지 않습니다. 그리고 계산기를 코딩하고 있기 때문에 버튼이 필요할 것입니다.하나의 신호를 슬롯에 연결하려고하면 Qt 코드가 컴파일되지 않습니다.

여기
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()' 

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); 
} 

여기에 내가 연결을 만드는 방법은 다음과 같습니다

#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!"); 
} 

사람이이 문제를 해결하는 방법을 알고 있나요

을 여기

는 오류입니다 ? 시간 내 주셔서 감사합니다.

답변

5

는 //이 문제가있는 부품입니다

무효 MainWindow를 :: on_pushButton_11_clicked() 실제로

.

다음과 같은 두 가지 방법의 구현을 누락 :

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

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

그래서, 당신이 결국 대신 두 세 개의 슬롯이 보인다. 당신은 당신의 욕망에 따라 다른 것들을 구현해야합니다. 텍스트는 여기에서 수행 할 작업에 대한 자리 표시 자 위에 있습니다.

+1

아, 고마워! 이전 연결을 삭제할 때 Qt Creator가 코드에서 삭제한다고 생각했습니다. 분명히 그렇지 않습니다. –

+1

@ AtakanArıkan : 네가 필요하지 않다면 헤더에서 선언을 삭제하고 moc 파일을 재생성하면된다. – lpapp