Есть кантрол QListView, который я использую как таблицу, и есть большая необходимость в том, чтобы иметь возможность выделить конкретную строку каким либо цветом, или вообще хоть както выделить. Я дальше чем задать цвет на весь кантрол ничего не нашел.
Если есть какойто другой кантрол, в который можно выгрузить данные в виде таблицы и поддерживающий возможность выделения отдельной строки, буду благодарен.
Тонкая работа с QListView
Модератор: Модераторы разделов
-
DiS
- Сообщения: 296
- ОС: Gentoo
Re: Тонкая работа с QListView
так может логичней использовать QTableView?
Если правильно задать вопрос, то он сам по себе будет ответом.
-
zayac_val
- Сообщения: 38
- ОС: openSuse10.3
-
DiS
- Сообщения: 296
- ОС: Gentoo
Re: Тонкая работа с QListView
Что написано, то и имелось ввиду. Вы Qt3 используете?
Если правильно задать вопрос, то он сам по себе будет ответом.
-
zayac_val
- Сообщения: 38
- ОС: openSuse10.3
-
zayac_val
- Сообщения: 38
- ОС: openSuse10.3
Re: Тонкая работа с QListView
Помогите разобраться новичку в Qt. как можно рисовать в кантроле, в частности интересует QTable
Работаю пока с Qt3
Работаю пока с Qt3
-
destr
- Сообщения: 128
- ОС: Debian
Re: Тонкая работа с QListView
Копайте в сторону paintCell
А что вы с таблицей хотите сделать? Вот, например, код, который рисует вот такие строки
А что вы с таблицей хотите сделать? Вот, например, код, который рисует вот такие строки
Код:
void CTableEvents::paintCell (QPainter* _p, int _r, int _c, const QRect& _cr, bool _sel, const QColorGroup& _cg)
{
SyslogEvent *_ev = &m_vecEvents[relem];
if (!_ev)
return;
_p->save ();
_p->setClipRect (cellRect (_r, _c), QPainter::CoordPainter);
if (_sel && (focusStyle () == SpreadSheet) && (_r == currentRow ())
&& (_c == currentColumn ())
&& (hasFocus () || viewport ()->hasFocus ())
)
_sel = false;
_p->setPen (_sel ? _cg.highlightedText () : _cg.text ());
QColorGroup cg (_cg);
switch (_ev->level)
{
case LEVEL_ERROR:
cg.setColor (QColorGroup::Base, QColor (120, 51, 255, QColor::Hsv));
break;
case LEVEL_WARNING:
cg.setColor (QColorGroup::Base, QColor (60, 102, 255, QColor::Hsv));
break;
case LEVEL_CRIT:
cg.setColor (QColorGroup::Base, QColor (40, 153, 255, QColor::Hsv));
break;
case LEVEL_ALERT:
cg.setColor (QColorGroup::Base, QColor (30, 102, 255, QColor::Hsv));
break;
case LEVEL_EMERG:
cg.setColor (QColorGroup::Base, QColor (300, 51, 255, QColor::Hsv));
break;
default:
break;
}
QTable::paintCell (_p, _r, _c, _cr, _sel, cg);
switch (_c)
{
case COLUMN_ARROW:
if (_ev->level == LEVEL_UNKNOWN) break;
_p->drawImage (2, 2, m_img_arrows[_ev->level]);
_p->drawText(2, 2, "!");
break;
case COLUMN_DATE:
_p->drawText (2, 2, _cr.width () - 4, _cr.height () - 4, fieldAlignment (_c), timet2String(_ev->date));
break;
case COLUMN_HOST:
{
_p->drawImage (2, 2, m_img_remotehost);
_p->drawText (m_img_remotehost.width () + 4, 2, _cr.width () - 4, _cr.height () - 4,
fieldAlignment (_c), _ev->host);
}
break;
case COLUMN_EVENT:
{
QString desc;
if (!_ev->description.empty())
desc = QString::fromLocal8Bit(_ev->description.c_str());
else
desc = QString::fromLocal8Bit(_ev->type.c_str());
if (!_ev->subtype.empty())
desc = QString ("(%1) %2").arg(_ev->subtype).arg(desc);
int width = 2;
_p->drawText (width, 2, _cr.width () - 4, _cr.height () - 4, fieldAlignment (_c), desc);
}
break;
case COLUMN_RESULT:
if (_ev->result == RESULT_UNDEFINED)
break;
if (_ev->result == RESULT_SUCCESS)
_p->drawImage (2, 2, m_img_success);
else if (_ev->result == RESULT_FAILED)
_p->drawImage (2, 2, m_img_failed);
break;
case COLUMN_PARAMS:
{
int width = 2;
bool is_first_param = true;
std::list<Param>::iterator it = _ev->params.begin();
for (; it != _ev->params.end(); ++it)
{
if (is_first_param)
is_first_param = false;
else
{
_p->drawText (width, 2, _cr.width () - 4, _cr.height () - 4, fieldAlignment (_c), ";");
width += fontMetrics ().width (";") + 2;
}
if (it->first != PARAM_UNDEFINED && !m_img_params[it->first].isNull())
{
_p->drawImage (width, 2, m_img_params[it->first]);
width += m_img_params[it->first].width () + 2;
_p->drawText (width, 2, _cr.width () - 4, _cr.height () - 4,
fieldAlignment (_c), QString::fromLocal8Bit (it->second.value.c_str()));
width += fontMetrics ().width (it->second.value.c_str()) + 2;
}
else
{
QString param = QString ("%1 = %2")
.arg (QString::fromLocal8Bit (it->second.name.c_str()))
.arg (QString::fromLocal8Bit (it->second.value.c_str()));
_p->drawText (width, 2, _cr.width () - 4, _cr.height () - 4, fieldAlignment (_c), param);
width += fontMetrics ().width (param) + 2;
}
}
}
break;
default:
break;
}
_p->restore ();
}
У вас нет необходимых прав для просмотра вложений в этом сообщении.
-
zayac_val
- Сообщения: 38
- ОС: openSuse10.3
Re: Тонкая работа с QListView
Задача впринципе простая, выделить строку с данными цветом.
В paintEvent я делал следующую вещь:
Результата понятно никакого.
Я так подозреваю что делаю что-то не так, при чем глобально, откройте мне глаза на истину.
В paintEvent я делал следующую вещь:
Код: Выделить всё
QPainter painter(table1)
QRect rec=table1->cellRect(0,0);
table1->paintCell(painter,0,1,rec,false);Результата понятно никакого.
Я так подозреваю что делаю что-то не так, при чем глобально, откройте мне глаза на истину.