C++ Qt C和x2B的信号和插槽+;

C++ Qt C和x2B的信号和插槽+;,c++,qt,qt-signals,C++,Qt,Qt Signals,我正在处理信号和插槽 这是主窗口 .... public slots: void slotChangeName(); .... mainwindow.cpp #include<globals.h> MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { QObject::connect(project_created,SIGNAL(selectionCh

我正在处理信号和插槽

这是主窗口

....
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);
}
globals.cpp

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

// ALL THE GLOBAL DEFINITIONS

int project_created = 0;
QString project_directory = "";
#包括“globals.h”
#包括
//所有全球定义
int project_created=0;
QString项目_目录=”;
当人们单击新项目时,他们可以创建一个项目文件夹。之后,创建的项目更新为1。我想将项目名称nnext写入黄色文件夹图标


您需要一对[1]的
QObject
s来使用QT的信号和插槽机制。int变量的更改不会神奇地导致代码被执行,这就是您在这里尝试的

“创建项目”对话框是定义主窗口可以连接到的信号的合理位置

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
两次

创建了什么类型的项目,它在哪里定义?与project_Directory相同,它们是全局变量。我在全局类中定义了它们,并将它们包含在主类中。创建的项目是int@cale这个项目创建了一个
qabstractemview*
或类似的指针?当前仅当用户在创建的项目中选择某个内容时,才调用slotChangeNameis@Caleth我已经编辑了代码。你可以看到减退。
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);
}