Russian Qt Forum
Ноябрь 24, 2024, 17:02 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Не могу додумать как правильно регулировать размер QHeaderView  (Прочитано 2980 раз)
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
Но рассчитать не пойму как.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Октябрь 02, 2012, 15:33 »

http://qt-project.org/doc/qt-5.0/qfontmetrics.html#width ?
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
CJ1
Гость
« Ответ #2 : Октябрь 02, 2012, 15:59 »

Не, мне надо вот понять как сам алгоритм придумать, после кокого символа вставлять \r\n
Записан
CJ1
Гость
« Ответ #3 : Октябрь 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));
       }
 
   }
}
Записан
CJ1
Гость
« Ответ #4 : Октябрь 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));
       }
       }
 
   }
}
Записан
CJ1
Гость
« Ответ #5 : Октябрь 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));
       }
   }
 
}
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.21 секунд. Запросов: 23.