首页 文章

访问QScrollarea中的滚动条会导致运行时故障

提问于
浏览
0

与QScrollAreas有一些问题..

我希望能够动态启用/禁用滚动条,因此我尝试实现

scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);`

这会导致应用程序终止代码255并且不输出任何内容 . 注释掉该行的输出正常 . 我可以用:

scrollArea->horizontalScrollBar()->setValue(0);

没有问题 . 我尝试了自定义QScrollArea的子类,看看是否可以让我修改qscrollbar,但同样的问题 . scrollArea在ui表单上构造,并在自定义displayWindow类中重新定位 .

有任何想法吗?

1 回答

  • 0

    为什么要在ui表单中构建一个滚动区域,然后在其他地方重新使用它?这不是一个问题,但这样做没有多大意义 . 您知道,我希望Qt Designer允许您使用自定义类,即使不编写任何插件 .

    但是,我不能重现你的问题 . 请创建一个再现它的sscce . 确保 scrollArea 不是 nullptr . 我打赌它是,或者它是一个悬空指针(指向解除分配的内存) . 以下在Qt 4和Qt 5上均可正常工作 . 水平滚动条可根据需要进行抑制 .

    #include <QApplication>
    #include <QScrollArea>
    #include <QLabel>
    #include <QScopedPointer>
    
    int main(int argc, char *argv[])
    {
        QApplication a(argc, argv);
        QScopedPointer<QScrollArea> area (new QScrollArea);
        QLabel * label = new QLabel(QString(300, 'm'));
        area->setWidget(label);
        area->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
        area->show();
        return a.exec();
    }
    

相关问题