• 10759阅读
  • 13回复

[提问]给QWidget画背景色为什么显示不出来。 [复制链接]

上一主题 下一主题
离线ifantasy
 
只看楼主 倒序阅读 楼主  发表于: 2011-09-01
我在主QWidget上建了一个子QWidget部件,在子部件上使用“this->setStyleSheet("background:color(100,50,60)");”画背景色,为什么看不到背景色,而把子部件改为QLabel就可以看见。谁能解释一下啊,万分感谢!下面是代码:
window.h文件:

class Window:public QWidget
{
Q_OBJECT
public:
Window(QWidget*parent=0);
public slots:
void Ok();
};

window.cpp文件:
#include"window.h"
#include <qdebug.h>
Window::Window(QWidget*parent):QWidget(parent)
{
this->setStyleSheet("background-color:color(100,100,60)");
}
void Window::Ok()
{
    QPropertyAnimation *anim1=new QPropertyAnimation(this, "pos");
    anim1->setDuration(1000);
    anim1->setStartValue(QPoint(0, -400));
    anim1->setEndValue(QPoint(0, 0));
    this->show();
    anim1->start();
}
main主函数:

#include"window.h"
int main(int argc,char*argv[])
{
QApplication a(argc,argv);
QWidget *w=new QWidget;
w->setGeometry(0,0,400,400);
Window*win=new Window(w);
win->setGeometry(0,0,300,300);

QPushButton*b=new QPushButton("start",w);
b->setGeometry(310,100,50,50);
QObject::connect(b,SIGNAL(clicked()),win,SLOT(Ok()));w->show();
return a.exec();
}


离线jdwx

只看该作者 1楼 发表于: 2011-09-01
回 楼主(ifantasy) 的帖子
设置widget的size了没有?默认是0,看不见
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线ifantasy
只看该作者 2楼 发表于: 2011-09-01
回 1楼(jdwx) 的帖子
绝对设置了,请放心,QLabel就可以显示。在线等啊。
离线jdwx

只看该作者 3楼 发表于: 2011-09-01
回 2楼(ifantasy) 的帖子
好用,如图:
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线ifantasy
只看该作者 4楼 发表于: 2011-09-01
回 3楼(jdwx) 的帖子
我都是手写代码的,不用designer。这个问题你可以手写看看,一定存在的。
离线jdwx

只看该作者 5楼 发表于: 2011-09-01
回 4楼(ifantasy) 的帖子
如图
发帖时要说明:操作系统、Qt版本、编译器,这样能更快的得到回复。
离线ifantasy
只看该作者 6楼 发表于: 2011-09-01
回 5楼(jdwx) 的帖子
你不要用UI试试就知道了。
离线dbzhang800

只看该作者 7楼 发表于: 2011-09-01
Re:回 5楼(jdwx) 的帖子
引用第6楼ifantasy于2011-09-01 11:54发表的 回 5楼(jdwx) 的帖子 :
你不要用UI试试就知道了。

不要老想着用不用ui,用与不用,不会有任何区别。

另外:不妨给出你所说的不工作的例子(以及具体的测试环境),这需要不了几行代码,比如

  1. #include <QtGui/QApplication>
  2. #include <QtGui/QWidget>
  3. class Widget:public QWidget
  4. {
  5. public:
  6.     Widget(QWidget *parent = 0):QWidget(parent)  {
  7.         this->setStyleSheet("background:color(100,50,60)");
  8.     }
  9. };
  10. int main(int argc, char **argv)
  11. {
  12.   QApplication app(argc, argv);
  13.   QWidget w;
  14.   Widget ww(&w);
  15.   w.show();
  16.   return app.exec();
  17. }


离线ifantasy
只看该作者 8楼 发表于: 2011-09-01
window.h文件:

class Window:public QWidget
{
Q_OBJECT
public:
Window(QWidget*parent=0);
public slots:
void Ok();
};

window.cpp文件:
#include"window.h"
#include <qdebug.h>
Window::Window(QWidget*parent):QWidget(parent)
{
this->setStyleSheet("background-color:color(100,100,60)");
}
void Window::Ok()
{
    QPropertyAnimation *anim1=new QPropertyAnimation(this, "pos");
    anim1->setDuration(1000);
    anim1->setStartValue(QPoint(0, -400));
    anim1->setEndValue(QPoint(0, 0));
    this->show();
    anim1->start();
}
main主函数:

#include"window.h"
int main(int argc,char*argv[])
{
QApplication a(argc,argv);
QWidget *w=new QWidget;
w->setGeometry(0,0,400,400);
Window*win=new Window(w);
win->setGeometry(0,0,300,300);

QPushButton*b=new QPushButton("start",w);
b->setGeometry(310,100,50,50);
QObject::connect(b,SIGNAL(clicked()),win,SLOT(Ok()));w->show();
return a.exec();
}
离线ifantasy
只看该作者 9楼 发表于: 2011-09-02
不能沉啊,问题解决了,这个绝对会成为精华贴。求真正的高手!
离线ifantasy
只看该作者 10楼 发表于: 2011-09-02
求真相!!!!!!!!!!!!!!!
离线dbzhang800

只看该作者 11楼 发表于: 2011-09-02
引用第10楼ifantasy于2011-09-02 10:15发表的  :
求真相!!!!!!!!!!!!!!!

没有和你相同环境的用户的附和,我无法确认你的问题是否存在,也不能确信你贴的代码就是你真实测试用的代码。

但有一点:如果你严格按照manual做了,但还有问题,你就可以直接去提交bug了

QWidget


Supports only the background, background-clip and background-origin properties.
If you subclass from QWidget, you need to provide a paintEvent for your custom QWidget as below:
  1. void CustomWidget::paintEvent(QPaintEvent *)
  2. {
  3.      QStyleOption opt;
  4.      opt.init(this);
  5.      QPainter p(this);
  6.      style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
  7. }

  The above code is a no-operation if there is no stylesheet set.
Warning: Make sure you define the Q_OBJECT macro for your custom widget.

离线ifantasy
只看该作者 12楼 发表于: 2011-09-02
回 11楼(dbzhang800) 的帖子
呵呵,知道了。原来要加上paintEvent才可以,否则就会不显示,谢谢各位!!!!!!!
离线byoreh

只看该作者 13楼 发表于: 2022-03-25
快速回复
限100 字节
 
上一个 下一个