Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 类别';成员变量在运行时分配(通过';新建';),但不分配';不坚持_C++_Qt - Fatal编程技术网

C++ 类别';成员变量在运行时分配(通过';新建';),但不分配';不坚持

C++ 类别';成员变量在运行时分配(通过';新建';),但不分配';不坚持,c++,qt,C++,Qt,我已经声明了一个成员数组来存储一组Qt控件小部件(QLineEdit)的指针 在主代码中,我以编程方式创建这些小部件并分配,但它们仅在函数处于作用域时才可访问: // MyGui.h class myGui : public QMainWindow, private Ui::uiFormWin { Q_OBJECT public: MyGui(QMainWindow *parent = 0);

我已经声明了一个成员数组来存储一组Qt控件小部件(QLineEdit)的指针

在主代码中,我以编程方式创建这些小部件并分配,但它们仅在函数处于作用域时才可访问:

    // 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