查看完整版本: [-- 我用错了吗?setSectionResizeMode,无法自适应内容 --]

QTCN开发网 -> Qt基础编程 -> 我用错了吗?setSectionResizeMode,无法自适应内容 [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

九重水 2017-02-08 11:45

我用错了吗?setSectionResizeMode,无法自适应内容

我有一个表:stock,3000多个(没错,就是A股的数量);
用QTableView显示。(很多个QTableView被装在一个QStackedWidget里面)
情况一:我没有使用setStyleSheet设置外观的时候,竖直方面的表头它是可以自适应内容的。(这时没有使用setSectionResizeMode)。
现在的情况是,我使用:
  1. ui->stackedWidget->setStyleSheet("QHeaderView::section, QTableCornerButton::section{background-image: url(:/images/stockbg.png); font: 12pt;}"
                                         "QTableView{font: 12pt ;}"
                                         );
来设置QStackedWidget里面的QTableView和QHeadView的背景和字体。
发现竖直方向的表头已经装不下内容(显示股票的数量)。


于是我用了setSectionResizeMode。
  1. ui->allStockTableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents );

结果发现还是不能自适应内容拉伸竖直方向的表头。
[attachment=16424]
求过来人解答,谢谢!

完整的代码如下:
  1. ui->stackedWidget->setStyleSheet("QHeaderView::section, QTableCornerButton::section{background-image: url(:/images/stockbg.png); font: 12pt;}"
                                         "QTableView{font: 12pt ;}"
                                         );

        //沪深个股(所有),表(数据库),模型和视图
        allStockTableModel = new QSqlTableModel(this);
        allStockTableModel->setTable("stock");
        allStockTableModel->setHeaderData(Stock_Id, Qt::Horizontal, tr("Stock Id"));
        allStockTableModel->setHeaderData(Stock_Name, Qt::Horizontal, tr("Stock Name"));

        allStockTableModel->select();

        ui->allStockTableView->setModel(allStockTableModel);
        ui->allStockTableView->setColumnHidden(Stock_Key, true);
        ui->allStockTableView->setSelectionMode(QAbstractItemView::SingleSelection);
        ui->allStockTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
        ui->allStockTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
        ui->allStockTableView->horizontalHeader()->setSectionsClickable(false);
        ui->allStockTableView->verticalHeader()->setSectionsClickable(false);
        //ui->allStockTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents );
        //ui->allStockTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch );
        ui->allStockTableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents );//无法自适应内容!使用下面的代替。
        /*ui->allStockTableView->verticalHeader()->setMinimumWidth(ui->allStockTableView->horizontalHeader()->fontInfo().pixelSize() *
                                                                 (QString::number(allStockTableModel->rowCount()).size())
                                                                 + 2);*/



九重水 2017-02-08 11:50
我知道使用setMinimumWidth或类似函数可以让竖直的表头看起来更适应内容。
但是用了setStyleSheet设置字体和背景之后无法自适应内容(setSectionResizeMode函数),
我很不解。
求过来人解答,谢谢。
  1. ui->allStockTableView->verticalHeader()->setMinimumWidth(ui->allStockTableView->horizontalHeader()->fontInfo().pixelSize() *
                                                                 (QString::number(allStockTableModel->rowCount()).size())
                                                                 + 2);




kaon 2017-02-08 12:15
把setSectionResizeMode放到最前面去?

九重水 2017-02-08 13:49
kaon:把setSectionResizeMode放到最前面去? (2017-02-08 12:15) 

也是不可以。我试过了。

这个问题比较奇怪,这个问题是在setStyleSheet之后才产生的。
我猜是不是跟这个也有关联。

现在我直接用setMinimumWidth函数设置竖直方向表头的宽度,虽然不灵活,但很方便直观。

这个问题先记一下再说。以后有时间再研究。
也希望有过经验的同学指点一二。


查看完整版本: [-- 我用错了吗?setSectionResizeMode,无法自适应内容 --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled