QWidget 设置样式 setstylesheet 无效

风声边界 2011-03-22 02:06:29
myQWidget:public QWidget

myQWidget *widget = new myQWidget(this);
widget.setStyleSheet("background-color:blue;");
widget.setGeometry(100,100,100,100);
widget->show();

设置样式无效,为啥?
...全文
3040 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
peiyu333 2011-04-02
  • 打赏
  • 举报
回复
这个是你的自定义控件吧。是不是重写了绘制函数。
风声边界 2011-04-02
  • 打赏
  • 举报
回复
谢谢楼上,以及多层楼上的,谢谢
zjttcsy 2011-04-02
  • 打赏
  • 举报
回复
看这个:

// 继承的Widget重新实现paintEvent
void DownloadManager::paintEvent(QPaintEvent *)
{
QStyleOption opt;
opt.init(this);
QPainter p(this);
style()->drawPrimitive(QStyle::PE_Widget, &opt, &p, this);
}
风声边界 2011-04-02
  • 打赏
  • 举报
回复
第四种方式应该是正解,我现在只能这样了
zhh_kv 2011-04-02
  • 打赏
  • 举报
回复
1,刚我拿你的例子运行了下,发现是不起作用;
2,然后我稍微修改了下代码:如下:
SubWidget::SubWidget(QWidget *parent) :
QWidget(parent)
{
this->setFixedSize(200,200);
this->setStyleSheet(QString::fromUtf8("background-color: rgb(195, 0, 255);"));
QPushButton *btn = new QPushButton("hello",this);
}

运行效果是:这个button的背景色是你样式表的背景色;
也就是说:此处设置的样式表对本窗口没起作用,对其子窗口起作用

3:修改代码如下:
#include "subwidget.h"
#include <QPushButton>
#include <QApplication>

SubWidget::SubWidget(QWidget *parent) :
QWidget(parent)
{
this->setFixedSize(200,200);
qApp->setStyleSheet(QString::fromUtf8("QWidget{ background-color: rgb(195, 0, 255);}"));
//QPushButton *btn = new QPushButton("hello",this);
}
此时背景色起作用,但不好的地方是 样式表对所有的QWidget对象起作用;

4. 背景色可以QPalette进行设置
风声边界 2011-04-02
  • 打赏
  • 举报
回复
没有啊,简单测试了,啥也没有设置也是不行
下面是我的测试实例
#ifndef MAINWINDOW_H
//mainwindow.h
#define MAINWINDOW_H

#include <QMainWindow>
class QMdiArea;

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QMdiArea *mdiArea;
};

#endif // MAINWINDOW_H

//mainwindow.cpp
#include "mainwindow.h"
#include "subwidget.h"
#include <QMdiArea>

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
mdiArea = new QMdiArea;

setCentralWidget(mdiArea);
this->setWindowState(Qt::WindowMaximized);//窗体以最大化显示

SubWidget *form = new SubWidget(this);

mdiArea->addSubWindow(form,Qt::Dialog | Qt::WindowMinimizeButtonHint);
}

MainWindow::~MainWindow()
{
}

//subwidget.h
#ifndef SUBWIDGET_H
#define SUBWIDGET_H

#include <QWidget>

class SubWidget : public QWidget
{
Q_OBJECT
public:
explicit SubWidget(QWidget *parent = 0);

signals:

public slots:

};

#endif // SUBWIDGET_H

//subwidget.cpp
#include "subwidget.h"

SubWidget::SubWidget(QWidget *parent) :
QWidget(parent)
{
this->setFixedSize(200,200);
this->setStyleSheet(QString::fromUtf8("background-color: rgb(195, 0, 255);"));
}


//main.cpp
#include <QApplication>
#include <QDialog>

#include "mainwindow.h"
#include "subwidget.h"

int main(int argc,char **argv)
{
QApplication app(argc,argv);

MainWindow w;
w.show();

/*直接作为主窗体显示就没有问题
SubWidget subWidget;
subWidget.show();
*/

return app.exec();


}


//test.pro

FORMS +=

SOURCES += \
main.cpp \
mainwindow.cpp \
subwidget.cpp

HEADERS += \
mainwindow.h \
subwidget.h

zhh_kv 2011-04-02
  • 打赏
  • 举报
回复 1
作为MainWindow的centralWidget 就不行了,不知道为啥
answer:
在MainWindow中 你是否设置了样式表,如果在MainWindow设置了样式表,则在他的子窗口(centralWidget )部件再此设置样式表(widget.setStyleSheet("background-color:blue;");),将不起作用。
风声边界 2011-04-01
  • 打赏
  • 举报
回复
测试过了,简单的QWidget,直接作为窗体显示,直接设置setStyleSheets,背景色可以

但是作为MainWindow的centralWidget 就不行了,不知道为啥
风声边界 2011-04-01
  • 打赏
  • 举报
回复
测试过了,简单的QWidget,直接作为窗体显示,直接设置setStyleSheets,背景色可以

但是作为MainWindow的centralWidget 就不行了,不知道为啥
风声边界 2011-04-01
  • 打赏
  • 举报
回复
楼上的主意不错,我试试
yzhj2005 2011-03-30
  • 打赏
  • 举报
回复
widget.setStyleSheet("background-color:blue;");
widget.setGeometry(100,100,100,100);
能编译通过吗,
wyjam 2011-03-30
  • 打赏
  • 举报
回复
你直接在designer上给widget增加颜色,然后看ui_**.c的代码。就知道结果了。
风声边界 2011-03-30
  • 打赏
  • 举报
回复
楼上的意思我明白,是我写的错误,应该是先设置大小再设置样式,程序中肯定是这样写
谢谢指正,
但主要问题不在这,在QWidget使用setStyleSheet函数,界面上没有响应
qter_wd007 2011-03-23
  • 打赏
  • 举报
回复
把这段代码放到右键菜单上的setStyleSheet,里面试试,看看提示是什么,再一点一点的改。
dbzhang800 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 weihua1984 的回复:]

工作机与上网机隔离
第一种方法 ,编译执行正确也是无法奏效,不知道为什么
[/Quote]
贴你完整的测试代码(应该不超过50行吧?)

不然你很可能是在一个错误的假设下引导大家讨论问题,这样就不太好了
风声边界 2011-03-23
  • 打赏
  • 举报
回复
工作机与上网机隔离
第一种方法 ,编译执行正确也是无法奏效,不知道为什么
大熊哥V5 2011-03-23
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 qqyanchong 的回复:]
widget->setStyleSheet("background-color:blue;");
widget->setGeometry(100,100,100,100);
[/Quote]
2 楼正解,如果在qt或vs里敲代码会自动将"."联想成"->",如果用"."也应该是会报错的,不应该会编译通过。
指针就要用"->",普通变量用"."。
hitexam 2011-03-22
  • 打赏
  • 举报
回复
楼主手写代码?
yanchong 2011-03-22
  • 打赏
  • 举报
回复
指针引用->
yanchong 2011-03-22
  • 打赏
  • 举报
回复
widget->setStyleSheet("background-color:blue;");
widget->setGeometry(100,100,100,100);
加载更多回复(1)

16,235

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧