我正在疯狂地尝试在同一个文件中的另一个函数中使用变量:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
QLineEdit * street1BetSize = new QLineEdit("0"); // want to use these QLineEdit's
QLineEdit * street2BetSize = new QLineEdit("0");
QLineEdit * street3BetSize = new QLineEdit("0");
QLineEdit * street4BetSize = new QLineEdit("0");
QLineEdit * street5BetSize = new QLineEdit("0");
}
想在这里使用thos变量:
void MainWindow::runButtonClicked()
{
QVector<card> vDealt = cardDeck.deal_rand_cards(vDeck,3);
//qDebug()<<vStreetBets[0];
streetBetsList << street1BetSize << street2BetSize << street3BetSize << street4BetSize << street5BetSize;
QVector<int> vStreetBets;
for(int i=0;i<5;i++)
{
vStreetBets.append(streetBetsList[i]->text().toInt());
qDebug()<<"street bet: "<<vStreetBets[i];
}
}
就在这里,我正在
警告:C4189: 'street5BetSize':初始化局部变量但未引用
和
error: C2065: 'street5BetSize' : undeclared identifier
每一个。
我尝试将extern QLineEdit * street1BetSize;
添加到mainwindow.h,但这会给我一个“未解决的外部”错误。
答案 0 :(得分:1)
来自street1BetSize to street5BetSize
的变量是MainWindow构造函数中的局部变量,它们对其他函数不可见。要使其他类成员函数能够访问它们,可以将它们作为MainWindow类成员提升,因此变量状态在类之间共享。使用std::vector
QLineEdit对象应该是更好的解决方案而不是许多变量指针?
class MainWindow
{
public:
MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow),
streetBetSizes(5,QLineEdit("0"))
private:
// other member
std::vector<QLineEdit> streetBetSizes;
};
答案 1 :(得分:0)
将变量声明为MainWindow的成员,然后在构造函数中初始化它们:
class MainWindow : public QMainWindow
{
...
private:
QLineEdit* m_street1BetSize;
QLineEdit* m_street2BetSize;
QLineEdit* m_street3BetSize;
QLineEdit* m_street4BetSize;
QLineEdit* m_street5BetSize;
};
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
m_street1BetSize = new QLineEdit("0"); // want to use these QLineEdit's
m_street2BetSize = new QLineEdit("0");
m_street3BetSize = new QLineEdit("0");
m_street4BetSize = new QLineEdit("0");
m_street5BetSize = new QLineEdit("0");
}
然后你可以在MainWindow的任何方法中使用它们。
答案 2 :(得分:0)
如果您为每个QLineEdit
准备五个MainWindow
,那么您希望他们成为您班级的成员。只需将它们添加到您的类定义中:
class MainWindow
{
// ...
private:
// ...
QLineEdit* street1BetSize;
QLineEdit* street2BetSize;
QLineEdit* street3BetSize;
QLineEdit* street4BetSize;
QLineEdit* street5BetSize;
}
现在,每个MainWindow
对象都有5个指向QLineEdit
的指针。它们构成该对象的 state 的一部分,并且可以由其任何成员函数访问。现在将构造函数更改为以下内容,以便不重新定义名称:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
street1BetSize = new QLineEdit("0");
street2BetSize = new QLineEdit("0");
street3BetSize = new QLineEdit("0");
street4BetSize = new QLineEdit("0");
street5BetSize = new QLineEdit("0");
}
事实上,您最好使用成员初始化列表,就像您对QMainWindow
和ui
所做的那样:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), ui(new Ui::MainWindow),
street1BetSize(new QLineEdit("0")), street2BetSize(new QLineEdit("0")),
street3BetSize(new QLineEdit("0")), street4BetSize(new QLineEdit("0")),
street5BetSize(new QLineEdit("0"))
{ }
现在你的构造函数不需要做任何工作。
现在,您可以在street1BetSize
的其他成员函数中引用MainWindow
和朋友。但是,如果您有编号的变量,例如streetXBetSize
,则总是非常怀疑。这似乎是数组或容器的好地方。为什么不尝试std::vector<QLineEdit>
,然后您可以根据需要添加和删除QLineEdit
。您的班级定义现在具有:
class MainWindow
{
// ...
private:
// ...
std::vector<QLineEdit> streetBetSizes;
}
你的构造函数现在可以简单地执行:
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent), ui(new Ui::MainWindow)
{
for (int i = 0; i < 5; i++) {
streetBetSizes.push_back(new QLineEdit("0"));
}
}