2012-09-18 5 views
1

Visual Studio 2010에서 QT 통합 디자이너를 사용하여 간단한 GUI를 디자인하고 있습니다. 여기에 내가하고 싶은 것이 있습니다 : 업데이트 버튼을 클릭하여 표시되는 이미지를 변경하고 싶습니다. 업데이트를 눌러 신호를 트리거하고 텍스트 필드의 슬롯을 사용하여 지울 수 있는지 확인했습니다. 그러나 이미지를 변경할 수없는 것 여기 QT : QPixmap을 사용하여 QLabel로 이미지 업데이트

는 관련 코드 (GUI.cpp)입니다 .... 신호/슬롯 방식을 사용하여 표시 :

void GUI::changeImage() 
{ 
    ui.Image->updatesEnabled(); 
    ui.Image->setPixmap(QPixmap("D:\\Documents\ and\ Settings\\Image.jpg")); 
    ui.Image->update(); 
} 

GUI::GUI(QWidget *parent, Qt::WFlags flags) 
    : QMainWindow(parent, flags) 
{ 
    ui.setupUi(this); 

    connect(ui.updateButton, SIGNAL(clicked()), ui.textField, SLOT (clear())); 
    connect(ui.updateButton, SIGNAL(clicked()), ui.Image, SLOT (changeImage())); 
} 

GUI::~GUI() 
{ 

} 

내가 뭔가 잘못하고 있습니까?

편집 : gui.h

#include <QtGui/QMainWindow> 
#include "ui_gui.h" 

class GUI : public QMainWindow 
{ 
    Q_OBJECT 

public: 
    GUI(QWidget *parent = 0, Qt::WFlags flags = 0); 
    ~GUI(); 

private: 
    Ui::GUIClass ui; 
    void changeImage() ; 
}; 

답변

3

connect 호출 대상으로 this을 사용해야하므로 슬롯,하지 ui.Image 때문에, GUI 클래스 인스턴스에 속하는의 코드.

connect(ui.updateButton, SIGNAL(clicked()), this, SLOT (changeImage())); 

슬롯은 "슬롯"섹션에서 선언 할 필요가 : 귀하의 회신 알렉스에 대한

private slots: 
    void changeImage() ; 
+0

감사합니다. 나는 그것을 시도했지만 아무런 차이가없는 것으로 보인다. Image가 기본적으로 QLabel임을 분명히해야합니다. 필자는 처음에는 이미지를 PixMap을 사용하여 이미지에 설정하는 데 디자이너를 사용했습니다. 이제 코드를 사용하여 이미지를 전환합니다. 하지만 그것은 이미지를 업데이트하지 않고 QT Designer -> pixmap -> original image 필드를 사용하여 지정한 초기 값을 유지합니다 ... – c0d3rz

+0

내 코드에 중단 점을 넣으면 changeImage 함수가 호출되지 않습니다 updateButton이 눌려졌습니다 ... 내가 어떻게 든 SLOTS를 잘못 사용하고있는 것 같군요? – c0d3rz

+0

@ c0d3rz GUI 클래스 정의에 Q_OBJECT 매크로를 넣었습니까? – alexisdm

관련 문제