Qt C ++的信号和插槽

时间:2017-05-22 13:15:09

标签: c++ qt qt-signals

我正在研究信号和插槽。

这是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);
}

创建项目时,全局变量&#34; project_created&#34;更新为1.我想在&#34; project_created&#34;时编写标签上的项目目录。更新。我该怎么办?

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

1 个答案:

答案 0 :(得分:0)

你需要一对[{1] QObject来使用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]好吧,你可以使用相同的QObject两次