(解释来源于百度经验)
①栈(操作系统):由操作系统自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
②堆(操作系统): 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收,分配方式倒是类似于链表。
以添加按钮组件为例。
(1)在.h文件中添加如下代码。
QPushButton *p_button;
在.c文件中添加如下代码。
p_button=new QPushButton(this);
p_button->setText(QString::fromLocal8Bit("点我"));
(2) 在.h文件中添加如下代码。
QPushButton m_button;
在.c文件中添加如下代码。
QPushButton m_button(this);
m_button.setText(QString::fromLocal8Bit("点我"));
(3)在.h文件中添加如下代码。
QPushButton m_button;
在.c文件中添加如下代码。
m_button.setText(QString::fromLocal8Bit("点我"));
通过创建三个窗口,分别用上述三种方式进行创建,以此来进行对比。
在.h中添加如下代码。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
class CMainWindow:public QWidget
{
Q_OBJECT
public:
CMainWindow(QWidget *parent = 0);
~CMainWindow();
protected:
void createUi();
protected slots:
void slotButtonDown();
protected:
QPushButton *p_button;
int m_index;
};
#endif // MAINWINDOW_H
在.c中添加如下代码。
#include "mainWindow.h"
CMainWindow::CMainWindow(QWidget *parent)
:QWidget(parent)
{
m_index = 0;
createUi();
}
CMainWindow::~CMainWindow()
{
}
void CMainWindow::createUi()
{
QVBoxLayout *layout = new QVBoxLayout();
p_button=new QPushButton(this);
p_button->setText(QString::fromLocal8Bit("点我"));
connect(p_button,SIGNAL(released()),this,SLOT(slotButtonDown()));
layout->addWidget(p_button);
this->setLayout(layout);
}
void CMainWindow::slotButtonDown()
{
QString str = QString::fromLocal8Bit("点我 %1").arg(m_index++);
if(p_button)
p_button->setText(str);
}
编译运行结果如下。
在.h中添加如下代码。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
class CMainWindow:public QWidget
{
Q_OBJECT
public:
CMainWindow(QWidget *parent = 0);
~CMainWindow();
protected:
void createUi2();
protected slots:
void slotButtonDown();
protected:
QPushButton m_button;
int m_index;
};
#endif // MAINWINDOW_H
在.c中添加如下代码。
#include "mainWindow.h"
CMainWindow::CMainWindow(QWidget *parent)
:QWidget(parent)
{
m_index = 0;
createUi2();
}
CMainWindow::~CMainWindow()
{
}
void CMainWindow::createUi2()
{
QVBoxLayout *layout = new QVBoxLayout();
QPushButton m_button(this);
m_button.setText(QString::fromLocal8Bit("点我"));
connect(&m_button,SIGNAL(released()),this,SLOT(slotButtonDown()));
layout->addWidget(&m_button);
this->setLayout(layout);
}
void CMainWindow::slotButtonDown()
{
QString str = QString::fromLocal8Bit("点我 %1").arg(m_index++);
if(p_button)
p_button->setText(str);
}
编译运行结果如下。
在.h中添加如下代码。
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
class CMainWindow:public QWidget
{
Q_OBJECT
public:
CMainWindow(QWidget *parent = 0);
~CMainWindow();
protected:
void createUi2();
void createUi3();
protected slots:
void slotButtonDown();
protected:
QPushButton m_button;
int m_index;
};
#endif // MAINWINDOW_H
在.c中添加如下代码。
#include "mainWindow.h"
CMainWindow::CMainWindow(QWidget *parent)
:QWidget(parent)
{
m_index = 0;
p_button = NULL;
createUi3();
createUi2();
}
CMainWindow::~CMainWindow()
{
}
void CMainWindow::createUi2()
{
QVBoxLayout *layout = new QVBoxLayout();
QPushButton m_button(this);
m_button.setText(QString::fromLocal8Bit("点我"));
connect(&m_button,SIGNAL(released()),this,SLOT(slotButtonDown()));
layout->addWidget(&m_button);
this->setLayout(layout);
}
void CMainWindow::createUi3()
{
QVBoxLayout *layout = new QVBoxLayout();
//QPushButton m_button(this);
m_button.setText(QString::fromLocal8Bit("点我"));
connect(&m_button,SIGNAL(released()),this,SLOT(slotButtonDown()));
layout->addWidget(&m_button);
this->setLayout(layout);
}
void CMainWindow::slotButtonDown()
{
QString str = QString::fromLocal8Bit("点我 %1").arg(m_index++);
if(p_button)
p_button->setText(str);
}
编译运行结果如下。