crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

4 страниц V  < 1 2 3 4 >  
Тема закрытаНачать новую тему
> [РЕШЕНО] QTableView::resizeColumnsToContents, неожидаемое поведение, подстраивается под заголовок
kwisp
  опции профиля:
сообщение 16.1.2009, 16:03
Сообщение #11


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


извини за то что повторяюсь. считаю, что в данном контексте слово "требующимся" не означает что "по размеру содержимого".
может и ошибаюсь но предположений больше нет.
думаю стоит ковырять в сторону рекомендуемых размеров для элементов столбцов и строк.
ну конечно есть как всегда вариант через одно место с помощью QFontMetrics узнать размер строки и с помощью него менять ширину, но его я не предлагаю.:)

сейчас накатаю примерчик и посомотрю наглядно.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.1.2009, 17:38
Сообщение #12


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(kwisp @ 16.1.2009, 16:03) *
сейчас накатаю примерчик и посомотрю наглядно.


у меня так получилось если сделать
table.resizeColumnsToContents();
до заполнения то косячит

если после заполнения то все ок.
норма
#include <QApplication>
#include <QTableWidget>
#include <QTableWidgetItem>

int main(int a,char** b)
{
    QApplication app(a,b);
    QTableWidget table(100,100,0);
    int i=2;
    for(int i=0;i<100;++i){
        for(int y=0;y<100;++y){
            table.setItem(i,y,new QTableWidgetItem(QString::number(i*i)));
        }
    }
    table.resizeColumnsToContents();    
    table.show();
    return app.exec();
}


обрезается
#include <QApplication>
#include <QTableWidget>
#include <QTableWidgetItem>

int main(int a,char** b)
{
    QApplication app(a,b);
    QTableWidget table(100,100,0);
    int i=2;
    table.resizeColumnsToContents();
            for(int i=0;i<100;++i){
        for(int y=0;y<100;++y){
            table.setItem(i,y,new QTableWidgetItem(QString::number(i*i)));
        }
    }
        
    table.show();
    return app.exec();
}



с таблицами не работал раньше.
оно то и понятно потому что table.resizeColumnsToContents(); это установка сделать операцию используя имеющиеся данные о размерах строк. а не установка свойства.

Сообщение отредактировал kwisp - 16.1.2009, 17:40
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.1.2009, 17:55
Сообщение #13


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


У меня тоже после заполнения:
HourlyReport::HourlyReport(QWidget* p_parent) : QDialog(p_parent)
{
...
    reportmodel = new QSqlQueryModel;
    view->setModel(reportmodel);
...
}

// Слот обновления
void HourlyReport::slotUpdate()
{
...
    // получим из БД отчет
    qstr = QString("SELECT * FROM P_HORLYPWR_OFMONTH(%1, CAST ('%2' AS DATE))")
            .arg(strpoint).arg(strdate);
    reportmodel->setQuery(qstr, db);
    
    //view->resizeColumnsToContents();
    setHeader(); //Устанавливаем текст заголовков
    view->resizeColumnsToContents();
...
}
если перенести ресайз до установки заголовков, то они тоже плющатся
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.1.2009, 17:59
Сообщение #14


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Litkevich Yuriy @ 16.1.2009, 17:55) *
У меня тоже после заполнения:
....
если перенести ресайз до установки заголовков, то они тоже плющатся



ну а если перенести ресайз поставив его после заполнения таблицы и заполнения заголовков???
собери мои примеры если есть время посмотри.

Сообщение отредактировал kwisp - 16.1.2009, 18:06
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.1.2009, 18:08
Сообщение #15


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kwisp @ 16.1.2009, 20:59) *
ну а если перенести ресайз поставив его после заполнения таблицы???
дак так и есть заполняется модель в строке reportmodel->setQuery(qstr, db); а в таблице отображается за счет связи модели с таблицей (т.е. "само")
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.1.2009, 18:13
Сообщение #16


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(Litkevich Yuriy @ 16.1.2009, 18:08) *
Цитата(kwisp @ 16.1.2009, 20:59) *
ну а если перенести ресайз поставив его после заполнения таблицы???
дак так и есть заполняется модель в строке reportmodel->setQuery(qstr, db); а в таблице отображается за счет связи модели с таблицей (т.е. "само")


жесть. что могу сказать. время стучать в бубен и бегать вокруг костра.
мое предложение - это же слот resizeColumnsToContents(), соедини его с каким нить сигналом. пусть для проверки даже с кликом на кнопке или еще каким чтобы вызвать его гарантированно после того как все в таблице заполнено....извини если несу чушь по кусочку кода сложно понять как что у тебя организовано.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
SABROG
  опции профиля:
сообщение 16.1.2009, 22:17
Сообщение #17


Профессионал
*****

Группа: Участник
Сообщений: 1207
Регистрация: 8.12.2008
Из: Russia, Moscow
Пользователь №: 446

Спасибо сказали: 229 раз(а)




Репутация:   34  


Где-то я такое уже видел. Попробуй такие варианты:

setUpdatesEnabled(false)
...
view->resizeColumnsToContents();
...
setUpdatesEnabled(true)


view->resizeColumnsToContents();
view->update();


emit view->resizeColumnsToContents();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
kwisp
  опции профиля:
сообщение 16.1.2009, 23:06
Сообщение #18


астарожна ынтжинэр
*****

Группа: Участник
Сообщений: 1404
Регистрация: 26.11.2008
Из: ТаганрогРодинаЧехова
Пользователь №: 435

Спасибо сказали: 113 раз(а)




Репутация:   23  


Цитата(SABROG @ 16.1.2009, 22:17) *
emit view->resizeColumnsToContents();


можно по-подробнее что это такое за конструкция это что вызов слота???
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.1.2009, 6:02
Сообщение #19


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(kwisp @ 16.1.2009, 21:13) *
мое предложение - это же слот resizeColumnsToContents(), соедини его с каким нить сигналом. пусть для проверки даже с кликом на кнопке или еще каким чтобы вызвать его гарантированно после того как все в таблице заполнено
да так помогло:

получается, что заполнение представления из модели происходит несколько асинхронно.
Хотя это для меня небыло очевидно, т.к. когда данные из БД выбирались другой ХП, существенно мение оптимальной, время на выборку занимало несколько мин. При этом всеравно текст в ячейках обрезался.

Но тут видимо ключевой момент асинхронное заполнение представления из модели. Представление еще незаполнено, а метод resizeColumnsToContents уже вызван.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 17.1.2009, 6:58
Сообщение #20


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


кое чего накопал, чтобы избавится от многоточия, можно сделать так:
view->setTextElideMode(Qt::ElideNone);

но resizeColumnsToContents() ведет себя по прежнему.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

4 страниц V  < 1 2 3 4 >
Тема закрытаНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 30.11.2024, 13:40