2013-05-10 10 views
1

그래서 동적으로 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') 

다시 말해, 클릭 한 단추의 텍스트를 새로운 것으로 변경하려고합니다. 어떻게해야합니까?

미리 감사드립니다.

답변

0

QSignalMapper에는 mapped(QPushButton&)이라는 신호가 없습니다. 그러나 mapped(QWidget*)이 있습니다. 푸시 버튼에 대해 방출되는 것은 mapped(QWidget*)입니다. 따라서이 신호에 연결해야합니다 (대화 상자 신호를 & 슬롯에 맞게 수정하십시오).

+0

하지만 내가 제안한 매개 변수로 QWidget을 전달하면 어떻게 QPushButton의 텍스트 속성에 액세스 할 수 있습니까? QWidget에는 "setText()"메소드가 없습니다. – Aske

+0

@ user1545986'qobject_cast'를 사용할 수 있습니다. 또는 확실하다면, 객체는 항상 여러분이 기대하는 타입 인'static_cast'가 될 것입니다. – Angew

+0

멋진 도움에 감사드립니다. 그게 해결 됐어! – Aske