• 16167阅读
  • 14回复

如何改变button的背景色啊?谢谢!(已解决) [复制链接]

上一主题 下一主题
离线liyao32
 
只看楼主 倒序阅读 楼主  发表于: 2006-07-26
如何改变button的背景色啊?
我用palette.setColor(QPalette::Active, QPalette::Button, QColor(170, 255, 204));没什么发应,不是用这个来设吗?谢谢!
[ 此贴被liyao32在2006-07-28 15:51重新编辑 ]
离线igoo
只看该作者 1楼 发表于: 2006-07-26
可以自己写一个新的style来做到
qt demo里面有例子

楼主的方法似乎可以,不过也不知道为什么
离线liyao32
只看该作者 2楼 发表于: 2006-07-26
哦,谢谢
离线igoo
只看该作者 3楼 发表于: 2006-07-26
用style太麻烦,我检查了一下你的方法,下面的可以,不过所有的按钮全绿了

   QPalette pl;
   pl = QApplication::palette();
   pl.setColor(QPalette::Active,QPalette::Button,QColor(Qt::green));
   QApplication::setPalette(pl);
离线igoo
只看该作者 4楼 发表于: 2006-07-26
不过窗口应该也有自己的调色板,设置特定窗口的就行了
这里的关键是QApplication::palette()返回局部变量,因次不能
QApplication::palette().setColor()//不起作用
离线liyao32
只看该作者 5楼 发表于: 2006-07-26
在我这你上边的方法也不行呢?还是一点反应也没有
离线igoo
只看该作者 6楼 发表于: 2006-07-26
引用第5楼liyao322006-07-26 16:29发表的“”:
在我这你上边的方法也不行呢?还是一点反应也没有 [表情]


多贴一些代码出来看看
离线liyao32
只看该作者 7楼 发表于: 2006-07-26
void setupUi(QWidget *Form)
  {
  Form->setObjectName(QString::fromUtf8("Form"));
  Form->resize(QSize(240, 320).expandedTo(Form->minimumSizeHint()));
  QPalette palette;
   
  palette.setColor(QPalette::Active, static_cast<QPalette::ColorRole>(10), QColor(98, 169, 255));
   palette.setColor(QPalette::Active, static_cast<QPalette::ColorRole>(0), QColor(170, 255, 204));
   palette.setColor(QPalette::Active, static_cast<QPalette::ColorRole>(1), QColor(170, 255, 204));

  Form->setPalette(palette);
  lineEdit = new QLineEdit(Form);
  lineEdit->setObjectName(QString::fromUtf8("lineEdit"));
  lineEdit->setEnabled(true);
  lineEdit->setGeometry(QRect(70, 170, 113, 20));
  QPalette palette1;
   palette1.setColor(QPalette::Disabled, static_cast<QPalette::ColorRole>(10), QColor(165, 255, 191));
   palette1.setColor(QPalette::Disabled, static_cast<QPalette::ColorRole>(6), QColor(0, 0, 0));
   
  lineEdit->setPalette(palette1);
  lineEdit->setReadOnly(false);
  label = new QLabel(Form);
  label->setObjectName(QString::fromUtf8("label"));
  label->setGeometry(QRect(50, 10, 100, 30));
  pushButton = new QPushButton(Form);
  pushButton->setObjectName(QString::fromUtf8("pushButton"));
  pushButton->setGeometry(QRect(80, 120, 75, 23));
  QPalette palette2;
   palette2.setColor(QPalette::Active, static_cast<QPalette::ColorRole>(1), QColor(170, 255, 204));
   pushButton->setPalette(palette2);

  toolButton = new QToolButton(Form);
  toolButton->setObjectName(QString::fromUtf8("toolButton"));
  toolButton->setProperty("modal", QVariant(false));
  toolButton->setGeometry(QRect(170, 110, 50, 50));
  QPalette palette3;
  palette3.setColor(QPalette::Active, static_cast<QPalette::ColorRole>(10), QColor(192, 255, 213));
  toolButton->setPalette(palette3);
  toolButton->setIcon(QIcon(QString::fromUtf8("DSC01954.JPG")));
  toolButton->setIconSize(QSize(50, 50));

  retranslateUi(Form);

  QMetaObject::connectSlotsByName(Form);
  } // setupUi

这个是setupUi那个函数。
class QParent : public QWidget
{
public:
Ui::Form m_cUI;//setupui 是Ui::Form的成员函数
}
在QParent里调用setupUi(this)。
离线igoo
只看该作者 8楼 发表于: 2006-07-26
这里有几点需要注意:
其实用designer会做出来一个名字空间;Ui,里面都是自动生成的,建议不要直接修改这里的东西,如果需要调整,那么可以在qparent中再来一个setupUi,并且通过ui.xxx来更改控件的属性
否则你直接修改,uic重新编译的时候可能又给你换回来了,甚至出错。把名字空间ui当成一个类来用


另外我 给你介绍的方式是全局的qappalication的静态成员
另外每个窗口都有调色板,结合上面我说的,建议你这么做
在qparent的setupUi中(自己写的函数):
QPalette pl;
pl = m_cUI.buttonxxx.palette();
pl.setColor(xxx)
m_cUI.buttonxxx.setPalette(pl);

一定要先得到调色板,再把调色板选入,原因不用多说了。
你再试试吧
离线liyao32
只看该作者 9楼 发表于: 2006-07-27
void QParent::setupUi(QWidget *Form)
{
   m_cUI.setupUi(Form);
  QPalette palette;
   palette = Form->palette();
  palette.setColor(QPalette::Active, static_cast<QPalette::ColorRole>(10), QColor(98, 169, 255));
   palette.setColor(QPalette::Active, static_cast<QPalette::ColorRole>(0), QColor(170, 255, 204));
   palette.setColor(QPalette::Active, static_cast<QPalette::ColorRole>(1), QColor(170, 255, 204));
   Form->setPalette(palette);
  QPalette palette2;
   palette2 = m_cUI.pushButton->palette();
   palette2.setColor(QPalette::Active, static_cast<QPalette::ColorRole>(1), QColor(170, 255, 204));
   m_cUI.pushButton->setPalette(palette2);
}

上面是现在的做法,但是还是毫无反应。
对了,你这段代码
QPalette pl;
  pl = QApplication::palette();
  pl.setColor(QPalette::Active,QPalette::Button,QColor(Qt::green));
  QApplication::setPalette(pl);
是加在什么地方的?main函数里,还是setupUi里,我这个加在哪都没用呢。
离线liyao32
只看该作者 10楼 发表于: 2006-07-28
如何改变button的背景色啊?谢谢!(已经解决)
已经解决
离线alina
只看该作者 11楼 发表于: 2007-05-18
楼主可不可以分享一下,我也有同样的问题
离线sarey
只看该作者 12楼 发表于: 2007-06-18
解决了也不说一下方法,相当过分!
离线sunyilong
只看该作者 13楼 发表于: 2008-07-23
可以通过贴背景图片,
也可以设置背景色
离线wminiboy
只看该作者 14楼 发表于: 2010-08-05
能不能具体一点。。。谢谢。。
快速回复
限100 字节
 
上一个 下一个