2017-05-22 13 views
-1

신호 및 슬롯에 대해 작업하고 있습니다. 여기 Qt C++ 용 신호 및 슬롯

는 mainwindow.h

.... 
public slots: 
void slotChangeName(); 
.... 

mainwindow.cpp이고; 만든 프로젝트, "project_created"글로벌 변수, 나는 "project_created"때 라벨에 프로젝트 디렉토리를 작성하려면 1로 업데이트됩니다

#include<globals.h> 

MainWindow::MainWindow(QWidget *parent) : 
QMainWindow(parent), 
ui(new Ui::MainWindow) 
{ 
    QObject::connect(project_created,SIGNAL(selectionChanged()),this,SLOT(slotChangeName())) 
} 
void MainWindow::slotChangeName() 
{ 
    ui->project_name->setText(project_directory); 
} 

이 업데이트되었습니다. 나는 무엇을해야합니까?

globals.h

#ifndef GLOBALS_H 
#define GLOBALS_H 

class QString; 

extern int project_created; 
extern QString project_directory; 

#endif 

globals.cpp

#include "globals.h" 
#include <QString> 

// ALL THE GLOBAL DEFINITIONS 

int project_created = 0; 
QString project_directory = ""; 

명 새로운 프로젝트에 클릭하면, 그들은 프로젝트 폴더를 만들 수 있습니다. 그 후 project_created가 1로 업데이트되었습니다. 프로젝트 이름 nnext를 노란색 폴더 아이콘에 쓰려고합니다.

enter image description here

+0

를 사용할 수 있습니까? 동일한 project_directory에 대한 – Caleth

+0

그들은 전역 변수입니다. 나는 그들을 전역 클래스에 정의하고 그들을 주 클래스에 포함 시켰습니다. Project_created가 int @Caleth입니다. – dizel

+0

project_created가'QAbstractItemView *'입니까? 아니면 비슷한 포인터입니까? 현재 사용자가 무언가를 선택했을 때만 slotChangeName을 호출합니다. – Caleth

답변

0

당신은 쌍 [1] QObject (S)의 신호 QT의 슬롯기구를 사용할 필요가있다. int 변수를 변경해도 마술처럼 코드가 실행되는 것은 아니므로 여기에서 시도하는 것처럼 보입니다.

"프로젝트 만들기"대화 상자는 MainWindow가 연결할 수있는 신호를 정의하는 데 알맞은 곳입니다.

class ProjectCreateDialog : ... { 
    ... 
signals: 
    void projectCreated(QString); 
    ... 
} 

class MainWindow : ... { 
    ... 
    void createProject(); 
    public slots: 
    void slotChangeName(QString project_directory); 
    ... 
} 

void MainWindow::createProject() 
{ 
    ProjectCreateDialog dialog; 
    connect(&dialog, SIGNAL(projectCreated(QString)), this, SLOT(onChangeName(QString))); 
    dialog.exec(); 
} 

void MainWindow::onChangeName(QString project_directory) 
{ 
    ui->project_name->setText(project_directory); 
} 

[1] 글쎄, 당신은 project_created, 그리고 어디에가 정의 유형 같은 QObject 두 번