Q格拉菲cs查看可能的错误
QGraphicsView possible bug?
示例代码来自我的项目。 我试图让它尽可能简短和切中要害。
叠加层用于绘制应用程序中的所有其他微件。 这适用于大多数小部件,但今天我开始注意到 QAbstractScrollArea 子类让我很难过。 问题是叠加层不显示在顶部,并且发生的任何绘图都会被阻止。
#include <QtGui/QApplication>
#include <QtGui/QVBoxLayout>
#include <QtGui/QGraphicsView>
#include <QtGui/QPushButton>
class View : public QGraphicsView{
public:
View(){
//delete viewport(); setViewport(new QWidget);
}
};
class Widget : public QWidget{
QWidget* overlay_;
public:
Widget(){
resize(512, 512);
QVBoxLayout* layout = new QVBoxLayout;
QPushButton* button = new QPushButton(" Click Me! ");
layout->addWidget(button);
layout->addWidget(new View);
overlay_ = new QWidget(this);
overlay_->installEventFilter(this);
connect(button, SIGNAL(clicked()),
overlay_, SLOT(show()));
overlay_->hide();
setLayout(layout);
}
bool eventFilter(QObject* target, QEvent* event){
if(target == overlay_){
if(event->type() == QEvent::Paint && overlay_->isVisible()){
overlay_->resize(size());
QPainter painter(overlay_);
painter.setPen(QPen(QColor(1, 102, 192, 255), 1, Qt::SolidLine,
Qt::FlatCap, Qt::MiterJoin));
painter.drawRect(rect().adjusted(60, 0, -60, 0));
return true;
}
}
}
};
int main(int argc, char *argv[]){
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
若要在此示例中解决此问题并使覆盖位于视图顶部,您需要取消注释顶部的注释行。 所以我的问题是:为什么我需要在构造函数中删除并分配一个新的视口小部件才能不被覆盖?
这不是QGraphicsView的错误,如果你也使用标准的QScrollArea,就会发生错误。
我认为,问题在于Qt绘制子小部件的顺序。同级小部件是按照它们添加到父级的顺序绘制的(尽管您不能依赖这一点)。
重置视口"解决"问题的原因是,当您这样做时,您将创建一个没有背景的新 QWidget 作为视口。QGraphicsView仍在overlay_上绘制,它只有一个透明的视口。但是,请注意它仍然在按钮后面绘制。
如果你只想在 QGraphicsView 上绘制一个叠加层,你可以覆盖 QGraphicsView::p aintEvent() 并在那里进行。如果你想在整个小部件上绘制覆盖层,我会将你的布局嵌入到第二个QWidget中,然后尝试使用QWidget::raise()在视觉上强制覆盖到顶部。
相关文章:
- 警告处理为错误这里有什么问题
- "error: no matching function for call to"构造函数错误
- boost::进程间消息队列引发错误
- C++,OpenCV,尝试显示图像时"OpenCV(4.3.0) Error: Assertion failed (size.width>0 && size.height>0)"此错误
- 有关插入适配器的错误。[错误]请求从 'back_insert_iterator<vector<>>' 类型转换为非标量类型
- QT在错误的班级中寻找空位
- vector.resize()中的分配错误
- 代码在main()中运行,但在函数中出现错误
- 释放错误后堆使用
- (C++)分析树以计算返回错误值的简单算术表达式
- Project Euler问题4的错误解决方案
- 我的字符计数代码计算错误.为什么
- 从"int*"强制转换为"unsigned int"会丢失精度错误
- 尝试导入pybind-opencv模块时出现libgtk错误
- CMake项目Boost库错误:Boost/config/compiler/gcc.hpp:165:10:致命错误:cs
- 在某些循环内使用vector.push_back时出现分段错误
- MSVC多行宏编译器错误
- 静态数据成员的问题-修复链接错误会导致编译器错误
- 为什么在运行时没有向我们提供有关分段错误的更多信息?
- Q格拉菲cs查看可能的错误