주요 점 신호 및 슬롯 서명 호환되어야한다는 것이다. 즉, setText
이 다른 서명을 가지고 있기 때문에 clicked()
신호를 슬롯 setText(QString const&)
에 연결할 수 없습니다. 즉 QString const&
유형의 매개 변수를 허용하기 때문입니다.
은 당신이 할 수있는 것은 예를 들어,이 clicked()
신호에 연결 할 수 setText
있도록 사용자 정의 매개 변수가 슬롯을 정의하는 것 "전달" 클래스를 만드는 것입니다 :
class Forwarder: public QObject {
Q_OBJECT
public:
Forwarder(QObject* parent = 0): QObject(parent),
word("new text"),
label(new QLabel("original text")) {
QPushButton* button = new QPushButton("click");
QVBoxLayout* layout = new QVBoxLayout();
QWidget* window = new QWidget();
connect(button, SIGNAL(clicked()), this, SLOT(setText()));
layout->addWidget(button);
layout->addWidget(label);
window->setLayout(layout);
window->show();
}
protected Q_SLOTS:
void
setText()
{ label->setText(word); }
private:
QLabel* label
QString word;
};
참고하는 방법 사용자 정의 setText
clicked
에 연결할 수 있으며 setText
호출을 label
으로 전달합니다. 코드에서 잘못
두 더 많은 포인트 :
당신은 같은 연결시 패스 인스턴스 수 없습니다 : 당신은 아마 의미
...
QString word("new text");
...
connect(button, SIGNAL(clicked()), layout, SLOT(setText(word))); // Odd!
...
는 label
보다는 layout
에 연결 . label
의 텍스트를 변경하려면 이 아니라 label
에 대해 setText
메서드를 호출해야합니다. 또한 layout
(QLayout
클래스의 인스턴스에 대한 포인터로 사용)에는 setText
메소드가 없습니다.
필자는 위에 제시된 접근법이 왜 유효한지, 사용자가 아닌지를 고려하여 문서를 다시 읽으시기 바랍니다.
접근 방법이 잘못되었습니다. 설명서를 다시 읽으라고 제안합니다. 간단히 말해서, 연결 중에 '단어'와 같은 인스턴스를 지정할 수 없습니다. –
대신 QPushButton :: connect (button, SIGNAL (클릭)()), 레이아웃, 슬롯 (setText ("new text"))); – g3nair
도 작동하지 않았습니다! – g3nair