• 6730阅读
  • 3回复

[讨论]我用错了吗?setSectionResizeMode,无法自适应内容 [复制链接]

上一主题 下一主题
离线九重水
 

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


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

结果发现还是不能自适应内容拉伸竖直方向的表头。

求过来人解答,谢谢!

完整的代码如下:
  1. ui->stackedWidget->setStyleSheet("QHeaderView::section, QTableCornerButton::section{background-image: url(:/images/stockbg.png); font: 12pt;}"
  2.                                      "QTableView{font: 12pt ;}"
  3.                                      );
  4.     //沪深个股(所有),表(数据库),模型和视图
  5.     allStockTableModel = new QSqlTableModel(this);
  6.     allStockTableModel->setTable("stock");
  7.     allStockTableModel->setHeaderData(Stock_Id, Qt::Horizontal, tr("Stock Id"));
  8.     allStockTableModel->setHeaderData(Stock_Name, Qt::Horizontal, tr("Stock Name"));
  9.     allStockTableModel->select();
  10.     ui->allStockTableView->setModel(allStockTableModel);
  11.     ui->allStockTableView->setColumnHidden(Stock_Key, true);
  12.     ui->allStockTableView->setSelectionMode(QAbstractItemView::SingleSelection);
  13.     ui->allStockTableView->setSelectionBehavior(QAbstractItemView::SelectRows);
  14.     ui->allStockTableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
  15.     ui->allStockTableView->horizontalHeader()->setSectionsClickable(false);
  16.     ui->allStockTableView->verticalHeader()->setSectionsClickable(false);
  17.     //ui->allStockTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents );
  18.     //ui->allStockTableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch );
  19.     ui->allStockTableView->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents );//无法自适应内容!使用下面的代替。
  20.     /*ui->allStockTableView->verticalHeader()->setMinimumWidth(ui->allStockTableView->horizontalHeader()->fontInfo().pixelSize() *
  21.                                                              (QString::number(allStockTableModel->rowCount()).size())
  22.                                                              + 2);*/


离线九重水

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



离线kaon

只看该作者 2楼 发表于: 2017-02-08
把setSectionResizeMode放到最前面去?
离线九重水

只看该作者 3楼 发表于: 2017-02-08
回 kaon 的帖子
kaon:把setSectionResizeMode放到最前面去? (2017-02-08 12:15) 

也是不可以。我试过了。

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

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

这个问题先记一下再说。以后有时间再研究。
也希望有过经验的同学指点一二。
快速回复
限100 字节
 
上一个 下一个