그래서 동적으로 QPushButton 객체를 생성 한 다음 신호를 출력하도록 매핑합니다. 신호와 관련된 슬롯에서 개체의 속성 (이 경우 QPushButton :: text())을 편집하려고합니다. 헤더 파일의 클래스 "대화"에서Qt 신호 매핑 : 이미 터 객체 편집
내가 가진 : .cpp 파일의 "대화"클래스의 생성자에서
private:
QSignalMapper *signalMapper;
private slots:
void buttonGeneric(QPushButton &button);
signals:
void clicked(QPushButton &button);
내가 가진 :
signalMapper = new QSignalMapper(this);
for (int i = 0; i < 100; ++i)
{
QPushButton *button = new QPushButton(QString::number(i + 1));
connect(button, SIGNAL(clicked()), signalMapper, SLOT(map()));
signalMapper->setMapping(button, button);
ui->gridLayout->addWidget(button, 2 + (i/10), (i % 10));
}
connect(signalMapper, SIGNAL(mapped(QPushButton &button)), this, SIGNAL(clicked(QPushButton &button)));
connect(this, SIGNAL(clicked(QPushButton &button)), this, SLOT(buttonGeneric(QPushButton &button)));
그리고 마지막으로 외부 같은 .cpp 파일에 생성자 내가 가진 :
void dialog::buttonGeneric(QPushButton & button)
{
button.setText("hello");
}
이 코드는 컴파일 및 실행,하지만 난 버튼 아무것도 클릭 할 때 g가 발생합니다. 응용 프로그램 디버그 출력에서 다음과 같은 결과를 얻었습니다.
QObject::connect: No such signal QSignalMapper::mapped(QPushButton &button)
QObject::connect: (receiver name: 'dialog')
QObject::connect: No such signal dialog::clicked(QPushButton &button)
QObject::connect: (sender name: 'dialog')
QObject::connect: (receiver name: 'dialog')
다시 말해, 클릭 한 단추의 텍스트를 새로운 것으로 변경하려고합니다. 어떻게해야합니까?
미리 감사드립니다.
하지만 내가 제안한 매개 변수로 QWidget을 전달하면 어떻게 QPushButton의 텍스트 속성에 액세스 할 수 있습니까? QWidget에는 "setText()"메소드가 없습니다. – Aske
@ user1545986'qobject_cast'를 사용할 수 있습니다. 또는 확실하다면, 객체는 항상 여러분이 기대하는 타입 인'static_cast'가 될 것입니다. – Angew
멋진 도움에 감사드립니다. 그게 해결 됐어! – Aske