Russian Qt Forum

Qt => Вопросы новичков => Тема начата: CJ1 от Октябрь 02, 2012, 15:31



Название: Не могу додумать как правильно регулировать размер QHeaderView
Отправлено: CJ1 от Октябрь 02, 2012, 15:31
Обрабатываю сигнал от QHeaderView
Код
C++ (Qt)
void MainWindow::slot_horizHeadRes(int p1, int p2, int p3)
{
   QString s;
   s = ui->tableWidget->horizontalHeaderItem(p1)->text();
   QFont f(s);
   QFontMetrics fm(f);
}
 
 

А как изменить строчку так чтоб она в несколько рядов ставилась в зависимости от размера QHeaderView?
Надо в строчку засовывать \r\n
Но рассчитать не пойму как.


Название: Re: Не могу додумать как правильно регулировать размер QHeaderView
Отправлено: Пантер от Октябрь 02, 2012, 15:33
http://qt-project.org/doc/qt-5.0/qfontmetrics.html#width ?


Название: Re: Не могу додумать как правильно регулировать размер QHeaderView
Отправлено: CJ1 от Октябрь 02, 2012, 15:59
Не, мне надо вот понять как сам алгоритм придумать, после кокого символа вставлять \r\n


Название: Re: Не могу додумать как правильно регулировать размер QHeaderView
Отправлено: CJ1 от Октябрь 02, 2012, 16:47
Сделал вот так это почти что нужно... но не то
Код
C++ (Qt)
void MainWindow::slot_horizHeadRes(int p1, int p2, int p3)
{
   QString s;
   QFont f;
   QFontMetrics fm(f);
   s = ui->tableWidget->horizontalHeaderItem(p1)->text();
 
   if (p2 < fm.width(s)-3)
   {
       s.insert(s.length()/2,"\r\n");
       ui->tableWidget->setHorizontalHeaderItem(p1, new QTableWidgetItem(s));
 
   } else {
 
       int l = s.indexOf("\r\n");
 
       if (l != -1){
           s.remove(l,2);
           ui->tableWidget->setHorizontalHeaderItem(p1, new QTableWidgetItem(s));
       }
 
   }
}


Название: Re: Не могу додумать как правильно регулировать размер QHeaderView
Отправлено: CJ1 от Октябрь 02, 2012, 17:33
Вот почти то что нужно!
Код
C++ (Qt)
void MainWindow::slot_horizHeadRes(int p1, int p2, int p3)
{
   QString s;
   QFont f;
   QFontMetrics fm(f);
   s = ui->tableWidget->horizontalHeaderItem(p1)->text();
 
   if (p2 < fm.width(s.left(s.indexOf("\r\n")))+5)
   {
       s.insert(s.left(s.indexOf("\r\n")).length()/2,"\r\n");
       ui->tableWidget->setHorizontalHeaderItem(p1, new QTableWidgetItem(s));
 
   } else {
       if (p2 > fm.width(s) ){
       int l = s.indexOf("\r\n");
       if (l != -1){
           s.remove(l,2);
           ui->tableWidget->setHorizontalHeaderItem(p1, new QTableWidgetItem(s));
       }
       }
 
   }
}


Название: Re: Не могу додумать как правильно регулировать размер QHeaderView
Отправлено: CJ1 от Октябрь 03, 2012, 08:37
Вроде получилось.
Вот если кому то надо
Код
C++ (Qt)
void MainWindow::slot_horizHeadRes(int p1, int p2, int p3)
{
   QString s;
   QFont f;
   QFontMetrics fm(f);
   s = ui->tableWidget->horizontalHeaderItem(p1)->text();
 
 
   if (p2 < fm.width(s.left(s.indexOf("\r\n"))) ){
       s.insert(s.left(s.indexOf("\r\n")).length()/2,"\r\n");
       ui->tableWidget->setHorizontalHeaderItem(p1, new QTableWidgetItem(s));
   }
 
 
   if (p2 < fm.width(s.mid(s.lastIndexOf("\r\n"))) ){
       int li = s.lastIndexOf("\r\n");
       int li_plus = (s.length() - li) / 2;
       li += li_plus;
       s.insert(li,"\r\n");
       ui->tableWidget->setHorizontalHeaderItem(p1, new QTableWidgetItem(s));
   }
 
 
   if (p2 > fm.width(s) ){
       int l = s.indexOf("\r\n");
       if (l != -1){
           s.remove(l,2);
           ui->tableWidget->setHorizontalHeaderItem(p1, new QTableWidgetItem(s));
       }
   }
 
}