當前位置:編程學習大全網 - 源碼下載 - 如何QTreeWidget的水平滾動條自動出現

如何QTreeWidget的水平滾動條自動出現

就在構造函數裏面加上以下兩行代碼即可:

//根據內容自動設置列寬

ui->treeWidget->header()->setResizeMode(QHeaderView::ResizeToContents);

ui->treeWidget->header()->setStretchLastSection(false);

在解決完上述問題後,又遇到壹個問題,就是用鼠標左鍵或者右鍵單擊QTreeWidget裏面的選項時,水平滾動條會自動跑到最左邊,雙擊不會出現這個問題,詳細查閱了QTreeWidget的實現代碼,在其父類中有個事件處理函數void QAbstractItemView::timerEvent(QTimerEvent *event),加了壹個滾動處理,這裏真是有點暈了,它的註釋就是“we only get here if there was no double click”,大家可以看下這裏為什麽要加這個滾動處理。

解決方法如下(我已經對QTreeWidget進行了二次封裝,就直接在這上面改的,不封裝照樣可以實現,原理是壹樣的):

1.加兩個變量,記錄是否有選項被點擊,壹個記錄點擊時的水平滾動條位置

bool m_isItemClicked;

int m_horizontalScrollBarPos;

2.對兩個事件進行處理

connect(ui->treeWidget->horizontalScrollBar(), SIGNAL(valueChanged(int)), this,SLOT(scrollbarchange(int)));

void MainWindow::on_treeWidget_itemClicked(QTreeWidgetItem *item, int column)

{

m_isItemClicked = true;

m_horizontalScrollBarPos = ui->treeWidget->horizontalScrollBar()->sliderPosition();

}

void MainWindow::scrollbarchange(int value)

{

if (m_isItemClicked)

{

ui->treeWidget->horizontalScrollBar()->setValue(m_horizontalScrollBarPos);

m_isItemClicked = false;

}

}

  • 上一篇:野馬戰略指示器源代碼
  • 下一篇:rocketmq總結以及自動化部署策略
  • copyright 2024編程學習大全網