• 14601阅读
  • 10回复

qtablewidget中,当某一行被highlight时,如何让某一qtablewidgetitem中的icon不被选中 [复制链接]

上一主题 下一主题
离线honghushw
 

只看楼主 倒序阅读 楼主  发表于: 2010-01-12
比如windows下面的开始菜单弹出来之后,当鼠标在菜单项上面滑动时,菜单项中最左端的icon看起来像是没有被Highlight起来
我现在有一个qtablewidget,一行有5个qtablewidget,第一个是icon
我想实现的是当单击鼠标该行被选中后,如何让这个icon仍旧浮于highlight之上
谢谢
离线honghushw

只看该作者 1楼 发表于: 2010-01-14
看来问题有难度哦
我自己一点头绪都没有
:(
离线yangfanxing
只看该作者 2楼 发表于: 2010-01-14

比如windows下面的开始菜单弹出来之后,当鼠标在菜单项上面滑动时,菜单项中最左端的icon看起来像是没有被Highlight起来

这个吗???跟我问了同样的问题!
http://www.qtcn.org/bbs/read.php?tid=25188
但是本来就可以实现这个效果啊~~~参照帖子,图一的效果就是默认实现的效果~~~这个跟window开始的菜单效果是一样的~~~你还不满足???呵呵。。。

我要问的是怎样不要highlight图标,只highlight文字部分,如图2~~~
PHPWind好恶心。。。不想看这种界面。。。
离线honghushw

只看该作者 3楼 发表于: 2010-01-14
呵呵,又是你呀。
真好!
我参照哪个呢??看不明白呀。
链接过去就是一个提问帖哦。
离线honghushw

只看该作者 4楼 发表于: 2010-01-14
要是能实现你图二的效果也可以
你仔细观察一下,缺省的选中状态和windows开始菜单项的那种highlight还是有区别的。
在qtablewidget下面,icon被选中后,图标上面给蒙了一层颜色。
难道是我设了highlight的background image的缘故?
离线honghushw

只看该作者 5楼 发表于: 2010-01-14
我的设置样式源码:
void QTableWidgetNew::InitStyle(int rowHeight)
{
    this->setSelectionBehavior(QAbstractItemView::SelectRows);

    this->setSelectionMode(QAbstractItemView::ExtendedSelection);
    this->setShowGrid(false);
    this->setEditTriggers(QAbstractItemView::NoEditTriggers);

    this->setStyle(new QCleanlooksStyle);
    this->setRowHeight(0, rowHeight);
    this->verticalHeader()->setVisible(false); //false
    this->horizontalHeader()->setVisible(true); //true
    this->horizontalHeader()->setHighlightSections(false);

    this->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);//
  

    this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);//
    this->horizontalHeader()->setResizeMode(QHeaderView::Fixed);
    
    this->setStyleSheet(" font-size: 12px; \
            background: white;\
            border:0px solid;\
            background-image: url(:/message/message/list_menu_bg02.bmp); \
            selection-background-color: \
                    qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1, \
                            stop: 0 #A5B6D6, stop: 0.5 #94A6C6, \
                            stop: 0.6 #94A6C6, stop: 1 #738EB5 );\
         ");

    this->horizontalHeader()->setStyleSheet(" \
            QHeaderView::section { \
            background: #F7F7F7;\
            background-color: #F7F7F7; \
            color: black; \
            border: 1px inset #DEDEDE; \
            height: 14px;\
            font: Fixed Arial;\
            } \
        ");

    this->verticalScrollBar()->setStyleSheet(" \
        QScrollBar:vertical{ \
            border: 1px insert white; \
            background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\
                                 stop: 0 #F7EFEF, stop: 0.5 #F7F7F7,\
                                 stop: 0.6 #F7F7F7, stop: 1 #E7EFEF);\
            width: 17px; \
            margin: 17px 0 17px 0; \
            } \
        QScrollBar::handle:vertical { \
            border: 1px solid grey;\
            background: qlineargradient(x1: 0, y1: 0, x2: 0, y2: 1,\
                                stop: 0 #F7F7EF, stop: 0.5 #EFEFEF,\
                                stop: 0.6 #EFEFEF, stop: 1 #E7E7E7);\
            min-height: 20px;\
            }\
        QScrollBar::add-line:vertical {\
            border: 0px insert grey;\
            background: white;\
            height: 17px;\
            subcontrol-position: bottom;\
            subcontrol-origin: margin;\
            }\
        QScrollBar::sub-line:vertical {\
            border: 0px insert grey;\
            background: white;\
            height: 17px;\
            subcontrol-position: top;\
            subcontrol-origin: margin;\
            }\
        QScrollBar::up-arrow:vertical{ \
            width: 17px; \
            height: 17px; \
            background: white;\
            image: url(:/common/common/scroll_up.bmp);\
            }\
        QScrollBar::down-arrow:vertical { \
            width: 17px; \
            height: 17px; \
            background: white;\
            image: url(:/common/common/scroll_down.bmp);\
            }\
        QScrollBar::add-page:vertical, QScrollBar::sub-page:vertical {\
            background: white;\
            }\
        ");

}
离线honghushw

只看该作者 6楼 发表于: 2010-01-19
自己顶一下,呵呵
离线yangfanxing
只看该作者 7楼 发表于: 2010-01-19
引用第4楼honghushw于2010-01-14 23:35发表的  :
要是能实现你图二的效果也可以
你仔细观察一下,缺省的选中状态和windows开始菜单项的那种highlight还是有区别的。
在qtablewidget下面,icon被选中后,图标上面给蒙了一层颜色。
难道是我设了highlight的background image的缘故?


我也是这个问题啦,,,还没解决掉。
嗯,看出来了,是有区别~
(我的帖子里图一是自己弄的,图二是理想的结果,还没实现)。。。

继续UP哈~

————————————————————————————————————
那个区别的原因在:
highlight好像是往Item上边蒙了一层颜色;而background是完完全全的背景,不会蒙在图标上(或前景上);

要实现你所说的“window开始”的那种效果你就把被选中的某行的background设置下,并且把highlight的状态去掉,这样看着效果应该就一样了~

我不需要这样的效果哈,没试,呵呵。。。有必要的话你可以试试看哪~
[ 此帖被yangfanxing在2010-01-19 22:17重新编辑 ]
PHPWind好恶心。。。不想看这种界面。。。
离线water_wf

只看该作者 8楼 发表于: 2010-01-20
我觉得两个办法:
一:继承QTreeWidgetItem或者QTableWidgetItem,当前standarditem只支持三个显示区域,check部分,icon部分,text部分,不过icon和text是和在一起的。自己添加一个新的区域来显示。复杂
二:使用setIndexWidget来做,自己做一个现成的widget,想怎么显示就怎么显示,设置进去,不过需要处理很多事情,简单但是麻烦。
离线yangfanxing
只看该作者 9楼 发表于: 2010-01-20
引用第8楼water_wf于2010-01-20 10:10发表的  :
简单但是麻烦!!!——

这个字眼。。。
不过确实如果只能这样的话。。。
呃。。。我觉得我得放弃这个念头了~呵呵。。。
PHPWind好恶心。。。不想看这种界面。。。
离线honghushw

只看该作者 10楼 发表于: 2010-02-01
我放弃了。呵呵。因为看到qt demo中的一个icon的例子,巨额觉得改起来超级复杂。说不定带来一堆的bug,只好作罢。多谢各位了:)
快速回复
限100 字节
 
上一个 下一个