2023/11/24 学习记录:
最先想实现的是Qcombox可以跟QlineEdit一样设置PlaceholderText属性一样默认颜色为灰色,输入内容后变成黑色,结果发现Qcombox无法实现这一功能;
查找多处资料,还是没找到怎么实现的。。。。。
最后解决办法如下:
首先放上最终的效果图:
整体实现思路如下:首先是在ui文件中对默认的字体设置,当combox的index变化时重新对默认字体设置,然后设置首行选项为灰色且无法选中,但此灰色和lineEdit的默认提示灰色有色差,可以通过设置lineEdit的默认文字和字体颜色保持一致,这样就可以保证combox未选中时,下拉首项和lineEdit未输入时三种颜色一致了
对于Combox在ui属性中设置:
QComboBox {padding-right: 0px; color: #9B9B9B; border: 1px solid #4A90E2; font: 52px "黑体";}
这样未选择时就是这个颜色color: #9B9B9B(具体可以自己更改),然后在设置信号与槽函数:
connect(ui->comboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(onCurrentIndexChanged()));
void MainWindow::onCurrentIndexChanged(){
ui->comboBox->setStyleSheet("QComboBox {padding-right: 0px; color: #000000; border: 1px solid #4A90E2; font: 52px \"SimHei\";}")
}
这样在第一次选择后,就会将选择的颜色从灰色改为黑色color: #000000;
然后问题来了,QT中lineEdit默认的颜色和设置好的QComboBox QT::Gray颜色有色差,可以通过设置lineEdit的PlaceholderText:默认文本和颜色
ui->lineEdit->setPlaceholderText(QStringLiteral("未选择锚段编号"));
QPalette palette = ui->lineEdit->palette();
palette.setColor(QPalette::Normal, QPalette::PlaceholderText, Qt::gray);
ui->lineEdit->setPalette(palette);