• 8300阅读
  • 13回复

[提问]关于调用子窗口的问题 [复制链接]

上一主题 下一主题
离线linch2008
 

只看楼主 倒序阅读 楼主  发表于: 2011-04-17
编译运行成功后,点击链接子窗口问题,但关闭子窗口需要关闭两次,而且关闭父窗口出现内存只读警告??
各位大虾看我的代码吧,我是菜鸟,我用Ui画了个mainwindow.ui和dialog.ui

头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include "ui_dialog.h"

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QMainWindow *parent = 0);
~MainWindow();

private:
Ui::MainWindow *ui;
Ui::Dialog *dialogUi;

public slots:
void on_pushButton_clicked();
};

#endif // MAINWINDOW_H

类得定义
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QMainWindow *parent) :
QMainWindow(parent)
,ui(new Ui::MainWindow)
{
ui->setupUi(this);

connect(ui->pushButton,SIGNAL(clicked())
,this,SLOT(on_pushButton_clicked()));
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_clicked()
{
QDialog *dlg = new QDialog;
dialogUi->setupUi(dlg);
dlg->exec();
}

window.open('http://www.qtcn.org/bbs/attachment/Mon_1104/17_97874_98e570f5e0629bd.png?7');" style="max-width:700px;max-height:700px;" onload="if(is_ie6&&this.offsetWidth>700)this.width=700;" >
离线linch2008

只看该作者 1楼 发表于: 2011-04-17
注:PudhButton我都在Ui中用信号与槽设为退出
离线dbzhang800

只看该作者 2楼 发表于: 2011-04-17
去掉你的connect语句,或者给你的槽改个名字
离线linch2008

只看该作者 3楼 发表于: 2011-04-17
去掉connect了,子窗口只关闭一次就OK了,但关闭主窗口是还是有内存报错啊
坐等解决
离线linch2008

只看该作者 4楼 发表于: 2011-04-17
回 2楼(dbzhang800) 的帖子
是不是connect(ui->pushButton,SIGNAL(clicked()) ,this,SLOT(on_pushButton_clicked()));
和void MainWindow::on_pushButton_clicked() 功能一样啊
关闭主窗口是还是有内存报错
离线dbzhang800

只看该作者 5楼 发表于: 2011-04-17
Re:回 2楼(dbzhang800) 的帖子
引用第4楼linch2008于2011-04-17 10:19发表的 回 2楼(dbzhang800) 的帖子 :
是不是connect(ui->pushButton,SIGNAL(clicked()) ,this,SLOT(on_pushButton_clicked()));
和void MainWindow::on_pushButton_clicked() 功能一样啊
关闭主窗口是还是有内存报错


恩,但是出问题的地方应该你没贴出来。自己调试一下吧,这种内存问题应该是比较容易定位的
离线linch2008

只看该作者 6楼 发表于: 2011-04-17
去掉connect后还是出现问题
离线linch2008

只看该作者 7楼 发表于: 2011-04-17
回 5楼(dbzhang800) 的帖子
额,貌似我都贴上去了,除了主函数。
调试了,不太会啊,菜鸟一个,有大虾看看不?
context.rar (3 K) 下载次数:16
离线xhybba

只看该作者 8楼 发表于: 2011-04-17
我下载你上传的源代码编译后运行没有你说的错误
离线linch2008

只看该作者 9楼 发表于: 2011-04-17
回 8楼(xhybba) 的帖子
可以运行,但你按dialog键调用子程序后,关闭子程序再关闭主程序就有问题了
离线dbzhang800

只看该作者 10楼 发表于: 2011-04-17
Re:回 5楼(dbzhang800) 的帖子
引用第7楼linch2008于2011-04-17 10:37发表的 回 5楼(dbzhang800) 的帖子 :
额,貌似我都贴上去了,除了主函数。
调试了,不太会啊,菜鸟一个,有大虾看看不?
[图片]


建议先恶补一下C++的基础知识
1. 所有的变量使用之前要初始化,特别是指针!(你出错的根源)
2. 所有new出来的东西,都要有delete与之对应。(指定了parent的QObject及其子类你暂时可以认为是例外)
离线linch2008

只看该作者 11楼 发表于: 2011-04-17
回 10楼(dbzhang800) 的帖子
嗯,受教了,恶补c++去~~~~~~~~~~
离线azxswq000

只看该作者 12楼 发表于: 2011-04-18
你的dialogUi分配内存了吗?虽然不为空,但是却是无效的指针

    QDialog *dlg = new QDialog;
    dialogUi = new Ui::Dialog;
    dialogUi->setupUi(dlg);
    dlg->exec();

这样就没问题了
离线linch2008

只看该作者 13楼 发表于: 2011-04-18
回 12楼(azxswq000) 的帖子
太感谢了!!!!!!!!!!!!
快速回复
限100 字节
 
上一个 下一个