Vous pouvez utiliser setItemDelegate méthode de l'arborescence pour la configuration personnalisée procédure de peinture pour vos articles treeview. Dans la méthode de peinture, vous pouvez supprimer le style QStyle :: State_HasFocus des options des éléments et exécuter la routine de peinture de base. Voici un exemple, désolé c'est C++.
...
NoFocusDelegate* delegate = new NoFocusDelegate();
ui->treeView->setItemDelegate(delegate);
...
class NoFocusDelegate : public QStyledItemDelegate
{
protected:
void paint(QPainter* painter, const QStyleOptionViewItem& option, const QModelIndex& index) const;
};
void NoFocusDelegate::paint(QPainter* painter, const QStyleOptionViewItem & option, const QModelIndex &index) const
{
QStyleOptionViewItem itemOption(option);
if (itemOption.state & QStyle::State_HasFocus)
itemOption.state = itemOption.state^QStyle::State_HasFocus;
QStyledItemDelegate::paint(painter, itemOption, index);
}
update0: enlever QFocusFrame d'être noient sur un objet en utilisant TREEVIEW personnalisée QStyle. Voici un exemple de descendant de style QMotifStyle personnalisé (je suppose que dans votre cas, je suppose que ce devrait être un descendant de QMacStyle) qui est appliqué à l'objet application. Il ne fait pas de peinture rectangle de cadre chaque fois qu'il détecte un widget QTreeView
class MyStyle1 : public QMotifStyle
{
public:
MyStyle1()
{
//???
}
void drawControl(ControlElement element, const QStyleOption* option, QPainter* painter, const QWidget* widget = 0) const
{
if (element==CE_FocusFrame)
{
const QFocusFrame* frame = qobject_cast<const QFocusFrame*>(widget);
if (frame && frame->widget())
{
QTreeView* treeView = qobject_cast<QTreeView*>(frame->widget());
if (treeView)
{
qDebug() << "no CE_FocusFrame for QFocusFrame over QTreeViews";
return;
}
}
}
QMotifStyle::drawControl(element, option, painter, widget);
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QCDEStyle style;
a.setStyle(new MyStyle1());
//a.setStyle(new QMotifStyle());
MainWindow w;
w.show();
return a.exec();
}
espérons que cette aide, ce qui est
@serge, merci pour l'excellente information sur ItemDelegates. Le premier problème que j'ai est un rectangle géant bleu autour de l'ensemble de TreeView que j'ai dénommé. –
J'ai téléchargé une capture d'écran pour illustrer: http://techgame.net/~shane/temp/QTreeView-stylesheets.png –
Je pensais d'abord que vous voulez supprimer les rects focus noyer sur les éléments de vue arborescente, mais je suppose que ce que vous voyez mis en évidence est QFocusFrame noyer sur votre contrôle par le style utilisé pour votre application. Cela ressemble à QMacStyle mais je peux me tromper ici. Je ne peux pas non plus le vérifier sur mon ordinateur portable car j'utilise ubuntu. Pls, voir si une mise à jour que j'ai fait pour le post original fonctionnerait pour vous –