QTableWidget and QTableWidgetItem (Появилось несколько вопрос. Qt4)
Модератор: Модераторы разделов
QTableWidget and QTableWidgetItem
1. Есть QMainWindow, в центральной части находится QTableWidget. У QTableWidget 1 строка и 5 столбцов. Мне надо, чтобы все эти 5 столбцов занимали всю ширину центральной части, а не половину, как у меня. Как мне это сделать?
2. Как мне сделать так, чтобы QTableWidgetItem растягивался вместе с текстом, устновленным функцией setText()? Когда пишу setSizeHint(xx->sizeHint()) ячейка вообще куда-то пропадает.
2. Как мне сделать так, чтобы QTableWidgetItem растягивался вместе с текстом, устновленным функцией setText()? Когда пишу setSizeHint(xx->sizeHint()) ячейка вообще куда-то пропадает.
- eduard_pustobaev
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
- Контактная информация:
Re: QTableWidget and QTableWidgetItem
1) У колонок же есть фиксировання ширина. Свойства такого не знаю, но при resizeEvent() виджета можно делать setColumnWidth()...
2) Тут в принципе тоже так же можно сделать. Каждый раз при setText().
P.S. Может и есть стандартное решение, искать неохота. Но вопрос можно решить и так.
2) Тут в принципе тоже так же можно сделать. Каждый раз при setText().
P.S. Может и есть стандартное решение, искать неохота. Но вопрос можно решить и так.
В дисгармонии со вселенной.
Re: QTableWidget and QTableWidgetItem
eduard_pustobaev писал(а): ↑27.08.2007 15:521) У колонок же есть фиксировання ширина. Свойства такого не знаю, но при resizeEvent() виджета можно делать setColumnWidth()...
2) Тут в принципе тоже так же можно сделать. Каждый раз при setText().
P.S. Может и есть стандартное решение, искать неохота. Но вопрос можно решить и так.
Спасибо за идею, но: когда я изменю окно вызевется слот изменения ширины ячейки, однако я ведь не знаю на сколько изменять.
- eduard_pustobaev
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
- Контактная информация:
Re: QTableWidget and QTableWidgetItem
Ну по количеству символов в строке. Установить текст из трёх, пяти, шести символов и посмотеть насколько изменяется ширина колонки columnWidth(). А там уж и задавать размер соответственно размеру вводимой строки. То есть узнать насколько при увеличении строки на один символ, увеличится ширина колонки. Правда боюсь, что при увеличении размера шрифта(не страшно, можно задать фиксированно и не менять) или того же dpi этот размер может меняться.
P.S. Хотя по-моему это жуткий изврат. Должно быть что-то стандартное. Просто обязано, потому что ситуация абсолютно жизненная, без всяких хитрых выдумок.
P.S. Хотя по-моему это жуткий изврат. Должно быть что-то стандартное. Просто обязано, потому что ситуация абсолютно жизненная, без всяких хитрых выдумок.
В дисгармонии со вселенной.
Re: QTableWidget and QTableWidgetItem
Поищи в Assistant по "stretch". Для Q3Table есть такие штуки: virtual void setColumnStretchable ( int col, bool stretch ) и virtual void setRowStretchable ( int row, bool stretch ). Может еще что-нибудь найдешь. Это по первому пункту.
p.s. Порылся немного, собсно вот:
void QTableView::resizeColumnToContents ( int column ) [slot]
Resizes the given column based on the size hints of the delegate used to render each item in the column.
void QTableView::resizeColumnsToContents () [slot]
Resizes all columns based on the size hints of the delegate used to render each item in the columns.
void QTableView::resizeRowToContents ( int row ) [slot]
Resizes the given row based on the size hints of the delegate used to render each item in the row.
void QTableView::resizeRowsToContents () [slot]
Resizes all rows based on the size hints of the delegate used to render each item in the rows.
Я думаю, это то что ты искал по второму пункту. Хотя может не так понял. Просто начал учить Qt 4. Сижу читаю в "C++ GUI Programming with Qt 4" нечто подобное.
p.s. Порылся немного, собсно вот:
void QTableView::resizeColumnToContents ( int column ) [slot]
Resizes the given column based on the size hints of the delegate used to render each item in the column.
void QTableView::resizeColumnsToContents () [slot]
Resizes all columns based on the size hints of the delegate used to render each item in the columns.
void QTableView::resizeRowToContents ( int row ) [slot]
Resizes the given row based on the size hints of the delegate used to render each item in the row.
void QTableView::resizeRowsToContents () [slot]
Resizes all rows based on the size hints of the delegate used to render each item in the rows.
Я думаю, это то что ты искал по второму пункту. Хотя может не так понял. Просто начал учить Qt 4. Сижу читаю в "C++ GUI Programming with Qt 4" нечто подобное.
You can't kill time without injuring eternity.
Re: QTableWidget and QTableWidgetItem
Второй пункт - выполнен, спасибо.
А вот что делать с первым так и не понятно...
Re: QTableWidget and QTableWidgetItem
Я честно говоря не понял, что тебе нужно, приложи скриншот того, как есть и скриншот (набросав в дезигнере) как должно быть.
Re: QTableWidget and QTableWidgetItem
Darth Liksys писал(а): ↑30.08.2007 10:53Я честно говоря не понял, что тебе нужно, приложи скриншот того, как есть и скриншот (набросав в дезигнере) как должно быть.
Видите, там таблица занимает половину ширины, а мне надо - всю ширину.
Re: QTableWidget and QTableWidgetItem
Вот, что я накопал:
И попробуй с этими функциями + то, что в первом ответе написано.
ЗЫ: Удачи с прогой, если будет готова, то выложи в инет, мне например такая очень нужна
Код: Выделить всё
int QTableView::columnWidth ( int column ) const
void QTableView::setColumnWidth ( int column, int width )
void QTableView::resizeColumnToContents ( int column ) [slot]
ЗЫ: Удачи с прогой, если будет готова, то выложи в инет, мне например такая очень нужна
Re: QTableWidget and QTableWidgetItem
Darth Liksys писал(а): ↑30.08.2007 11:22Вот, что я накопал:
И попробуй с этими функциями + то, что в первом ответе написано.Код: Выделить всё
int QTableView::columnWidth ( int column ) const void QTableView::setColumnWidth ( int column, int width ) void QTableView::resizeColumnToContents ( int column ) [slot]
ЗЫ: Удачи с прогой, если будет готова, то выложи в инет, мне например такая очень нужна
Ура, получилось! Вот решение:
Код: Выделить всё
void CentralWidget::resizeTable(int diaryWidth)
{
setColumnWidth(0,round(0.2*diaryWidth));
setColumnWidth(1,round(0.5*diaryWidth));
setColumnWidth(2,round(0.15*diaryWidth));
if ( round(0.13*diaryWidth) < 90 )
resizeColumnToContents(3);
else
setColumnWidth(3,round(0.13*diaryWidth));
}
Есстественно, эта функция вызывается из resizeEvent().
Всем спасибо. Тему можно закрывать.
P.S. Как только доделаю прогу - сразу выложу. Появился даже стимул её доделать Однако, когда живешь в общаге СУНЦ НГУ без компа - делать быстро не получается...
Re: QTableWidget and QTableWidgetItem
Вот у меня есть код:
Вот, что гененирует этот код:
Однако я не понимаю, что мне нужно добавить в код, чтобы:
1) QTextBrowser имел ширину колонки( оценка дня такую ширину не имеет ).
2) QTextBroser не растягивался, а переносил на слудующую строку текст, если он не вмещается в ширину колонки
3) Высота строк растягивалась в зависимости от текста в QTextBrowser ( resizeRowsToContents() не работает )
Код: Выделить всё
void CentralWidget::setRow(int row, QSqlRecord* record)
{
for ( int i = 1; i < 5; i++ )
{
QTextBrowser *browser = new QTextBrowser;
browser->setText(record->value(i).toString());
browser->setLineWidth(columnWidth(i-1));
browser->setMinimumSize(browser->sizeHint());
if ( i == 4 )
browser->setAlignment(Qt::AlignCenter);
setCellWidget(row,i-1,browser);
}
}
Вот, что гененирует этот код:
Однако я не понимаю, что мне нужно добавить в код, чтобы:
1) QTextBrowser имел ширину колонки( оценка дня такую ширину не имеет ).
2) QTextBroser не растягивался, а переносил на слудующую строку текст, если он не вмещается в ширину колонки
3) Высота строк растягивалась в зависимости от текста в QTextBrowser ( resizeRowsToContents() не работает )
Re: QTableWidget and QTableWidgetItem
QTextBrowser - потомок многих других виджетов (например QTextEdit), поэтому не все свойства указываются именно в его описании в Assistant. Но в том же Assistant на странице описания QTextBrowser можно найти ссылки вида: 15 properties inherited from QTextEdit. Переходя по ним можно узнать все свойства виджета и прочее. Например перенос - lineWrapColumnOrWidth или lineWrapMode.
See also: void QTableWidgetItem::setSizeHint или void QTableView::setColumnWidth ( int column, int width ) - это как я понял для ширины колонки.
See also: void QTableWidgetItem::setSizeHint или void QTableView::setColumnWidth ( int column, int width ) - это как я понял для ширины колонки.
You can't kill time without injuring eternity.
- eduard_pustobaev
- Сообщения: 2629
- Статус: Ленивец
- ОС: Arch/Debian.
- Контактная информация:
Re: QTableWidget and QTableWidgetItem
-DooM- писал(а): ↑02.09.2007 06:561) QTextBrowser имел ширину колонки( оценка дня такую ширину не имеет ).
2) QTextBroser не растягивался, а переносил на слудующую строку текст, если он не вмещается в ширину колонки
3) Высота строк растягивалась в зависимости от текста в QTextBrowser ( resizeRowsToContents() не работает )
2) void setLineWrapMode ( LineWrapMode mode ) ?
В дисгармонии со вселенной.
Re: QTableWidget and QTableWidgetItem
Всем спасибо. Все таки решил вместо QTextBrowser использовать QTableWidgetItem - намного удобнее.
Скажите, пожалуйста, как мне сделать так, чтобы пользователь не мог обводить( выбирать ) сразу несколько ячеек в QTableWidget?
Скажите, пожалуйста, как мне сделать так, чтобы пользователь не мог обводить( выбирать ) сразу несколько ячеек в QTableWidget?
Re: QTableWidget and QTableWidgetItem
Добавьте в основном виджете строку: <название _выделения> можно узнать в Assitant поискав по слову SelectionMode. Жду с нетерпением, когда прога уже будет зарелизена и выставлена для загрузки
Код: Выделить всё
setSelectionMode(<название_выделения>);
You can't kill time without injuring eternity.
Re: QTableWidget and QTableWidgetItem
ged писал(а): ↑06.09.2007 21:51Добавьте в основном виджете строку:<название _выделения> можно узнать в Assitant поискав по слову SelectionMode. Жду с нетерпением, когда прога уже будет зарелизена и выставлена для загрузкиКод: Выделить всё
setSelectionMode(<название_выделения>);
Спасибо Только, я думаю мой опыт не позволит написать стоющую реалезацию моей идеи...
Re: QTableWidget and QTableWidgetItem
Когда я ввожу большой текст в QTableWidgetItem получается вот что:
Непонятно почему, Qt растягивает высоту колонки на лишние сантиметры. Как мне сделать так, чтобы он растягивал точно по тексту?
Непонятно почему, Qt растягивает высоту колонки на лишние сантиметры. Как мне сделать так, чтобы он растягивал точно по тексту?
Re: QTableWidget and QTableWidgetItem
Попробуй поиграть со scale из QSize.
You can't kill time without injuring eternity.
Re: QTableWidget and QTableWidgetItem
Непонятная вещь творится с QTableWidget: почему то, когда я нажимаю на какую-нибудь ячейку таблицы, эта ячейка не выделяется ( не загорается ), собственно, как и вся строка, так как я использую функцию: setSelectionBehavior(QAbstractItemView::SelectRows);
Может быть, кто-нибудь знает, что возможно у меня не так? Я забыл, что я сделал до такого эффекта.
Update: сам разобрался, извините
Может быть, кто-нибудь знает, что возможно у меня не так? Я забыл, что я сделал до такого эффекта.
Update: сам разобрался, извините