Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [Qt] Шапка в таблице QTable, как сделать нужный вид заголовка таблицы 
V
    Опции темы
VirLena
Дата 4.6.2008, 15:40 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 21.5.2007
Где: Украина

Репутация: нет
Всего: нет



делаю так

Код

QTable * table(7,7,0,0);
QHeader *header = table->horizontalHeader();

header->setLabel(0, "Первый");
header->setLabel(1, "Второй");


И столкнулась с тем что мне нужно столбик второй разбить на второй/1 и второй/2, то есть шапка для второго столбика одна общая второй, объединяющая два столбца таблицы "второй/1" и "второй/2". Проще в таблице три столбика со своими названиями, два последних объединены еще под одно название. Как это реализовать? 
PM MAIL ICQ   Вверх
SABROG
Дата 4.6.2008, 16:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Hacker
****


Профиль
Группа: Завсегдатай
Сообщений: 2481
Регистрация: 18.9.2006

Репутация: 81
Всего: 91



Стандартных методов нет. Простейший вариант:

- убираем стандартные хидеры
- создаем делегата для QTableView, где ячейки на первой строке таблицы закрашиваем в стандартный цвет кнопок (серенький или в зависимости от стиля). Можно отрисовать границы для ячеек, чтобы казались объемными как хидеры
- вызываем setSpan для объединения ячеек в первой строке

Минус в том, что при этом чтение таблицы придется насильно начинать не с первой строки, также как и заполнение.

Это сообщение отредактировал(а) SABROG - 4.6.2008, 16:11


--------------------
Национальная группа Russian Federation на QtCentre.
PM MAIL   Вверх
VirLena
Дата 4.6.2008, 16:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 21.5.2007
Где: Украина

Репутация: нет
Всего: нет



Поскольку QTableView  я у себя не нашла я сделала так

Код

QTable *table;
QHeader *header = table->horizontalHeader();
header->hide();
header->setTopMargin(0);

QTableItem *item = new QTableItem( table, QTableItem::Never, "");

for( int row = 0; row < table->numRows(); row++)
 for( int col = 0; col < table->numCols(); col++)
  table->setItem(row,col,item);


Далее я так понимаю можно объединять ячейки и отрисовывать как шапку, но не пойму как это делать?

Как например объеденить в первом столбце ячейки первой и второй строки?
И как в первой строке объеденить первый и второй столбец?

PM MAIL ICQ   Вверх
Elfebet
Дата 4.6.2008, 17:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 5
Всего: 14



for QTableView
setSpan ( int row, int column, int rowSpan, int columnSpan ) 

Это сообщение отредактировал(а) Elfebet - 4.6.2008, 17:24


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
VirLena
Дата 5.6.2008, 08:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 21.5.2007
Где: Украина

Репутация: нет
Всего: нет



Цитата

for QTableView
setSpan ( int row, int column, int rowSpan, int columnSpan )


как я уже говорила QTableView у меня нет, есть только QTable и QTableItem. Все что есть в наличии это 

Цитата

void QTableItem::setSpan ( int rs, int cs ) [virtual] 
Changes the extent of the QTableItem so that it spans multiple cells covering rs rows and cs columns. The top left cell is the original cell. 


Только как ею пользоваться я не пойму
PM MAIL ICQ   Вверх
Elfebet
Дата 5.6.2008, 09:18 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 5
Всего: 14



Код

QTable *tbl = new QTable(3, 3, this);
QTableItem *tblItem;
//  row 1
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 1"));
tbl->setItem(0, 0, tblItem);
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 2"));
tbl->setItem(1, 0, tblItem);
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 3"));
tbl->setItem(2, 0, tblItem);
// row 2
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 4"));
tblItem->setSpan(1, 2); // вот сдесь мы обьединили для 0 строки 2 колонки, начиная с колонки 1
tbl->setItem(0, 1, tblItem);
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 5"));
tbl->setItem(1, 1, tblItem);
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 6"));
tbl->setItem(2, 1, tblItem);
// row 3
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 7"));
tbl->setItem(1, 2, tblItem);
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 8"));
tbl->setItem(2, 2, tblItem);


// примерно так должно выглядеть
-----------------------------
|          |                       |
-----------------------------
|          |            |          |
-----------------------------
|          |            |          |
-----------------------------


зы. Писал на коленке


--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
VirLena
Дата 5.6.2008, 09:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 21.5.2007
Где: Украина

Репутация: нет
Всего: нет



большое спасибо,  после нескольких небольших изменений у меня все собралось и получилось объеденить ячейки в строке, а как сделать, чтоб объеденить в столбце?
 Чтоб выглядело примерно так

-----------------------------
|          |            |          |
-          --------------------
|          |            |          |
-----------------------------
|          |            |          |
-----------------------------
PM MAIL ICQ   Вверх
Palladin
Дата 5.6.2008, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 932
Регистрация: 15.5.2007
Где: Беларусь г.Гомель

Репутация: нет
Всего: 17



Ну тут же по аналогии, индексы глянь 


--------------------
Глуп тот кто полагается на истину авторитета, а не на авторитет истины
[color=red]KAV&KIS==Evil[/color]
PM MAIL   Вверх
Elfebet
Дата 5.6.2008, 10:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 545
Регистрация: 15.5.2006
Где: Украина. Запорожь е.

Репутация: 5
Всего: 14



Цитата

большое спасибо,  после нескольких небольших изменений у меня все собралось и получилось объеденить ячейки в строке, а как сделать, чтоб объеденить в столбце?
 Чтоб выглядело примерно так

примерно так написать
Код

//  row 1
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 1"));
tblItem->setSpan(2, 1);
tbl->setItem(0, 0, tblItem);
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 3"));
tbl->setItem(2, 0, tblItem);
// row 2
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 4"));
tbl->setItem(0, 1, tblItem);
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 5"));
tbl->setItem(1, 1, tblItem);
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 6"));
tbl->setItem(2, 1, tblItem);
// row 3
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 4"));
tbl->setItem(0, 2, tblItem);
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 7"));
tbl->setItem(1, 2, tblItem);
tblItem = new QTableItem(tbl, Q3TableItem::WhenCurrent, "text 8"));
tbl->setItem(2, 2, tblItem);



--------------------
Программист не должен всё знать... он должен знать где можно посмотреть
PM MAIL ICQ GTalk   Вверх
VirLena
  Дата 5.6.2008, 10:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 22
Регистрация: 21.5.2007
Где: Украина

Репутация: нет
Всего: нет



Я уже поняла, и то благодаря тому, что ошиблась в индексах, большое всем спасибо за ответы.
Уже сколько раз убеждалась, что больше всего мучаюсь над самыми простыми вопросами.

Добавлено через 4 минуты и 22 секунды
 smile 
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Кроссплатформенное программирование, QT/Gtk+/wxWidgets"
JackYF
Любитель
  • В заголовке темы в квадратных скобках обозначьте используемую вами библиотеку, например: [QT],[GTK],[wx].
  • Если вопрос актуален только для некоторой версии библиотеки, либо, если вы пользуетесь не самой последней версией, укажите это. Например: [QT4], [GTK2].
  • Все начинающие изучать Qt - не забудьте зайти сюда.
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • В вопросе укажите полную версию версию библиотеки, а также все дополнительные используемые программные пакеты.
  • Не забывайте пользоваться кнопкой "Код".
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к тематике этого раздела. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, Любитель.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | С/С++: Кроссплатформенное программирование, Qt/Gtk+/wxWidgets | Следующая тема »


 




[ Время генерации скрипта: 0.0485 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.