qstyleditemdelegate subclassing paint method not working right The Next CEO of Stack OverflowHow does one paint the entire row's background in a QStyledItemDelegate?QAbstractItemDelegate painting while dragging problemCustomizing the checkboxes of the items of a QTreeViewQt: ProxyModel, QTreeView and Delegate Setup with filtering does not correctly updateIn a QStyledItemDelegate for a QListWidget, how do I paint the selected item to match the standard list?Is it possible to animate opacity of QIcon in QStyledItemDelegate?What is the difference between QItemDelegate and QStyledItemDelegate?draw background on custom QStyledItemDelegate likeQStyledItemDelegate paint refresh issuesHow to animate the color of a QTableview cell in time once it's value gets updated?
Make solar eclipses exceedingly rare, but still have new moons
Running a General Election and the European Elections together
What does "Its cash flow is deeply negative" mean?
How to write a definition with variants?
How to edit “Name” property in GCI output?
Unclear about dynamic binding
Can I use the load factor to estimate the lift?
How to get from Geneva Airport to Metabief, Doubs, France by public transport?
Reference request: Grassmannian and Plucker coordinates in type B, C, D
How to delete every two lines after 3rd lines in a file contains very large number of lines?
How many extra stops do monopods offer for tele photographs?
What is meant by "large scale tonal organization?"
Easy to read palindrome checker
Is it convenient to ask the journal's editor for two additional days to complete a review?
Yu-Gi-Oh cards in Python 3
Legal workarounds for testamentary trust perceived as unfair
Why didn't Khan get resurrected in the Genesis Explosion?
Does increasing your ability score affect your main stat?
Would a completely good Muggle be able to use a wand?
How to check if all elements of 1 list are in the *same quantity* and in any order, in the list2?
Why is information "lost" when it got into a black hole?
Domestic-to-international connection at Orlando (MCO)
Calculator final project in Python
The past simple of "gaslight" – "gaslighted" or "gaslit"?
qstyleditemdelegate subclassing paint method not working right
The Next CEO of Stack OverflowHow does one paint the entire row's background in a QStyledItemDelegate?QAbstractItemDelegate painting while dragging problemCustomizing the checkboxes of the items of a QTreeViewQt: ProxyModel, QTreeView and Delegate Setup with filtering does not correctly updateIn a QStyledItemDelegate for a QListWidget, how do I paint the selected item to match the standard list?Is it possible to animate opacity of QIcon in QStyledItemDelegate?What is the difference between QItemDelegate and QStyledItemDelegate?draw background on custom QStyledItemDelegate likeQStyledItemDelegate paint refresh issuesHow to animate the color of a QTableview cell in time once it's value gets updated?
I extended the qstyleditemview
class. When I am in the editing mode for the qtreeview
item, the paint method seems not to be executing right. When I change state to QStyle::State_Selected
it works - it paints the selected row (text) in the qtreeview
.
Any idea why it is not working in editing mode?
void myQItemDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,const QModelIndex &index) const
QStyleOptionViewItem s = *qstyleoption_cast<const QStyleOptionViewItem*>(&option);
if(s.state & QStyle::State_Editing)
painter->fillRect(s.rect, s.palette.highlight());
s.palette.setColor(QPalette::HighlightedText, QColor(Qt::blue));
QStyledItemDelegate::paint(painter, s, index);
qt paint editing qitemdelegate qstyleditemdelegate
add a comment |
I extended the qstyleditemview
class. When I am in the editing mode for the qtreeview
item, the paint method seems not to be executing right. When I change state to QStyle::State_Selected
it works - it paints the selected row (text) in the qtreeview
.
Any idea why it is not working in editing mode?
void myQItemDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,const QModelIndex &index) const
QStyleOptionViewItem s = *qstyleoption_cast<const QStyleOptionViewItem*>(&option);
if(s.state & QStyle::State_Editing)
painter->fillRect(s.rect, s.palette.highlight());
s.palette.setColor(QPalette::HighlightedText, QColor(Qt::blue));
QStyledItemDelegate::paint(painter, s, index);
qt paint editing qitemdelegate qstyleditemdelegate
add a comment |
I extended the qstyleditemview
class. When I am in the editing mode for the qtreeview
item, the paint method seems not to be executing right. When I change state to QStyle::State_Selected
it works - it paints the selected row (text) in the qtreeview
.
Any idea why it is not working in editing mode?
void myQItemDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,const QModelIndex &index) const
QStyleOptionViewItem s = *qstyleoption_cast<const QStyleOptionViewItem*>(&option);
if(s.state & QStyle::State_Editing)
painter->fillRect(s.rect, s.palette.highlight());
s.palette.setColor(QPalette::HighlightedText, QColor(Qt::blue));
QStyledItemDelegate::paint(painter, s, index);
qt paint editing qitemdelegate qstyleditemdelegate
I extended the qstyleditemview
class. When I am in the editing mode for the qtreeview
item, the paint method seems not to be executing right. When I change state to QStyle::State_Selected
it works - it paints the selected row (text) in the qtreeview
.
Any idea why it is not working in editing mode?
void myQItemDelegate::paint(QPainter *painter,const QStyleOptionViewItem &option,const QModelIndex &index) const
QStyleOptionViewItem s = *qstyleoption_cast<const QStyleOptionViewItem*>(&option);
if(s.state & QStyle::State_Editing)
painter->fillRect(s.rect, s.palette.highlight());
s.palette.setColor(QPalette::HighlightedText, QColor(Qt::blue));
QStyledItemDelegate::paint(painter, s, index);
qt paint editing qitemdelegate qstyleditemdelegate
qt paint editing qitemdelegate qstyleditemdelegate
edited Mar 8 at 19:08
ttulka
2,6111627
2,6111627
asked Mar 8 at 16:23
TomTom
11
11
add a comment |
add a comment |
2 Answers
2
active
oldest
votes
In the State_Editing
state the editor that is a widget created in createEditor()
method is opened so that it will not be affected by the QStyleOptionViewItem
palette.
Also instead of overwriting the paint method, use the initStyleOption()
method:
#include <QtWidgets>
class StyledItemDelegate: public QStyledItemDelegate
public:
using QStyledItemDelegate::QStyledItemDelegate;
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
QWidget * widget = QStyledItemDelegate::createEditor(parent, option, index);
QPalette pal(widget->palette());
pal.setColor(QPalette::HighlightedText, QColor(Qt::blue));
pal.setBrush(QPalette::Highlight, option.palette.highlight());
widget->setPalette(pal);
return widget;
protected:
void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override
QStyledItemDelegate::initStyleOption(option, index);
option->palette.setColor(QPalette::HighlightedText, QColor(Qt::blue));
;
int main(int argc, char *argv[])
QApplication a(argc, argv);
QTreeView w;
QStandardItemModel model;
w.setModel(&model);
w.setItemDelegate(new StyledItemDelegate);
for(int i=0; i<3; ++i)
auto it = new QStandardItem(QString::number(i));
model.appendRow(it);
for (int j=0; j<4; ++j)
it->appendRow(new QStandardItem(QString("%1-%2").arg(i).arg(j)));
w.expandAll();
w.show();
return a.exec();
add a comment |
Thanks for helping me out.
I understand now. I added code in QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const metod to style QLineEdit. I am trying to get the same background color for QLineEdit when it is created- when I am editing qtreeview item. The problem is when I select the item in qtreeview the whole row gets colored. That's ok. Now when I edit the item for example to change the text in qtreeview item, only the text part gets selected and colored with the same color as previous row selection color. The rest of the QLineEdit is white. In editing mode I would like to color the whole row which is edited with the same color. I could as obviously from my code color it with RGB but I don't know the exact RGB values. Is there any way to get the exact RGB color from item selection and then use it in
pal.setColor(QPalette::Highlight,QColor(qRgb(0,0,255)));
my code:
QWidget* myQItemDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem &option,const QModelIndex &index) const
QLineEdit *lineEdit = new QLineEdit(parent);
connect(lineEdit,SIGNAL(editingFinished()),this,SLOT(commitAndCloseEditor()));
QPalette pal;
pal.setColor(QPalette::HighlightedText, QColor(Qt::white));
pal.setColor(QPalette::Highlight,QColor(qRgb(0,0,255)));
lineEdit->setPalette(pal);
lineEdit->setFrame(false);
return lineEdit;
Thanks, Tom
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55067155%2fqstyleditemdelegate-subclassing-paint-method-not-working-right%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
2 Answers
2
active
oldest
votes
2 Answers
2
active
oldest
votes
active
oldest
votes
active
oldest
votes
In the State_Editing
state the editor that is a widget created in createEditor()
method is opened so that it will not be affected by the QStyleOptionViewItem
palette.
Also instead of overwriting the paint method, use the initStyleOption()
method:
#include <QtWidgets>
class StyledItemDelegate: public QStyledItemDelegate
public:
using QStyledItemDelegate::QStyledItemDelegate;
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
QWidget * widget = QStyledItemDelegate::createEditor(parent, option, index);
QPalette pal(widget->palette());
pal.setColor(QPalette::HighlightedText, QColor(Qt::blue));
pal.setBrush(QPalette::Highlight, option.palette.highlight());
widget->setPalette(pal);
return widget;
protected:
void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override
QStyledItemDelegate::initStyleOption(option, index);
option->palette.setColor(QPalette::HighlightedText, QColor(Qt::blue));
;
int main(int argc, char *argv[])
QApplication a(argc, argv);
QTreeView w;
QStandardItemModel model;
w.setModel(&model);
w.setItemDelegate(new StyledItemDelegate);
for(int i=0; i<3; ++i)
auto it = new QStandardItem(QString::number(i));
model.appendRow(it);
for (int j=0; j<4; ++j)
it->appendRow(new QStandardItem(QString("%1-%2").arg(i).arg(j)));
w.expandAll();
w.show();
return a.exec();
add a comment |
In the State_Editing
state the editor that is a widget created in createEditor()
method is opened so that it will not be affected by the QStyleOptionViewItem
palette.
Also instead of overwriting the paint method, use the initStyleOption()
method:
#include <QtWidgets>
class StyledItemDelegate: public QStyledItemDelegate
public:
using QStyledItemDelegate::QStyledItemDelegate;
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
QWidget * widget = QStyledItemDelegate::createEditor(parent, option, index);
QPalette pal(widget->palette());
pal.setColor(QPalette::HighlightedText, QColor(Qt::blue));
pal.setBrush(QPalette::Highlight, option.palette.highlight());
widget->setPalette(pal);
return widget;
protected:
void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override
QStyledItemDelegate::initStyleOption(option, index);
option->palette.setColor(QPalette::HighlightedText, QColor(Qt::blue));
;
int main(int argc, char *argv[])
QApplication a(argc, argv);
QTreeView w;
QStandardItemModel model;
w.setModel(&model);
w.setItemDelegate(new StyledItemDelegate);
for(int i=0; i<3; ++i)
auto it = new QStandardItem(QString::number(i));
model.appendRow(it);
for (int j=0; j<4; ++j)
it->appendRow(new QStandardItem(QString("%1-%2").arg(i).arg(j)));
w.expandAll();
w.show();
return a.exec();
add a comment |
In the State_Editing
state the editor that is a widget created in createEditor()
method is opened so that it will not be affected by the QStyleOptionViewItem
palette.
Also instead of overwriting the paint method, use the initStyleOption()
method:
#include <QtWidgets>
class StyledItemDelegate: public QStyledItemDelegate
public:
using QStyledItemDelegate::QStyledItemDelegate;
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
QWidget * widget = QStyledItemDelegate::createEditor(parent, option, index);
QPalette pal(widget->palette());
pal.setColor(QPalette::HighlightedText, QColor(Qt::blue));
pal.setBrush(QPalette::Highlight, option.palette.highlight());
widget->setPalette(pal);
return widget;
protected:
void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override
QStyledItemDelegate::initStyleOption(option, index);
option->palette.setColor(QPalette::HighlightedText, QColor(Qt::blue));
;
int main(int argc, char *argv[])
QApplication a(argc, argv);
QTreeView w;
QStandardItemModel model;
w.setModel(&model);
w.setItemDelegate(new StyledItemDelegate);
for(int i=0; i<3; ++i)
auto it = new QStandardItem(QString::number(i));
model.appendRow(it);
for (int j=0; j<4; ++j)
it->appendRow(new QStandardItem(QString("%1-%2").arg(i).arg(j)));
w.expandAll();
w.show();
return a.exec();
In the State_Editing
state the editor that is a widget created in createEditor()
method is opened so that it will not be affected by the QStyleOptionViewItem
palette.
Also instead of overwriting the paint method, use the initStyleOption()
method:
#include <QtWidgets>
class StyledItemDelegate: public QStyledItemDelegate
public:
using QStyledItemDelegate::QStyledItemDelegate;
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const override
QWidget * widget = QStyledItemDelegate::createEditor(parent, option, index);
QPalette pal(widget->palette());
pal.setColor(QPalette::HighlightedText, QColor(Qt::blue));
pal.setBrush(QPalette::Highlight, option.palette.highlight());
widget->setPalette(pal);
return widget;
protected:
void initStyleOption(QStyleOptionViewItem *option, const QModelIndex &index) const override
QStyledItemDelegate::initStyleOption(option, index);
option->palette.setColor(QPalette::HighlightedText, QColor(Qt::blue));
;
int main(int argc, char *argv[])
QApplication a(argc, argv);
QTreeView w;
QStandardItemModel model;
w.setModel(&model);
w.setItemDelegate(new StyledItemDelegate);
for(int i=0; i<3; ++i)
auto it = new QStandardItem(QString::number(i));
model.appendRow(it);
for (int j=0; j<4; ++j)
it->appendRow(new QStandardItem(QString("%1-%2").arg(i).arg(j)));
w.expandAll();
w.show();
return a.exec();
answered Mar 8 at 18:31
eyllanesceyllanesc
85.3k103564
85.3k103564
add a comment |
add a comment |
Thanks for helping me out.
I understand now. I added code in QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const metod to style QLineEdit. I am trying to get the same background color for QLineEdit when it is created- when I am editing qtreeview item. The problem is when I select the item in qtreeview the whole row gets colored. That's ok. Now when I edit the item for example to change the text in qtreeview item, only the text part gets selected and colored with the same color as previous row selection color. The rest of the QLineEdit is white. In editing mode I would like to color the whole row which is edited with the same color. I could as obviously from my code color it with RGB but I don't know the exact RGB values. Is there any way to get the exact RGB color from item selection and then use it in
pal.setColor(QPalette::Highlight,QColor(qRgb(0,0,255)));
my code:
QWidget* myQItemDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem &option,const QModelIndex &index) const
QLineEdit *lineEdit = new QLineEdit(parent);
connect(lineEdit,SIGNAL(editingFinished()),this,SLOT(commitAndCloseEditor()));
QPalette pal;
pal.setColor(QPalette::HighlightedText, QColor(Qt::white));
pal.setColor(QPalette::Highlight,QColor(qRgb(0,0,255)));
lineEdit->setPalette(pal);
lineEdit->setFrame(false);
return lineEdit;
Thanks, Tom
add a comment |
Thanks for helping me out.
I understand now. I added code in QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const metod to style QLineEdit. I am trying to get the same background color for QLineEdit when it is created- when I am editing qtreeview item. The problem is when I select the item in qtreeview the whole row gets colored. That's ok. Now when I edit the item for example to change the text in qtreeview item, only the text part gets selected and colored with the same color as previous row selection color. The rest of the QLineEdit is white. In editing mode I would like to color the whole row which is edited with the same color. I could as obviously from my code color it with RGB but I don't know the exact RGB values. Is there any way to get the exact RGB color from item selection and then use it in
pal.setColor(QPalette::Highlight,QColor(qRgb(0,0,255)));
my code:
QWidget* myQItemDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem &option,const QModelIndex &index) const
QLineEdit *lineEdit = new QLineEdit(parent);
connect(lineEdit,SIGNAL(editingFinished()),this,SLOT(commitAndCloseEditor()));
QPalette pal;
pal.setColor(QPalette::HighlightedText, QColor(Qt::white));
pal.setColor(QPalette::Highlight,QColor(qRgb(0,0,255)));
lineEdit->setPalette(pal);
lineEdit->setFrame(false);
return lineEdit;
Thanks, Tom
add a comment |
Thanks for helping me out.
I understand now. I added code in QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const metod to style QLineEdit. I am trying to get the same background color for QLineEdit when it is created- when I am editing qtreeview item. The problem is when I select the item in qtreeview the whole row gets colored. That's ok. Now when I edit the item for example to change the text in qtreeview item, only the text part gets selected and colored with the same color as previous row selection color. The rest of the QLineEdit is white. In editing mode I would like to color the whole row which is edited with the same color. I could as obviously from my code color it with RGB but I don't know the exact RGB values. Is there any way to get the exact RGB color from item selection and then use it in
pal.setColor(QPalette::Highlight,QColor(qRgb(0,0,255)));
my code:
QWidget* myQItemDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem &option,const QModelIndex &index) const
QLineEdit *lineEdit = new QLineEdit(parent);
connect(lineEdit,SIGNAL(editingFinished()),this,SLOT(commitAndCloseEditor()));
QPalette pal;
pal.setColor(QPalette::HighlightedText, QColor(Qt::white));
pal.setColor(QPalette::Highlight,QColor(qRgb(0,0,255)));
lineEdit->setPalette(pal);
lineEdit->setFrame(false);
return lineEdit;
Thanks, Tom
Thanks for helping me out.
I understand now. I added code in QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &option, const QModelIndex &index) const metod to style QLineEdit. I am trying to get the same background color for QLineEdit when it is created- when I am editing qtreeview item. The problem is when I select the item in qtreeview the whole row gets colored. That's ok. Now when I edit the item for example to change the text in qtreeview item, only the text part gets selected and colored with the same color as previous row selection color. The rest of the QLineEdit is white. In editing mode I would like to color the whole row which is edited with the same color. I could as obviously from my code color it with RGB but I don't know the exact RGB values. Is there any way to get the exact RGB color from item selection and then use it in
pal.setColor(QPalette::Highlight,QColor(qRgb(0,0,255)));
my code:
QWidget* myQItemDelegate::createEditor(QWidget *parent,const QStyleOptionViewItem &option,const QModelIndex &index) const
QLineEdit *lineEdit = new QLineEdit(parent);
connect(lineEdit,SIGNAL(editingFinished()),this,SLOT(commitAndCloseEditor()));
QPalette pal;
pal.setColor(QPalette::HighlightedText, QColor(Qt::white));
pal.setColor(QPalette::Highlight,QColor(qRgb(0,0,255)));
lineEdit->setPalette(pal);
lineEdit->setFrame(false);
return lineEdit;
Thanks, Tom
edited Mar 10 at 5:28
TheRealBilaal
4131514
4131514
answered Mar 9 at 10:57
TomTom
11
11
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f55067155%2fqstyleditemdelegate-subclassing-paint-method-not-working-right%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown