• 7108阅读
  • 8回复

Qt小程序运行崩溃的问题 [复制链接]

上一主题 下一主题
离线零度
 

只看楼主 倒序阅读 楼主  发表于: 2013-11-26
   请教一下前辈们一个问题
                      

文件

#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>
class QFontComboBox;//声明一个字体组合框类
class QPushButton;//声明一个按钮
class QFormLayout;//声明一个表单布局类
class QLabel;//声明一个标签类
class QComboBox;//声明一个组合框
class QSpinBox;//声明一个旋转框
class QLineEdit;//声明一个行编辑
/*
namespace Ui {
class MyWidget;
}*/
class MyWidget : public QWidget
{
    Q_OBJECT;

public:
    explicit MyWidget(QWidget *parent = 0);
    ~MyWidget();
private:
    //Ui::MyWidget *ui;
    QFontComboBox *fontComboBox;//用于字体组合框
    QPushButton *pushButton;//用于按钮
    QFormLayout *formLayout;//用于表单布局
    QLabel *labelXm;//用于姓名
    QLineEdit *lineEditXm;//用于姓名
    QLabel *labelXb;//用于性别
    QComboBox *comboBoxXb;//用于性别
    QLabel *labelNl;//用于年龄
    QSpinBox *spinBoxNl;//用于年龄
    QLabel *labelYx;//用于邮箱
    QLineEdit *lineEditYx;//用于邮箱
    QLabel *textEdit;//用于文本编辑
};
#endif // MYWIDGET_H


myWidget.cpp文件:

#include <QApplication>
#include "mywidget.h"
//#include "ui_mywidget.h"
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QFontComboBox>
#include <QPushButton>
#include <QFormLayout>
#include <QLabel>
#include <QComboBox>
#include <QSpinBox>
#include <QLineEdit>
//my layout Exercise 我的布局管理器练习
MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent)
    //ui(new Ui::MyWidget)
{
    //ui->setupUi(this);
    labelXm = new QLabel(tr("姓名 &N"));
    labelXb = new QLabel(tr("性别 &S"));
    labelNl = new QLabel(tr("年龄 &A"));
    labelYx = new QLabel(tr("邮箱 &M"));    QHBoxLayout *onLayout = new QHBoxLayout;
    onLayout->addWidget(fontComboBox);
    onLayout->addWidget(pushButton);
    QFormLayout *formLayout = new QFormLayout;
    formLayout->addWidget(labelXm);
    formLayout->addWidget(lineEditXm);
    formLayout->addWidget(labelXb);
    formLayout->addWidget(comboBoxXb);
    formLayout->addWidget(labelNl);
    formLayout->addWidget(spinBoxNl);
    formLayout->addWidget(labelYx);
    formLayout->addWidget(lineEditYx);    QVBoxLayout *underLayout = new QVBoxLayout;
    underLayout->addStretch();
    underLayout->addLayout(formLayout);
    underLayout->addWidget(textEdit);
    QVBoxLayout *mainLayout = new QVBoxLayout;
    mainLayout->addLayout(onLayout);
    mainLayout->addLayout(underLayout);
    setLayout(mainLayout);    setWindowTitle(tr("我的布局练习1"));
    setFixedHeight(sizeHint().height());
}MyWidget::~MyWidget()
{
    //delete ui;
}

main.cpp文件:
#include "mywidget.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
/*    MyWidget w;
    w.show();    return a.exec();
*/    MyWidget *widget = new MyWidget;
    widget->show();
    return a.exec();
}
貌似是内存的原因  由于是新手不知道是不是  也看不出来     麻烦了。。。
离线pain22

只看该作者 1楼 发表于: 2013-11-26
  w.show();    return a.exec();
*/    MyWidget *widget = new MyWidget;
    widget->show();
    return a.exec();

return a.exec(); 两次?
离线realfan

只看该作者 2楼 发表于: 2013-11-26
按你的代码,widget 是建立在堆上的,a 是建立在栈上的。widget 会在 a之后析构,即widget 的生命周期长于 a 的生命周期。MyWidget间接继承自QPaintDevice, 在 Qt 中,所有的 QPaintDevice 必须要在有 QApplication 实例的情况下创建和使用。所以,从这点上说,你的代码是有问题的。把widget建立在栈上(如你注释掉的代码那样)试试
离线wayne

只看该作者 3楼 发表于: 2013-11-27
QFormLayout 有问题
离线零度

只看该作者 4楼 发表于: 2013-11-27
回 1楼(pain22) 的帖子
哥们  这个只使用了一次  前面的注释掉了。
离线零度

只看该作者 5楼 发表于: 2013-11-27
回 2楼(realfan) 的帖子
  也许我是新手的原因  按你说的试了  咋还是不行  如果可以麻烦用代码写出来我看看  也学习一下。。。
离线零度

只看该作者 6楼 发表于: 2013-11-27
回 3楼(wayne) 的帖子
  可以指点一下吗?  也学习一下  麻烦了。。。
离线tompsontan

只看该作者 7楼 发表于: 2013-11-27
回 楼主(零度) 的帖子
mywidget构造函数里面没有用new给指针分配内存,包括pushButton、fontComboBox、lineEditXm、comboBoxXb,还有其他的自己检查一下
看淡得失
离线零度

只看该作者 8楼 发表于: 2013-11-28
回 7楼(tompsontan) 的帖子
  按照你指点的分配了内存后通过了  谢谢  
  也谢谢楼上几位朋友的建议只是我太菜没能弄明白  
  麻烦大家了!!!
快速回复
限100 字节
 
上一个 下一个