C++ 类别';成员变量在运行时分配(通过';新建';),但不分配';不坚持
我已经声明了一个成员数组来存储一组Qt控件小部件(QLineEdit)的指针 在主代码中,我以编程方式创建这些小部件并分配,但它们仅在函数处于作用域时才可访问:C++ 类别';成员变量在运行时分配(通过';新建';),但不分配';不坚持,c++,qt,C++,Qt,我已经声明了一个成员数组来存储一组Qt控件小部件(QLineEdit)的指针 在主代码中,我以编程方式创建这些小部件并分配,但它们仅在函数处于作用域时才可访问: // MyGui.h class myGui : public QMainWindow, private Ui::uiFormWin { Q_OBJECT public: MyGui(QMainWindow *parent = 0);
// MyGui.h
class myGui : public QMainWindow, private Ui::uiFormWin
{
Q_OBJECT
public:
MyGui(QMainWindow *parent = 0);
Test();
private:
QTimer *pUiTimer;
QLineEdit* le2T[ 32 ];
public slots:
void GuiUpdate(void);
}
// MyGui.c
MyGui::MyGui(QMainWindow *parent) : QMainWindow(parent)
{
// Create Objects and Assign
for ( int i = 0 ; i < 32; i++ ){
le2T[ i ] = new QLineEdit (this);
}
// This Displays fine:
le2T [ 0 ]->setText ("Hello");
// Setup Timer To Update Line Edit Later
pUiTimer = new QTimer(this);
pUiTimer->setInterval(100);
connect(pUiTimer, SIGNAL(timeout()), this, SLOT(GuiUpdate()) );
}
void MyGui::GuiUpdate( void )
{
// This next line causes Run-Time Crash -- le2T[0] object is null!
le2T [ 0 ]->setText ("World"); // Error
}
我如何在运行时创建一个小部件数组,并将其另存为成员变量,以便可以从类中的任何方法访问它们?哪个版本的QT?也许可以打印出
这个在GuiUpdate
中的内容,并检查它是否确实是正确的地址为什么您的源代码有QLineEdit*le2T[32]代码>但是你的代码片段在结尾处有QLineEdit le2T[32]代码>?我使用QT 5.3,但我怀疑这可能是对C++ /范围THY的普遍误解。在GuiUpdate中,我可以操作Gui窗口的其他方面,而不是动态创建的任何控件小部件。底部的代码段是当我尝试使用QLineEdit成员变量而不是QLineEdit指针时,代码的其他部分可能会出现缓冲区溢出,这可能会无意中写入le2T指针数组地址。通过调试,您可以在计时器调用前后检查数组的内容,并检查地址是否保持不变。
.h
QLineEdit le2T[ 32 ];
.cpp
le2T[ 0 ].setText ("World"); // Error