2010-07-03 3 views
2

다음 코드를 만들어 본 적이 작동하지 않습니다Qt는 setColumnWidth는

m_selectCategoryTableWidget = new QTableWidget; 
m_selectCategoryTableWidget->setRowCount(0); 
m_selectCategoryTableWidget->setColumnCount(2); 

m_selectCategoryTableWidget->setHorizontalHeaderLabels(QStringList()<<tr("Category")<<tr("Number of items")); 
m_selectCategoryTableWidget->verticalHeader()->setVisible(false); 
m_selectCategoryTableWidget->horizontalHeader()->setStretchLastSection(true); 
//m_selectCategoryTableWidget->setColumnWidth(0,400); 
m_selectCategoryTableWidget->resizeColumnsToContents(); 
m_selectCategoryTableWidget->setColumnWidth(1,100); //this does not take effect 

이 도와주세요.

+0

........... so? –

+0

흠 .. 적용된 레이아웃을 확인해보십시오. 게시 된 코드로 말할 수있는 전부입니다. – liaK

+0

레이아웃이 잘못되었을 수 있습니까? – Narek

답변

3

Qt의 논리는 너무 커서 열 크기를 조정 한 후 스크롤 막대 영역이 열의 크기를 확인합니다. 그리고 모든 열의 너비의 합이 위젯의 ​​표시 너비보다 작 으면 마지막 열은 setColumnWidth()을 호출 한 결과 보이는 공간을 채우도록 크기가 조정됩니다. 사실 두 가지 크기 조정이 발생합니다. 축소 및 축소하여 확대합니다.

그래서 강의는 - 컨트롤의 보이는 너비를 가져오고, 원하는대로 크기를 다시 계산하고, 마지막 열을 제외한 모든 크기를 조정합니다. 2 열의 경우 매우 간단합니다.

int secondColumnWidth = 100; 
int firstColumnWidth = m_selectCategoryTableWidget->width() - secondColumnWidth; 

if (firstColumnWidth > 0) 
{ 
    m_selectCategoryTableWidget->setColumnWidth(0, firstColumnWidth); 
} 
else 
{ 
    m_selectCategoryTableWidget->resizeColumnsToContents(); 
} 

행운을 빈다!

+0

안녕하세요, 저는 QHeaderView의 속성 "stretchLastSection"을 간과했습니다 : http://doc.qt.nokia.com/4.6/qheaderview.html#stretchLastSection-prop 이것을 'false'로 설정하면 마지막 열의 너비를 자유롭게 변경할 수 있습니다. 그러나 컨트롤을 멋지게 유지하려면 위에서 설명한 솔루션을 적용해야합니다. –

2

첫 번째 열이 마지막 열 대신 나머지 공간을 채우도록 지정할 수도 있습니다. 불행하게도 사용자가 열의 크기를 수동으로 조정할 수 없게되는 것 같습니다.

int secondColumnWidth = 100; 
m_selectCategoryTableWidget->header()->setStretchLastSection(false); 
m_selectCategoryTableWidget->header()->setResizeMode(0, QHeaderView::Stretch); 
m_selectCategoryTableWidget->setColumnWidth(1, secondColumnWidth); 
+1

덕분에 내 하루가 qtableview에서 header() 대신에 myTableView-> horizontalHeader()를 사용하게되었습니다. –

0

이 자동으로 열을 맞게 크기를 조정합니다 ("보기"* QTableView이며, 모델은 QSqlQueryModel *)입니다.

static_cast<QTableView*>(view)->horizontalHeader() 
     ->resizeSections(QHeaderView::ResizeToContents); 

QFontMetrics fm(view->font()); 

for (int i = 0 ; i < model->record().count(); ++i) 
{ 
    int maxLength = 0; 

    for (int j = 0; j < model->rowCount(); ++j) 
    { 
     QString cell = model->record(j).value(i).toString(); 

     if (fm.width(cell) > maxLength) 
     { 
      maxLength = fm.width(cell); 
     } 
    } 
    QHeaderView& hv = *static_cast<QTableView*>(view)->horizontalHeader(); 

    if (maxLength > hv.sectionSize(i)) 
    { 
     hv.resizeSection(i, maxLength * 1.5); 
    } 
}