我有一些Qt应用程序与QPlainTextEdit在标签小工具。当试图在它上面做一个指针时
QPlainTextEdit *w = (QPlainTextEdit*)ui->tabWidget->widget(0)并调用document()方法
w->document()我得到了一个段错误。
但是如果我直接调用document,例如ui->mainEdit->document(),那么一切都会正常工作。
有人能给我解释一下为什么会这样吗?
发布于 2010-04-06 09:56:21
您想要做的是:
QPlainTextEdit *w = ui->mainEdit;然后w->document()将返回您想要的内容。因为在强制转换ui->tabWidget->widget(0);时,会给出一个指向选项卡页对象的指针,所以出现了分段错误。当你将其强制转换为QPlainTextEdit*时,我们是在告诉你的程序把不代表QPlainTextEdit的一部分内存当作QPlainTextEdit。这会在您调用w->document()时造成麻烦,因为它试图访问的内存位置并不是它期望从属于QPlainTextEdit的内存中访问的位置。
发布于 2010-04-05 20:51:16
我几乎可以肯定,一定是tabWidget内部ui->tabWidget->widget(0)返回容器小部件。尝试使用qDebug() << ui->tabWidget->widget(0)->metaObject()->className(),查看打印的内容。可能只是"QWidget“而不是"QPlainTextEdit”。您的编辑位于此小部件的布局内
发布于 2010-04-06 01:05:50
您可以使用qobject_cast确保它返回正确的类型。
QPlainTextEdit *w = qobject_cast<QPlainTextEdit*>(ui->tabWidget->widget(0));
if (w)
{
...
}如果类型不是QPlainTextEdit*,它将返回0。
如上所述,widget(0)可能不会返回您想要的内容-并且可能包含一个容器或其他一些项,并且可能不是您想要的访问小部件的方式,除非没有其他方法。
https://stackoverflow.com/questions/2577789
复制相似问题