首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QPlainTextEdit分段故障

QPlainTextEdit分段故障
EN

Stack Overflow用户
提问于 2010-04-05 17:59:26
回答 3查看 714关注 0票数 1

我有一些Qt应用程序与QPlainTextEdit在标签小工具。当试图在它上面做一个指针时

代码语言:javascript
复制
QPlainTextEdit *w = (QPlainTextEdit*)ui->tabWidget->widget(0)

并调用document()方法

代码语言:javascript
复制
w->document()

我得到了一个段错误。

但是如果我直接调用document,例如ui->mainEdit->document(),那么一切都会正常工作。

有人能给我解释一下为什么会这样吗?

EN

回答 3

Stack Overflow用户

发布于 2010-04-06 09:56:21

您想要做的是:

代码语言:javascript
复制
QPlainTextEdit *w = ui->mainEdit;

然后w->document()将返回您想要的内容。因为在强制转换ui->tabWidget->widget(0);时,会给出一个指向选项卡页对象的指针,所以出现了分段错误。当你将其强制转换为QPlainTextEdit*时,我们是在告诉你的程序把不代表QPlainTextEdit的一部分内存当作QPlainTextEdit。这会在您调用w->document()时造成麻烦,因为它试图访问的内存位置并不是它期望从属于QPlainTextEdit的内存中访问的位置。

票数 1
EN

Stack Overflow用户

发布于 2010-04-05 20:51:16

我几乎可以肯定,一定是tabWidget内部ui->tabWidget->widget(0)返回容器小部件。尝试使用qDebug() << ui->tabWidget->widget(0)->metaObject()->className(),查看打印的内容。可能只是"QWidget“而不是"QPlainTextEdit”。您的编辑位于此小部件的布局内

票数 0
EN

Stack Overflow用户

发布于 2010-04-06 01:05:50

您可以使用qobject_cast确保它返回正确的类型。

代码语言:javascript
复制
QPlainTextEdit *w = qobject_cast<QPlainTextEdit*>(ui->tabWidget->widget(0));
if (w)
{
...
}

如果类型不是QPlainTextEdit*,它将返回0。

如上所述,widget(0)可能不会返回您想要的内容-并且可能包含一个容器或其他一些项,并且可能不是您想要的访问小部件的方式,除非没有其他方法。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2577789

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档