构造函数中的GUI类正在创建数据库类的新对象。看起来像这样:
GUI::GUI(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
Baza *plik = new Baza();
connect(ui.insertBtn, &QPushButton::clicked, this, &GUI::run);
}
我设法从QDialog获得用户输入:
void GUI::run() {
DialogInput dialog;
dialog.exec();
site_text = dialog.getSite();
}
我应该如何传递site_text
来在Baza
类中起作用?我需要使用在GUI构造函数中创建的对象(副本),但无法从GUI::run()
函数访问它。
答案 0 :(得分:5)
在let data = {
title: 'Chair',
tag: [
{name: 'Alpha'},
{name: 'Beta'}
]
};
return sequelize.transaction().then(t => {
return Product.updateOrCreate({
where: {title: data.title},
defaults: data,
transaction: t
}).then(res => {
let [product] = res;
return Promise.all(data.tag.map(tag => {
return Tag.updateOrCreate({
where: {name: tag.name},
defaults: tag,
transaction: t
}).then(res => {
let [tag] = res;
return Promise.resolve(tag);
}).catch(err => Promise.reject(err.message));
})).then(() => {
t.commit();
sequelize.close();
}).catch(err => Promise.reject(err));
}).catch(err => {
t.rollback();
sequelize.close();
});
});
的声明中添加plik
:
GUI
然后在构造函数中
class GUI : public QWidget {
// ...
Baza* plik;
};
按照您的代码立场,GUI::GUI(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
plik = new Baza();
connect(ui.insertBtn, &QPushButton::clicked, this, &GUI::run);
}
将在GUI构造函数完成后泄漏。
在析构函数中清理plik
:
plik
或者,使用GUI::~GUI()
{
// ...
delete plik;
}
将std::unique_ptr
存储在plik
中,因此您无需记住对其进行破坏。或者,如果GUI
从plik
派生而来(例如,用于信号和时隙),则可以将其作为QObject
的父项,Qt将处理该破坏。在这两种情况下,此建议均假设GUI
与plik
具有相同的生存期。
答案 1 :(得分:0)
在构造函数内部创建指针时,对象的作用域一直到构造函数的结尾。
您需要为GUI类创建一个全局私有变量,以使该变量可以被同一类中的所有方法访问。 Baza * pLink;
在构造函数中创建指针时,请不要忘记在Destruction中删除相同的指针。
class GUI : public QWidget{
//...
GUI();
~GUI();
private:
Baza * pLink;
}
GUI::GUI(QWidget *parent)
: QMainWindow(parent)
{
ui.setupUi(this);
pLink = new Baza();
connect(ui.insertBtn, &QPushButton::clicked, this, &GUI::run);
}
GUI::~GUI()
{
delete pLink;
}
void GUI::run() {
DialogInput dialog;
dialog.exec();
site_text = dialog.getSite();
/* use the pointer to call the method to pass site_text */
pLink->SomeMethod(site_text);
}
当您声明函数的局部变量和类的全局变量时,命名约定将发挥重要作用。
因此,请使用pLink
或考虑使用m_pLink
,其中m_
将被添加到所有全局变量,而p
将被添加到指针类型。