c++ 如何在QT Creator中将新的小部件变量共享给产生它的父类

stszievb  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(129)

我有一个负责设备配置的类。在这个类中,我有一个UI窗口,当按下按钮时会出现。这个UI窗口是一个配置窗口,用户可以在其中插入两个浮点值。我想将这些浮点值保存到父类中。我没有意识到在QT中,一旦窗口打开,程序就会继续循环。所以我不需要创建一个“Get”函数,因为当我关闭窗口时,示例已经被销毁了。
foo_ui.h

namespace Ui {
class foo;
}

class foo : public QFrame
{
    Q_OBJECT

public:
    explicit foo(QWidget *parent = 0, instrument_class *instrument=0);
    ~foo();

signals:
    void openWindow(foo *obj);

private:
    struct varsToUpdate{
        float A;
        float B;
        Qstring D;
        int F;
    }
}

bar_ui.h

namespace Ui {
class bar;
}

class bar : public QWidget
{
    Q_OBJECT

public:
    explicit bar(QWidget *parent = nullptr);
    ~bar();

private:
    typedef struct  {
        float A;
        float B;
    } userData;
}

foo_ui.cpp

foo::foo(QWidget *parent, instrument_class *instrument) :
    QFrame(parent),
    ui(new Ui::foo)
{
    ui->setupUi(this);
}

void foo::on_btnSaveFoo_clicked()
{
    ClassB *bar = new ClassB(); // I want to pass some pointer to the foo class so it can directly update variables from within that class.

    bar->show(); // spawns new window that can take 2 floats

    // Then once the bar window is closed, save the variables into the foo struct
    VarsToUpdate varsToUpdate;
    varsToUpdate.A = returnedFloatValue.A;
    varsToUpdate.B = returnedFloatValue.B;
}

bar_ui.c

bar::bar(QWidget *parent, foo *obj) :
    QWidget(parent),
    ui(new Ui::bar)
{
    ui->setupUi(this);
    ui->lineEdit_A->setText("0.0000");
    ui->lineEdit_B-userData>setText("0.0000");

    connect(this, SIGNAL(sig_UserDataUpdateBox(QString, QString)), this, SLOT(sl_UserDataUpdateBox(QString,QString)),Qt::QueuedConnection);
}

bar::~bar()
{
    delete ui;
}

void bar::on_btnClose_clicked()
{
    this->close();
}

void bar::on_btnSaveBar_clicked()
{
    // Save data here
    userData userdata;

    userdata.A = ui->lineEdit_A->text().toFloat();
    userdata.B = ui->lineEdit_B->text().toFloat();

    emit sig_UserDataUpdateBox( "Data Updated", "Config update applied.");
    this->close();
}

现在,在foo::on_btnSaveFoo_clicked()中,我尝试用逻辑“当在另一个窗口中单击保存时,保存变量”来生成一个信号,但是我得到了关于信号语法的编译错误。我觉得我在尝试信号和插槽的正确路径上,但是我似乎不能在两个不同的类上得到正确的操作。
我也尝试过通过将bar构造函数修改为bar(QWidget *parent = nullptr, foo *obj = 0);来传递指向父类的指针,但收到'语法错误:当我尝试传入指向UI配置类的指针时,将返回标识符。
UI看起来类似于其中类A = foo,类B = bar

fcg9iug3

fcg9iug31#

您可以执行以下操作:
1.覆盖类B中的void QWidget::closeEvent(QCloseEvent *event)方法。在此方法中,使用为Var AVar B字段输入的值发出一些信号
1.在类A中,连接到类B的信号并相应地捕获值

**注意:**必须在void QWidget::closeEvent(QCloseEvent *event)方法中发出信号后调用event->accept();

相关问题