2017-05-22 101 views
-1

我正在處理信號和插槽。用於Qt C++的信號和插槽

這裏是mainwindow.h

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

mainwindow.cpp;

#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); 
} 

當創建了一個項目,全局變量,「project_created」,更新爲1。我想要寫在標籤上的項目目錄時,「project_created」更新。我需要做什麼?

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_created什麼類型的,並且它在哪兒定義? project_directory相同 – Caleth

+0

它們是全局變量。我已經在全局類中定義了它們,並將它們包含在主類中。 Project_created是int @Caleth – dizel

+0

project_created是一個'QAbstractItemView *'或類似的指針嗎?您目前只在用戶選擇內容時才調用slotChangeName project_created是 – Caleth

回答

0

需要一對[1]的QObject s至使用QT的信號和槽機構。一個int變量的變化不會奇蹟般地導致代碼被執行,這就是你在這裏嘗試的樣子。

您的「Create Project」對話框是定義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]好了,你可以使用相同的QObject兩次