Пример кода из моего проекта.Я попытался сделать его как можно короче и точнее.
Наложение используется для отрисовки всех других виджетов в приложении.Это работает для большинства виджетов, но сегодня я начал замечать, что подклассы 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();
}
Чтобы исправить это в этом примере и наложение поверх панели View, необходимо раскомментироватьпрокомментированная строка вверху.Поэтому мой вопрос заключается в следующем: почему мне нужно удалить и назначить новый виджет видового экрана в конструкторе, чтобы оверлей не перерисовывался?