点击右侧toolButton可以弹出QColorDialog颜色选择面板,
选择好颜色后,编辑面板中的label背景颜色将会改变,lineEdit将会显示颜色的名字。
在这里,按钮使用的是QToolButton而不是QPushButton,原因是QToolButton相对更加灵活,应为它不像QPushButton那样有自己的固定的外观策略,
它会随着外部布局器的大小来灵活的调整自己本身的大小。
其中lineEdit设置为不可编辑模式,因为QLineEdit没有setEdit接口,所以始终下面不可设置焦点的方式来禁止其编辑功能。
lineEdit->setFocusPolicy(Qt::NoFocus);
coloreditwidget.h
class ColorEditWidget:public QWidget
{
Q_OBJECT
public:
ColorEditWidget();
~ColorEditWidget();
void setColor(const QColor &c)
{
if(c.isValid())
{
color=c;
label->setStyleSheet(QString("background-color:%1").arg(color.name()));
lineEdit->setText(color.name());
}
}
QColor getColor()
{
return color;
}
private slots:
void slotButtonClicked();
private:
void ui();
void initialize();
QColor color;
QLabel*label;
QLineEdit *lineEdit;
// QPushButton *button;
QToolButton *button;
};
coloreditwidget.cpp
<pre name="code" class="cpp">ColorEditWidget::ColorEditWidget()
{
ui();
initialize();
}
ColorEditWidget::~ColorEditWidget()
{
}
void ColorEditWidget::slotButtonClicked()
{
QColor c=QColorDialog::getColor(color);
if(c.isValid())
{
color=c;
label->setStyleSheet(QString("background-color:%1").arg(color.name()));
lineEdit->setText(color.name());
}
}
void ColorEditWidget::ui()
{
label=new QLabel;
lineEdit=new QLineEdit;
// button=new QPushButton(this);
button=new QToolButton;
QHBoxLayout *layout=new QHBoxLayout;
layout->setMargin(0);
layout->addWidget(label);
layout->addWidget(lineEdit,1);
layout->addWidget(button);
setLayout(layout);
this->setAutoFillBackground(true);
QPalette palette;
palette.setColor(QPalette::Background, Qt::white);
this->setPalette(palette);
}
void ColorEditWidget::initialize()
{
color=Qt::green;
label->setFixedWidth(30);
label->setStyleSheet(QString("background-color:%1").arg(color.name()));
lineEdit->setText(color.name());
lineEdit->setFocusPolicy(Qt::NoFocus);
button->setText("...");
connect(button,SIGNAL(clicked()),this,SLOT(slotButtonClicked()));
}