Widget::Widget(QWidget *parent)
: QWidget(parent), ui(new Ui::Widget) {
ui->setupUi(this);
connect(ui->button, SIGNAL(clicked()), this, SLOT(setColor()));
QPalette p = palette();
p.setColor(QPalette::Text, QColor(0, 255, 0));
setPalette(p); // 注意這里, 修改了widget的調(diào)色板, 子窗口ui->lineEdit的顏色變化.
}
Widget::~Widget() {
delete ui;
}
void Widget::setColor() {
QPalette palette = ui->lineEdit->palette();
const QColor &color = QColorDialog::getColor(palette.color(QPalette::Background), this);
if (color.isValid()) {
palette.setColor(QPalette::Highlight, color);
ui->lineEdit->setPalette(palette);
}
}
palette.setColor(QPalette::Highlight, color); 此處: QPalette::Highlight // 被選中后文字的背景色. QPalette::HighlightText // 被選中后文字的前景色. QPalette::Text // 文字的前景色 QPalette::Base // QTextEdit的背景色, 默認(rèn)是白色的. Role: Qt中會(huì)有一組數(shù)據(jù), 當(dāng)取得這些數(shù)據(jù)時(shí), 使用同樣的方法去獲取, 為了指明是取得哪種數(shù)據(jù), 所以就定義了Role這種概念, 來指明要獲取的數(shù)據(jù)的類型, 例如在View中, 如有顯示的文字, 圖標(biāo), 真正有用的數(shù)據(jù)(可能沒有顯示出來, 而是在內(nèi)部存儲(chǔ)著), 取得這些數(shù)據(jù)都是用同一個(gè)方法data(), 通過指明數(shù)據(jù)的角色來獲得. 所有Qt窗口部件都擁有一個(gè)QPalette, 并使用它繪制自己. 應(yīng)用程序還有一個(gè)調(diào)色板, 通過QApplication::palette()來獲得. 修改一個(gè)窗口部件的調(diào)色板, 只影響這個(gè)窗口部件以及子窗口部件(不包含子窗口, 如只是以他作為父對(duì)象來管理內(nèi)存, 而不在他里面顯示), 而修改應(yīng)用程序的調(diào)色板, 會(huì)影響到該應(yīng)用程序的所有窗口部件