我有一个负责设备配置的类。在这个类中,我有一个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
:
1条答案
按热度按时间fcg9iug31#
您可以执行以下操作:
1.覆盖类B中的void QWidget::closeEvent(QCloseEvent *event)方法。在此方法中,使用为
Var A
和Var B
字段输入的值发出一些信号1.在类A中,连接到类B的信号并相应地捕获值
**注意:**必须在
void QWidget::closeEvent(QCloseEvent *event)
方法中发出信号后调用event->accept();