我有一个自定义小部件在我的项目中使用,我试图通过单击事件更改背景颜色和标签颜色。背景颜色的变化,但标签颜色不会改变......希望有人能帮助找出在我错了......自定义小部件样式表未设置属性
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "myframe.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MyFrame *frame = new MyFrame(this);
ui->gridLayout_2->addWidget(frame);
setStyleSheet("MyFrame {background-color: yellow;}"
"MyFrame QLabel{color: black; font: bold 12px;}"
"MyFrame[pressed=\"true\"] {background-color:red;}"
"MyFrame[pressed=\"true\"] QLabel {color:white;}"
);
}
MainWindow::~MainWindow()
{
delete ui;
}
我的自定义部件//头文件
#ifndef MYFRAME_H
#define MYFRAME_H
#include <QFrame>
#include <QGridLayout>
#include <QLabel>
#include <QDebug>
class MyFrame : public QFrame
{
Q_OBJECT
Q_PROPERTY(bool pressed READ pressed WRITE setPressed)
QGridLayout *layout;
QLabel *name;
public:
explicit MyFrame(QWidget *parent = 0);
signals:
public slots:
bool pressed();
void setPressed(bool);
protected:
bool mPressed;
void mousePressEvent(QMouseEvent *event);
void mouseReleaseEvent(QMouseEvent *event);
};
#endif // MYFRAME_H
//源文件
#include "myframe.h"
MyFrame::MyFrame(QWidget *parent) :
QFrame(parent)
{
mPressed = false;
layout = new QGridLayout(this);
setLayout(layout);
name = new QLabel("button");
layout->addWidget(name);
}
bool MyFrame::pressed()
{
qDebug() << Q_FUNC_INFO << mPressed;
return mPressed;
}
void MyFrame::setPressed(bool status)
{
qDebug() << Q_FUNC_INFO << status;
mPressed = status;
}
void MyFrame::mousePressEvent(QMouseEvent *event)
{
qDebug() << Q_FUNC_INFO << "mouse pressed";
setPressed(true);
style()->unpolish(this);
style()->polish(this);
}
void MyFrame::mouseReleaseEvent(QMouseEvent *event)
{
qDebug() << Q_FUNC_INFO << "mouse released";
setPressed(false);
style()->unpolish(this);
style()->polish(this);
}
框架的背景颜色的变化,但标签颜色不上点击
改变
我编辑为样式() - > unpolish(this);样式() - >抛光(本);解决了qframe背景颜色变化的问题。 – Abin 2014-10-28 14:48:05
如果你将使用自定义的'QToolButton'而不是'QFrame',你将会产生相同的效果,而没有抛光/未抛光的魔法。只有QSS才能完成您的任务。 – 2014-10-28 15:09:22
这只是一个示例应用程序。其实我需要一个自定义按钮,它有一个图像和3个标签..所以我用这样的 – Abin 2014-10-28 15:16:43