解决qt中使用QStackedLayout切回使用了ResizeToContents来根据文本实现列宽自适应的tableWidget表格页面时表格崩溃无响应的问题

2024年1月19日 09:35 ry 354

最近再捣鼓qt,遇到一个奇怪的bug,我的需求是通过QStackedLayout布局管理器来实现页面切换,由于我的每隔页面都是tableWidget表格,而我有一个表格是使用了

tablewidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);

这个方法来实现根据文本自适应列宽,很好的解决了我的需求,但是发现我点击其他页面再次切回我的这个表格时,点击这个表格中任何内容,都是开始出现崩溃了,页面无反应,卡死了,遇到个这样的bug,便开始四处搜索答案,后面感觉应该是线程阻塞的原因,这是我之前的代码

void Widget::on_radioButton_jx_toggled(bool checked)
{
    tablewidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
    slayout->setCurrentIndex(0);

    if(checked&&flagFirst&&!isProxyEnabled())
    {

        //显示精选导出部件
        ui->groupBox->setHidden(false);
        emit startJx(ST,BJ,0);
        //启动线程
        t1->start();

        //启动强度的线程
        emit startQd();
        t11->start();



    }

}

后面我尝试加个延迟还是不行,最后我在延迟的基础上再切回页面时先转回去再根据文本自适应列宽就行了,我的更改后的代码如下所示

void Widget::on_radioButton_jx_toggled(bool checked)
{
    ui->tableWidget1->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
    slayout->setCurrentIndex(0);

    if(checked&&flagFirst&&!isProxyEnabled())
    {

        //显示精选导出部件
        ui->groupBox->setHidden(false);
        emit startJx(ST,BJ,0);
        //启动线程
        t1->start();

        //启动强度的线程
        emit startQd();
        t11->start();

        // 使用 QTimer 延迟一段时间后再调整列宽
        QTimer::singleShot(1000, this, [=]
        {
            onAdjustColumnWidth(ui->tableWidget1);
        });


    }

}
void Widget::onAdjustColumnWidth(QTableWidget *tablewidget)
{
    // 在这里进行列宽的自适应调整
    tablewidget->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
}

经过我的测试,延迟1秒就不会崩溃了,低于1秒很容易崩溃,不知道为啥,这个奇怪的bug

如果上述代码帮助您很多,可以打赏下以减少服务器的开支吗,万分感谢!

欢迎发表评论~

点击此处登录后即可评论


评论列表
暂时还没有任何评论哦...

赣ICP备2021001574号-1

赣公网安备 36092402000079号