找回密码
 立即注册
收起左侧

创建对象问题

4
回复
9198
查看
[复制链接]
累计签到:9 天
连续签到:1 天
来源: 2013-10-8 16:00:19 显示全部楼层 |阅读模式
1Qter豆
发现qt由类创建对象有很多种写法,诸如创建一个QPushButton对象。书上写QPushButton *button = new QPushButton("button",this);,有写button = new QPushButton("button",this);,有写QPushButton button;的不知道有什么区别。但实际使用的时候出现的问题还是比较多,我开始都是写第一种,但程序老是崩溃,例如:
#include <QtGui>
#include "mainwindow.h"
Widget::Widget(QWidget *parent)    :QWidget(parent){        this->setWindowTitle(tr("button label"));    QPushButton *button = new QPushButton("button",this);    QLabel *label = new QLabel("label",this);    QVBoxLayout *layout = new QVBoxLayout;    connect(button,SIGNAL(clicked()),this,SLOT(buttonClicked()));    layout->addWidget(label);        layout->addWidget(button);        this->setLayout(layout);}
void Widget::buttonClicked(){    label->setText("clicked");}这样写,一点按钮程序就崩溃掉了,我百思不得其解。后来把程序修改为就正确了
#include <QtGui>
#include "mainwindow.h"
Widget::Widget(QWidget *parent)    :QWidget(parent){        this->setWindowTitle(tr("button label"));    button = new QPushButton("button",this);    label = new QLabel("label",this);    layout = new QVBoxLayout;    connect(button,SIGNAL(clicked()),this,SLOT(buttonClicked()));    layout->addWidget(label);        layout->addWidget(button);        this->setLayout(layout);}
void Widget::buttonClicked(){    label->setText("clicked");}如果写成QPushButton button;程序中涉及button的->符号时都要改成.。自学有一个月了,差不多,进步好大,继续努力。

最佳答案

查看完整内容

1.直接在程序中定义的button,可以写成:QPushButton *button = new QPushButton("button",this); 不过这样在其他函数里面不好调用button。 2.可以先在.h中声明QPushButton *button; 然后在.cpp文件中使用button = new QPushButton("button",this); 这样在.cpp里面的其他函数里面也可以方便调用button。 3.一般不可以直接写QPushButton button; 这是临时变量,出了函数就销毁了。 ...
回复

使用道具 举报

累计签到:1572 天
连续签到:1 天
2013-10-8 16:00:20 显示全部楼层
1.直接在程序中定义的button,可以写成:QPushButton *button = new QPushButton("button",this);
不过这样在其他函数里面不好调用button。

2.可以先在.h中声明QPushButton *button;

然后在.cpp文件中使用button = new QPushButton("button",this);

这样在.cpp里面的其他函数里面也可以方便调用button。

3.一般不可以直接写QPushButton button;

这是临时变量,出了函数就销毁了。
参与人数 1人气 +1 收起 理由
xgqter + 1 对我帮助很大!

查看全部评分总评分 : 人气 +1

回复

使用道具 举报

累计签到:256 天
连续签到:1 天
2015-4-22 10:22:04 显示全部楼层
yafeilinux 发表于 2013-10-8 16:00
1.直接在程序中定义的button,可以写成:QPushButton *button = new QPushButton("button",this);
不过这样 ...

类似的在.cpp中使用xxx = new QXxxx();
在我需要用的函数中都要这样 还是可以在构造函数中这样之后 然后在各个函数中都可以使用xxx?
回复

使用道具 举报

累计签到:1572 天
连续签到:1 天
2015-4-22 22:53:00 显示全部楼层
z55716368 发表于 2015-4-22 10:22
类似的在.cpp中使用xxx = new QXxxx();
在我需要用的函数中都要这样 还是可以在构造函数中这样之后 然后 ...

一般在.h文件中声明,然后再构造函数中定义,在其他函数中可以直接使用。
回复

使用道具 举报

累计签到:256 天
连续签到:1 天
2015-4-23 08:27:29 显示全部楼层
yafeilinux 发表于 2015-4-22 22:53
一般在.h文件中声明,然后再构造函数中定义,在其他函数中可以直接使用。 ...

哦 好的 谢谢 最近在用QT 很多都不懂
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了