Поиск:

Ответ в темуСоздание новой темы Создание опроса
> окрашивание ячейки таблицы 
:(
    Опции темы
kuvshinka
Дата 5.12.2013, 14:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



Мне надо написать функцию, окрашивающую заданную ячейку таблицы заданным цветом. Цвет должен задаваться как в таблице стилей (css).
Я делаю так
Код

void func1(inr row, int column, QString color)
{

 if (color==»Black»)
  tablewidget->setStyleSheet{«QTableWidget  {selection-background-color: rgb(0,0,0);}»};

 if (color==»Red»)
  tablewidget->setStyleSheet{«QTableWidget  {selection-background-color: rgba(255,0,0,200);}»};

 if (color==»Blue»)
  tablewidget->setStyleSheet{«QTableWidget  {selection-background-color: rgba(0,0,255,150);}»};

tablewidget->item(row,column)->setSelected(true);

}

но как мне, например, переключиться именно c черного цвета на синий, т.е. как запомнить текущий цвет ячейки, задаваемый вышеуказанным способом — дополнительно заводить строковый двумерный массив, хранящий цвета всех ячеек? И вообще, оптимален ли (единственен ли) метод окрашивания заданной ячейки, приведенный выше, учитывая, что цвет должен задаваться как в таблице стилей, а не как QColor(0,0,0)?
PM MAIL   Вверх
math64
Дата 5.12.2013, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Таблицей стилей можно задать цвет всех ячеек таблицы, цвет выделеннной ячейки, цвет отдельно чётных и нечётных строк, но не конкретных ячеек.
Для прорисовки ячеек используется делегат и если назначить свой, в методе
viod paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
можно подменить параметр option
PM   Вверх
kuvshinka
Дата 5.12.2013, 21:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



ну вот я и пытаюсь задать цвет конкретной ячейке путем ее выделения, для чего использую метод setSelected и соответствующий стиль (секцию selection-background-color). подскажите пож-та пример с подменой параметра в своем делегате...
PM MAIL   Вверх
math64
Дата 5.12.2013, 22:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Поскольку используется QTableWidget,можно так:
Код

#include <QtGui/QApplication>
#include <QtGui/QTableWidget>
#include <QtGui/QLabel>
#include <QtCore/QString>

char* css[2][2] = {
{"background-color: rgb(255,255,255);","background-color: rgb(255,0,0);"},
{"background-color: rgb(0,255,0);","background-color: rgb(0,0,255);"}
};
int main(int argc, char** argv)
{
  QApplication app(argc, argv);
  QTableWidget table(2,2);
  for(int x=0; x<2; x++)
    for(int y=0; y<2; y++) {
     QLabel* label = new QLabel(&table);
     label->setText(QString("%1 %2").arg(x).arg(y));
     label->setStyleSheet(css[x][y]);
     table.setCellWidget(x,y,label);
  }
  table.show();
  return app.exec();
}

PM   Вверх
kuvshinka
Дата 9.12.2013, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



math64: Вы предлагаете нужные мне ячейки забить обычными QLabel-ми? но мне надо иметь возможность кликать на них, а у QLabel нет метода OnClick()...
PM MAIL   Вверх
math64
Дата 10.12.2013, 07:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


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

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



Можно заполнить кнопками или другими подходящими виджетами
PM   Вверх
kuvshinka
Дата 11.12.2013, 21:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


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

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



По поводу объединения ячеек в заголовках таблицы нашла пример:
Код

class MyHeaderModel : public QAbstractItemModel
{
public:
  MyHeaderModel(QObject *parent = 0) : QAbstractItemModel(parent) {}
  int columnCount(const QModelIndex &parent = QModelIndex()) const { return 5; }
  QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const { return QVariant(); }
  QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const { return QModelIndex(); }
  QModelIndex parent(const QModelIndex &index) const { return QModelIndex(); }
  int rowCount(const QModelIndex &parent = QModelIndex()) const { return 0; }
};

class MyHeader : public QHeaderView
{
  Q_OBJECT

 public:
    MyHeader(QHeaderView *header) : QHeaderView(Qt::Horizontal, header), mainHeader(header)
    {
      setModel(new MyHeaderModel(this));
        resizeSection(0, getSectionSizes(0, 2));
        resizeSection(1, getSectionSizes(3, 5));
        setGeometry(0, 0, header->width(), header->height());
        mainHeader->installEventFilter(this);
    }

protected:

    bool eventFilter(QObject *o, QEvent *e)
    {
     if (o == mainHeader)
     {
      if (e->type() == QEvent::Resize)
      {
       setOffset(mainHeader->offset());
       setGeometry(0, 0, mainHeader->width(), mainHeader->height());
      }
      return false;
     }
     return QHeaderView::eventFilter(o, e);
    }

private:

    int getSectionSizes(int first, int second)
    {
     int size = 0;
      for (int a=first; a<=second; ++a)
        size += mainHeader->sectionSize(a);
     return size;
    }

    QHeaderView *mainHeader;
};

В основном мне все в нем понятно (кроме, наверное, необходимости класса MyHeaderModel), но как мне его модифицировать, чтобы получить заголовок вида с возможностью клика по ячейкам С1...С4 и изменением их цвета - см. рисунок

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

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

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


 




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


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

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