
应该是QScrollArea里面的QWidget的样式错了。
QScrollArea是无法单独的来通过样式表来改变并填充背景色的,只能设置加入到QScrollArea里面的QWidget的样式。
这样才能改变背景色。还有就是可以通过函数来设置QScollArea的背景色。再或者就是QScrollArea里面在添加控件。
首先添加QScrollArea,在这个里面加QWidget,然后添加你的小部件并布局,在设置部件关联。类似这个代码吧:
QScrollArea pArea= new QScrollArea(this);
QWidget qw = new QWidget(pArea);//需要滚动的是一个Qwidget,而如果是在设计器里面拖入控件,会自动添加一个
QPushButton pb = new QPushButton(qw);
pb->setText("1235647");
pb->move(130,50);
pArea->setWidget(qw);//这里设置滚动窗口
代码示例如下:
#include "widgeth"
Widget::Widget(QWidget parent)
: QWidget(parent)
{
list=new QListWidget();
lay=new QHBoxLayout();
QSizeGrip gr=new QSizeGrip(list);//用来重设widget的size
scroll=new QScrollArea();
scroll->setWidget(list);
scroll->setAlignment(Qt::AlignLeft);
// scroll->setWidgetResizable(true);
scroll->setBackgroundRole(QPalette::Dark);// 设置滚动区域的背景
//win=new QWidget();
item1=new QListWidgetItem("BlueHills",list);//向widget列表中加入一项
item2=new QListWidgetItem("Sunset",list);
item3=new QListWidgetItem("Water lilies",list);
item4=new QListWidgetItem("Himaliya is a good place",list);
item5=new QListWidgetItem("Ooty",list);
item6=new QListWidgetItem("Hero Honda",list);
item7=new QListWidgetItem(">
QScrollArea pArea= new QScrollArea(this);
QWidget qw = new QWidget(pArea);//需要滚动的是一个Qwidget,而如果是在设计器里面拖入控件,会自动添加一个
QPushButton pb = new QPushButton(qw);//测试用,实际你使用就是把按钮设置父窗口,放进qw
pb->setText("1235647");
pb->move(130,50);
pArea->setWidget(qw);//这里设置滚动窗口qw,
pArea->setGeometry(0,0,200,200);//要显示的区域大小
qw->setGeometry(0,0,300,300);//这里变大后,看出他实际滚动的是里面的QWidget窗口
在QuickTime没有卸载的时候会把系统里显示的部分参数给改掉,所以装完以后卸载了QuickTime就会变得不能显示了,而png格式的在IE核心浏览器的网页上会变得不能显示(不是IE核心的浏览器,比如火狐就可以看到)。我当时就把QuickTime重装了一遍,然后把里面的设置改掉,在里面的支持的里把png后缀后面的那个勾去掉,然后再卸载掉(可能不用卸载也说不定),png就会显示了。不过每个人情况都有可能不一样,方法也许是因人而异的。
由于QPlainTextEdit继承自QAbstractScrollArea,与普通的直接继承自QWidget的控件存在差异,QAbstractScrollArea中包含一个视窗,该视窗可以通过viewport函数来获取,刚好所有的绘制 *** 作都是在该视窗内部的,所以你应该在视窗内部进行绘制,而不是外围的widget中进行绘制(有点绕,还是看下面的代码)
假设你在头文件有如下定义:
//editorh
class Editor : public QPlainTextEdit
{
Q_OBJECT
public:
Editor(QWidget parent = 0):QPlainTextEdit(parent){}
virtual ~Editor(){}
//
protected:
void paintEvent(QPaintEvent e);
//
};
源文件内容如下
void Editor::paintEvent(QPaintEvent e)
{
//通过viewport函数获取视窗并进行绘制
//我只是简单的填充了一种颜色。
QPainter painter(viewport());
painterfillRect(rect(),Qt::cyan);
//调用QPlainTextEdit默认的绘制函数,不调用的话
//后果会很严重的。
QPlainTextEdit::paintEvent(e);
}
虽然不明白你为嘛要重载paintEvent不过我想说,如果只是为了更改背景为目的,那还是用style sheet,方便!只要不要求速度,那么就用style sheet
scrollArea = new QScrollArea;
//申请一个滚动区域,它本身是继承于QFramescrollArea->setBackgroundRole(QPalette::Dark);
你上边没有申请滚动区域
以上就是关于QScrollArea设置的窗口无法自动填充背景全部的内容,包括:QScrollArea设置的窗口无法自动填充背景、Qt的FormLayout有多列时,怎么让他自动加上滚动条、如何使QScrollArea的背景透明,并且不影响子控件等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)