C++ (Qt)尝试使用我的主窗口上另一个小部件类的任何函数时出现读取访问错误

C++ (Qt)尝试使用我的主窗口上另一个小部件类的任何函数时出现读取访问错误,c++,qt,function,function-pointers,qtwidgets,C++,Qt,Function,Function Pointers,Qtwidgets,我想从我的mainwindow.cpp访问对话框类型小部件的一些功能 我在widget类中创建了一个简单的函数,它返回一个int,如下所示: dialog.h: public: int getRowCountData(); dialog.cpp: int Dialog::getRowCountData() { return ui->tableWidget->rowCount(); } 用法: 我的主窗口。h: private: Dial

我想从我的
mainwindow.cpp
访问对话框类型小部件的一些功能

我在widget类中创建了一个简单的函数,它返回一个int,如下所示:

dialog.h:

 public:  
      int getRowCountData();
dialog.cpp:

 int Dialog::getRowCountData()
 {
      return ui->tableWidget->rowCount();
 }
用法:

我的主窗口。h:

private:
    Dialog *dialog;
my Main Window.cpp:

dialog = new Dialog;


int count = dialog->getRowCountData();   <<<<<--------------this throws a read access error!
dialog=新建对话框;

int count=对话框->getRowCountData() 否。使用错误指针时出现问题。这个选项就是这个意思

检查对话框指针是否不为空,可能ui->tableWidget不存在。如果您想使用在Qt设计器中创建的小部件,应该调用setupUi

写下:

if(!dialog)
qDebug() << "fail";
else
{qDebug() << "good";//your call}
if(!dialog)

调用了qDebug()Setupui,我很容易看到getRowCountData()是主窗口上对话框实例的成员。没问题。@Rachael请看我的编辑。我也跟你说过对话。用这个代码。你失败了还是成功了?我现在明白你们在说什么了,我真的觉得自己像个傻瓜。将尽快为
对话框添加空检查(早上的第一件事)。感谢您坚持我的观点。问题是运行此代码的函数是在对话框小部件实例化之前调用的。对话框指针不是空的——它充满了垃圾(我已经在mainwindow.h类中初始化了,所以它不可能是空的)。很抱歉犯了这个愚蠢的错误,但谢谢你的帮助。我希望我不会再犯这个错误了。下次我将在调试之前睡觉,并在网站上发布我的问题。再次感谢。@Rachael不客气。但我还有一个建议。以后,请用
c++
标记创建您的问题(当然,如果您在问题中使用
c++
)。此外,编辑您的问题(这一个和最后一个),并向其添加
c++
标记(如果您能做到的话),因为您的问题更多的是
c++
,然后
Qt
,所以
c++
标记应该是。问题需要更多的代码,问题现在不可见。此外,bcaktrace也不错。如果是您现在在问题中指出的行,
dialog
指针为0。在Qt Creator中,转到带有
new Dialog
Dialog->
的行,并在两个
Dialog
名称上点击F2。它们是否将您带到同一个位置(可能是类的.h文件中的声明)?设置断点或为两者添加调试打印,以便在尝试使用之前查看是否确实创建了
对话框。