Qt提供的调色板类QPalette专门用于管理部件的外观显示,相当于部件或对话框的调色板,管理他们所有的颜色信息。每个部件都包含一个QPalette对象,在显示时,按照它的QPalette对象中对各部分各状态下的颜色的描述进行绘制。
示例
点击左边的颜色组合框,右边对应的部件发生颜色改变。
新建桌面应用程序testQPalette,类名Dialog,基类QDialog,窗口左侧为控制区,右侧为调色板效果区。示例如下:
设置方法:将颜色组合框与响应的槽方法连接,在槽方法中通过调色板类设置响应部件的外观。首先获取要设置样式部件的调色板,然后根据颜色组合框的选项设置调色板的颜色,再将该调色板重新设置成该部件的调色板,最后刷新。
右边效果展示区内部件的父级为m_contentFrame(QFrame),只需获得该父部件的调色板,就可以设置该区域的样式效果
设置窗体槽方法:获得父部件调色板,设置该调色板窗体的颜色
void Dialog::ShowWindow(int index){
//获得颜色链表
QStringList colorList = QColor::colorNames();
//获取颜色组合框选择的颜色
QColor color=QColor(colorList[index]);
//获取部件的调色板
QPalette p=m_contentFrame->palette();//获取右边父部件的调色板
p.setColor(QPalette::Window,color);
//设置调色板
m_contentFrame->setPalette(p);
//刷新(窗体重绘)
m_contentFrame->update();
}
设置窗体文本槽方法:获得父部件的调色板,设置该调色板窗体文本的颜色
void Dialog::ShowWindowText(int index){
//获得颜色链表
QStringList colorList = QColor::colorNames();
//获得颜色组合框中选择的颜色
QColor color=QColor(colorList[index]);
//获得部件的调色板
QPalette p =m_contentFrame->palette();
//设置调色板的颜色
p.setColor(QPalette::WindowText,color);
//设置部件的调色板
m_contentFrame->setPalette(p);
//刷新(窗体重绘)
m_contentFrame->update();
}
设置按钮槽方法:获得父部件的调色板,设置该调色板按钮的颜色
void Dialog::ShowButton(int index){
//获得颜色链表
QStringList colorList = QColor::colorNames();
//获得颜色组合框中选择的颜色
QColor color=QColor(colorList[index]);
//获得部件的调色板
QPalette p =m_contentFrame->palette();
//设置调色板的颜色
p.setColor(QPalette::Button,color);
//设置部件的调色板
m_contentFrame->setPalette(p);
//刷新(窗体重绘)
m_contentFrame->update();
}
设置按钮文本槽方法:获得父部件的调色板,设置该调色板按钮文本的颜色
void Dialog::ShowButtonText(int index){
//获得颜色链表
QStringList colorList = QColor::colorNames();
//获得颜色组合框中选择的颜色
QColor color=QColor(colorList[index]);
//获得部件的调色板
QPalette p =m_contentFrame->palette();
//设置调色板的颜色
p.setColor(QPalette::ButtonText,color);
//设置部件的调色板
m_contentFrame->setPalette(p);
//刷新(窗体重绘)
m_contentFrame->update();
}
设置背景颜色槽方法:获得父部件的调色板,设置该调色板背景颜色
void Dialog::ShowBase(int index)ButtonText{
//获得颜色链表
QStringList colorList = QColor::colorNames();
//获得颜色组合框中选择的颜色
QColor color=QColor(colorList[index]);
//获得部件的调色板
QPalette p =m_contentFrame->palette();
//设置调色板的颜色
p.setColor(QPalette::Base,color);
//设置部件的调色板
m_contentFrame->setPalette(p);
//刷新(窗体重绘)
m_contentFrame->update();
}
追风赶月莫停留,平芜尽处是春山!