2010年2月20日星期六

Qt 自定义 Combo Box

这星期效率还不错,延续了上周的状态,写了非常多的代码,但是大部分都是低复杂度的”简单代码”,写了一些Gui。和一些同事不一样,我很喜欢写Gui,因为写完马上就可以看到成果,很有成就感,而且用Qt写Gui感觉就像堆积木,很简单,只要找到自己需要的API,我个人非常喜欢Qt风格的C++的应用程序接口,很清晰且简单,相当直觉化

customize_combo_box_qt这里和大家很简单谈一些我最近用Qt写Gui的发现的好玩特性,也许Qt的标准控件已经不能满足你了,其实,我们同样可以很容易地进行自定义控件,这里使用Combo Box作为例子。

以下代码会构建出我们自定义的Combo Box,如附图所示,这里使用了Qt Style Sheet

 

 

// set some self defined colors
QColor royalBlue;
QColor orange;
royalBlue.setRgb(65, 105, 225);
orange.setRgb(255, 165, 000);

// set default color
myComboBox->setStyleSheet("* { background-color: rgb(65, 105, 225) }");

myComboBox->insertItem(0, "blue");
myComboBox->setItemData(0, royalBlue, Qt::BackgroundRole);

myComboBox->insertItem(1, "red");
myComboBox->setItemData(1, Qt::red, Qt::BackgroundRole);

myComboBox->insertItem(2, "green");
myComboBox->setItemData(2, Qt::green, Qt::BackgroundRole);

myComboBox->insertItem(3, "yellow");
myComboBox->setItemData(3, Qt::yellow, Qt::BackgroundRole);

myComboBox->insertItem(4, "orange");
myComboBox->setItemData(4, orange, Qt::BackgroundRole);

myComboBox->insertItem(5, "cyan");
myComboBox->setItemData(5, Qt::cyan, Qt::BackgroundRole);

myComboBox->insertItem(6, "purple");
myComboBox->setItemData(6, Qt::magenta, Qt::BackgroundRole);

 

 

也许还不过瘾,我们还可以通过QPalette来自定义我们的Combo Box,以下是一个简单例子。

 QPalette myPalette = myComboBox->palette();

 // outline around the menu
 myPalette.setColor(QPalette::Window, Qt::red);    
 myPalette.setColor(QPalette::WindowText, Qt::white);

 // customize myComboBox button
 myPalette.setColor(QPalette::Button, Qt::darkCyan);  
 myPalette.setColor(QPalette::ButtonText, Qt::white);
 
 // customize myComboBox menu
 myPalette.setColor(QPalette::Base, Qt::darkCyan);  
 myPalette.setColor(QPalette::Text, Qt::white);

 // customize highlight button and menu
 myPalette.setColor(QPalette::Highlight, Qt::blue);   
 myPalette.setColor(QPalette::HighlightedText, Qt::red);
 
 // customize the disabled color
 myPalette.setColor(QPalette::Disabled, QPalette::Button, Qt::gray);
 myPalette.setColor(QPalette::Disabled, QPalette::ButtonText, Qt::lightGray);
 
 myComboBox->setPalette(myPalette);

没有评论: