Qt에서 프로그램을 작성했지만 제대로 작동하지만 푸시 버튼을 클릭해도 작동하지 않습니다. 클래스 선언 바로 뒤에 Q_OBJECT를 사용하면 컴파일 오류가 발생합니다.Qt : 신호와 슬롯 및 Q_OBJECT
#include <QApplication>
#include <QPushButton>
#include <QLabel>
#include <QWidget>
class Communicate : public QWidget
{
// Q_OBJECT
public:
Communicate(QWidget *parent = 0);
private slots:
void OnPlus();
void OnMinus();
private:
QLabel *label;
};
Communicate::Communicate(QWidget *parent)
: QWidget(parent)
{
QPushButton *plus = new QPushButton("+", this);
plus->setGeometry(50, 40, 75, 30);
QPushButton *minus = new QPushButton("-", this);
minus->setGeometry(50, 100, 75, 30);
label = new QLabel("0", this);
label->setGeometry(190, 80, 20, 30);
connect(plus, SIGNAL(clicked()), this, SLOT(OnPlus()));
connect(minus, SIGNAL(clicked()), this, SLOT(OnMinus()));
}
void Communicate::OnPlus()
{
int val = label->text().toInt();
val++;
label->setText(QString::number(val));
}
void Communicate::OnMinus()
{
int val = label->text().toInt();
val--;
label->setText(QString::number(val));
}
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
Communicate window;
window.setWindowTitle("Communicate");
window.show();
return app.exec();
}
seperate .h 및 .cpp 파일을 사용할 때 제대로 실행되는 것으로 나타났습니다. 실제로 자습서 코드가 시스템에서 실행됩니다. , 그것은 별도의 파일을 만들려고했다. 나는 나 자신을 위해 수정했고 왜 이런 일이 일어나는지 알고 싶다. 왜 우리는 main.cpp에 모든 것을 쓸 수 없다 ?? 나는 또한 두 번째 방법을 이해하지 못한다. 무엇인가? – shivshnkr
moc는 신호 및 슬롯과 같은 QObject 파생 클래스 기능에 대한 C++ 코드를 생성하는 Qt 도구입니다. 어쨌든 권장되는 방법은 첫 번째 방법이며 위젯을 부모 위치에 수동으로 설정하는 대신 레이아웃 사용에 대한 조언을 무시하지 마십시오. – Zlatomir
main.cpp에 모든 것을 쓸 수없는 이유는 무엇입니까 ?? – shivshnkr