Название: Несколько тонких вопросов по Qt. Отправлено: andi от Январь 10, 2007, 05:26 Постоянно сталкиваюсь с мелкими проблемами. Использую Qt 3.3.6, Linux.
1) Хочу в QTable закрасить ячейку. Есть 2 подхода: - пололжить на нее разукрашеный QPixmap (код довольно простой, но как оказалось картинка кладется поверх надписи, что не есть хорошо). - Наследоваться от QTableItem и переопределить paint (еще не пробовал, не понятно как задавать цвет. В примерах цвет жестко прописан в методе. Выход вижу в использовании дополнительного свойства в классе TableItem. Как мне кажется довольно громоздкий способ.) Есть еще какие-то непонятки, но сейчас уже не помню. Буду сюда по мере появления постить. Название: Несколько тонких вопросов по Qt. Отправлено: Alex03 от Январь 10, 2007, 09:20 Сам уже всё рассказал! :) это я про второй способ
Цитировать Наследоваться от QTableItem и переопределить paint... Т.е. добавить например в QMyTableItem признак закрашивания и/или сразу QColor, и инициалилировать его в конструктора и/или отдельном методе. В том же примере examples/table/statistics красят последнюю строку так: Код:
Название: Несколько тонких вопросов по Qt. Отправлено: andi от Январь 10, 2007, 09:43 Это все ясно. Непонятно вот что.
Хочу сделать закрашенную клетку. Это мне придется каждую закрашенную клетку отдельно объявлять заполнять и цеплять к таблице? Как лучше отнаследоваться от QTable и QTableItem чтобы появилось свойство типа QColor и метод setBackgroundColor(color,row,col) Причем так чтобы все остальное осталось попрежнему и без лишних телодвижений. Название: Несколько тонких вопросов по Qt. Отправлено: BaltikS от Январь 10, 2007, 10:21 Если унаследоваться от QTable и переопределить paintCell, то унаследоваться от QTableItem необязательно! Другого способа увы нет.
Название: Несколько тонких вопросов по Qt. Отправлено: andi от Январь 10, 2007, 13:01 Хорошо. Тогда такой вопрос. Как устроен QTable?
Создаю я таблицу 100 на 100. В качестве ячеек сразу создаются экземпляры QTableItem? Или они каким-то чудесным образом создаются только при записи чего либо в ячейку? Я к тому клоню, что цвет надо хранить в QTableItem (или его потомке), а метод для изменеия и отрисовку нужно бы приделать к QTable. Если я правильно понимаю, то нужно наследовать их оба и еще потом как-то внутри друг на друга натравить. Название: Несколько тонких вопросов по Qt. Отправлено: BaltikS от Январь 10, 2007, 13:09 Цитировать Создаю я таблицу 100 на 100. В качестве ячеек сразу создаются экземпляры QTableItem? Или они каким-то чудесным образом создаются только при записи чего либо в ячейку? Название: Несколько тонких вопросов по Qt. Отправлено: andi от Январь 10, 2007, 14:14 Я тоже к этому варианту склоняюсь. Единственно непонятно каким образом QTable узнает о моем наследнике. Смотрел примеры в бланшете (в 4 главе про электронные таблицы, они там наследовали оба класса, поглядел объем кода и стало дурно, хотя может надо просто разобраться)
добавлено спустя: Следующий тонкий вопрос. 2) Как сделать надпись на кнопке в 2 и более строк? Название: Несколько тонких вопросов по Qt. Отправлено: BaltikS от Январь 10, 2007, 15:41 1) Делаем преобразование типов
QMyItem *my = static_cast<QMyItem*>table->item(m,n); 2) Самый простоой способ button->setText("str1\nstr2"); Ну а по-хорошему унаследуемся от QButton Название: Несколько тонких вопросов по Qt. Отправлено: Alex03 от Январь 10, 2007, 16:45 Цитата: "andi" ... Единственно непонятно каким образом QTable узнает о моем наследнике. ... void QTable::setItem ( int row, int col, QTableItem * item ) Запихиваете любого наследника. Хоть так: Код:
При наличии соответствующего конструктора у Вашего ColorTableItem. Цитировать Следующий тонкий вопрос. 2) Как сделать надпись на кнопке в 2 и более строк? На какой кнопке? Название: Несколько тонких вопросов по Qt. Отправлено: andi от Январь 11, 2007, 06:12 Надпись на QPushButton.
Чего-то про "\n" не догадался. Думаю это то что нужно, мне как раз надо по простому. Теперь про "void QTable::setItem ( int row, int col, QTableItem * item ) " Когда я вызываю virtual void QTable::setText ( int row, int col, const QString & text ) то, я так понимаю, setItem() вызывается где-то внутри? Если мы хотим использовать те же методы, но с нашим ColorTableItem, тогда нужно изменять эти методы (что ведет к наследованию от QTable). Вот это место непонял: >> 1) Делаем преобразование типов >> QMyItem *my = static_cast<QMyItem*>table->item(m,n); Следующий тонкий вопрос. 3) В комплексе предполагается использование touchscreen-a (сенсорная панель на монитор). Соответственно нужно реализовать экранную клавиатуру в программе. Какие будут предложения? Я думаю самый правильный это каким-то образом вклиниться в сигналы от клавиатуры, чтобы не следить за позицией курсора, а просто тупо куда-то отсылать коды символов. Ну и вопрос куда их отсылать? добавлено спустя 4 минуты: \n - у меня не сработал. Название: Несколько тонких вопросов по Qt. Отправлено: Alex03 от Январь 11, 2007, 08:04 Цитата: "andi" Надпись на QPushButton. Чего-то про "\n" не догадался. Думаю это то что нужно, мне как раз надо по простому. добавлено спустя 4 минуты: \n - у меня не сработал. Да всё работает Код:
Цитировать Теперь про "void QTable::setItem ( int row, int col, QTableItem * item ) " Когда я вызываю virtual void QTable::setText ( int row, int col, const QString & text ) то, я так понимаю, setItem() вызывается где-то внутри? Если мы хотим использовать те же методы, но с нашим ColorTableItem, тогда нужно изменять эти методы (что ведет к наследованию от QTable). А настолько ли это важно - использование абсолютно тех-же методов? Если Вас не устраивает замена setText на setItem то деваться некуда. Рожайте свой QTable. Цитировать Вот это место непонял: >> 1) Делаем преобразование типов >> QMyItem *my = static_cast<QMyItem*>table->item(m,n); Эт в книгу по Ц++. Цитировать Следующий тонкий вопрос. ... ИМХО задавать кучю не связанных вопросов в одном треде не есть гуд. В том числе и потому что Вы отсекаете очень много народа от обсуждения. Название: Несколько тонких вопросов по Qt. Отправлено: andi от Январь 11, 2007, 09:46 Как я заметил (не только по этому форуму), на "тонкие вопросы" обычно отвечают 1-2 знающих человека, остальные только читают.
Теперь про \n Нашел ошибку (пытался надписи в Designere писать, а он \ заменял на \\ ). Аналогично в лингвисте. Название: Несколько тонких вопросов по Qt. Отправлено: Alex03 от Январь 11, 2007, 12:10 Дык в дизайнере даблклик на кнопке и любой текст с переводом строки по ентеру. :)
Аналогично в лингвисте. Т.е. просто Enter. Название: Несколько тонких вопросов по Qt. Отправлено: andi от Январь 11, 2007, 13:45 мдя... чего то я ваще запарился :)
|