2011-10-25 53 views
2

我想交替QComboBox的顏色。在Windows中,我使用view()。setAlternatingRowColors(true)函數沒有問題。在Linux和Mac中看起來不可能。我也嘗試使用樣式表(請參閱下面的代碼),但我有相同的結果(具有相同背景顏色的所有行)。你能解釋我的錯誤嗎?在Mac和Linux的QComboBox中交替排列顏色

#include <QtGui/QApplication> 
#include <QComboBox> 
#include <QAbstractItemView> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    a.setStyleSheet("QComboBox QAbstractItemView{qproperty-alternatingRowColors: true;alternate-background-color: blue;background: red;}"); 
    QComboBox b; 
    b.addItem("MM_NONE"); 
    b.addItem("MM_VERT"); 
    b.addItem("MM_FACE"); 
    b.addItem("MM_EDGE"); 
    bool tt = false; 
    tt = b.view()->alternatingRowColors(); 
    b.show(); 
    return a.exec(); 
} 

回答

3

至少在我的盒子,似乎QPalette::BaseQPalette::AlternateBase是相同的顏色:)更改QPalette::AlternateBase一些其他顏色使得這種代碼做工精細:

#include <QtGui/QApplication> 
#include <QComboBox> 
#include <QAbstractItemView> 
#include <QPalette> 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QComboBox b; 
    b.view()->setAlternatingRowColors(true); 

    QPalette p = b.palette(); 
    p.setColor(QPalette::AlternateBase, Qt::red); 
    b.setPalette(p); 

    b.addItem("MM_NONE"); 
    b.addItem("MM_VERT"); 
    b.addItem("MM_FACE"); 
    b.addItem("MM_EDGE"); 
    b.show(); 
    return a.exec(); 
} 
+0

我以前嘗試過了,我也試現在用自己的代碼(總是會犯一個愚蠢的錯誤),但不幸的是,用我的Ubuntu 11.10和我的Mac OsX 10.6.8,我沒有得到我期待的結果。在Windows中,它可以完美運行,但在Linux和Mac中無法運行。我必須編寫一個多平臺代碼。 –

+0

另外,你的樣式表解決方案在我的Gentoo Linux上工作得很好......我使用的是Qt 4.7.3 – ayoy

+0

所以這是我的f **** g Ubuntu的一個問題...... –