关于MainWindow调用自定义类的问题

王大贵 2014-11-21 09:25:39
工具ubuntukylin14.04 + Qt5.3 + g++4.8
书是GUI C++ Qt4编程

是这样的,Dialog是一个自定义类,实现一个对话框功能
书里第3和第4章要做个MainWindow的程序(这例子太TM长了。。。。。。)

在MainWindow类声明里
class MainWindow:public QMainWindow
{
.
private:
Dialog* dialog; //声明这个自定义类
.
.
private slots:
void find(); //私有槽,用于显示对话框dialog
};
.

然后这里要在MainWindow里面,点击菜单选项find的时候调用对话框Dialog

私有槽
void MainWindow::find()
{
if(!dialog) //就是这句问题。。
dialog = new Dialog(this);
dialog->show();
}
然后我在构造函数里把这个槽和菜单里的QAction连接起来

我的设想是if(!dialog) 这句先判断是否已经有Dialog对话框了,如果已经有了就补创建Dialog对象
但程序编译完成后,其他功能都正常,但一点击菜单的find选项(弹出对话框dialog)系统就显示 段错误

然后我把if(!dialog) 这句注释掉了,编译完成后点击find选项能弹出对话框,但由于没有判断功能,所以点几次find就跳几个对话框出来

PS:这玩意还没完成。

我想问下为什么这个判断会造成段错误,书上例子的代码是
if(!findDialog) 和我的相比只是变量名不同而已。。。。
...全文
685 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
王大贵 2014-11-21
  • 打赏
  • 举报
回复
引用 7 楼 dbzhang800 的回复:
没必要继续贴书中的这些东西了(你没也贴到点子上)。 你想治标:大家一开始都告诉你答案了(无论是在qtcn还是在csdn)。你要治本:找本C++的书或其网上资料,花几个月时间补补。
这你都不会啊? 这种东西你还要来问? 这么简单的东西还要说么? 这不是很明显的问题么? 。 。 。 请继续补充.
dbzhang800 2014-11-21
  • 打赏
  • 举报
回复
没必要继续贴书中的这些东西了(你没也贴到点子上)。 你想治标:大家一开始都告诉你答案了(无论是在qtcn还是在csdn)。你要治本:找本C++的书或其网上资料,花几个月时间补补。
王大贵 2014-11-21
  • 打赏
  • 举报
回复
引用 3 楼 dbzhang800 的回复:
[quote=引用 2 楼 qazaq407 的回复:]
而且作为判断条件,!野指针 应该是true才对。。。


??[/quote]
书里的例子
类声明

书上的例子对话框名字是findDialog我写的类是Dialog其他都一样
然后在调用这个对话框(类),先要判断是否已经有这样一个对话框打开了,书上是这样判断的
dbzhang800 2014-11-21
  • 打赏
  • 举报
回复
补补C++的基础吧。Qt是C++的库,C++基础不扎实的话,学起来会事倍功半的。 就比如你这儿的野指针问题,Qt的书或者手册中,一般都不会涉及的。但是C/C++的书中,都会告诉你怎么做
王大贵 2014-11-21
  • 打赏
  • 举报
回复
引用 3 楼 dbzhang800 的回复:
[quote=引用 2 楼 qazaq407 的回复:] 而且作为判断条件,!野指针 应该是true才对。。。
??[/quote] 书上说在调用对话框Dialog之前有3中情况 1 这是第一次调用 2 以前调用过,但用户已经关闭了他 3 以前调用过,现在还是可见的 所以点击菜单,要判断这个对话框是否已经被打开,我注释掉这句后等于不判断是否已经存在这个对话框,所以每次点击菜单的时候都会新出现一个对话框
dbzhang800 2014-11-21
  • 打赏
  • 举报
回复
引用 2 楼 qazaq407 的回复:
而且作为判断条件,!野指针 应该是true才对。。。
??
王大贵 2014-11-21
  • 打赏
  • 举报
回复
引用 1 楼 IBM123 的回复:
说明你的dialog没有在构造函数中初始化为NULL,是个随机的野指针,应该是: MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent) ,dialog(NULL) { }
书上就是这么初始化的 而且作为判断条件,!野指针 应该是true才对。。。
ibm123 2014-11-21
  • 打赏
  • 举报
回复
说明你的dialog没有在构造函数中初始化为NULL,是个随机的野指针,应该是: MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent) ,dialog(NULL) { }

16,215

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧