Anonymous
Qresizeevent verursacht Sigsegv
Post
by Anonymous » 09 Mar 2025, 12:29
Mein Ziel ist es, eine Klasse namens Overlay.h zu verwenden, um ein rechteckiges Feld und einen Text über einem Widget (Marblewidget) hinzuzufügen. Hier unten finden Sie mein Code für die GUI. Ich habe versucht, alle unnötigen Teile zu entfernen: < /p>
mainwindow.cpp
Code: Select all
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
setupUi(this);
}
MainWindow::~MainWindow()
{
}
void MainWindow::resizeEvent(QResizeEvent *event)
{
overlay->resize(event->size()); //////////////// CAUSES SIGSEGV!!!!!!!!!!!!!
event->accept();
}
void MainWindow::setupUi(QMainWindow *MainWindow)
{
MainWindow->showMaximized();
QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
sizePolicy.setHorizontalStretch(0);
sizePolicy.setVerticalStretch(0);
sizePolicy.setHeightForWidth(MainWindow->sizePolicy().hasHeightForWidth());
MainWindow->setSizePolicy(sizePolicy);
MainWindow->setTabShape(QTabWidget::Rounded);
QWidget *centralwidget = new QWidget(MainWindow);
centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
sizePolicy.setHeightForWidth(centralwidget->sizePolicy().hasHeightForWidth());
centralwidget->setSizePolicy(sizePolicy);
centralwidget->setLayoutDirection(Qt::LeftToRight);
QGridLayout *gridLayout_4 = new QGridLayout(centralwidget);
gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4"));
QSplitter *splitter_4 = new QSplitter(centralwidget);
splitter_4->setObjectName(QString::fromUtf8("splitter_4"));
splitter_4->setOrientation(Qt::Horizontal);
QTabWidget *tabWidget_2 = new QTabWidget(splitter_4);
tabWidget_2->setObjectName(QString::fromUtf8("tabWidget_2"));
sizePolicy.setHeightForWidth(tabWidget_2->sizePolicy().hasHeightForWidth());
tabWidget_2->setSizePolicy(sizePolicy);
tabWidget_2->setMaximumSize(QSize(443, 16777));
tabWidget_2->setAutoFillBackground(true);
tabWidget_2->setTabPosition(QTabWidget::West);
tabWidget_2->setTabShape(QTabWidget::Rounded);
tabWidget_2->setIconSize(QSize(30, 16));
QWidget *tab_10 = new QWidget();
tab_10->setObjectName(QString::fromUtf8("tab_10"));
QGridLayout *gridLayout = new QGridLayout(tab_10);
gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
QVBoxLayout *verticalLayout_4 = new QVBoxLayout();
verticalLayout_4->setObjectName(QString::fromUtf8("verticalLayout_4"));
QHBoxLayout *horizontalLayout_7 = new QHBoxLayout();
horizontalLayout_7->setObjectName(QString::fromUtf8("horizontalLayout_7"));
QLabel *label_3 = new QLabel(tab_10);
label_3->setObjectName(QString::fromUtf8("label_3"));
horizontalLayout_7->addWidget(label_3);
verticalLayout_4->addLayout(horizontalLayout_7);
QTreeView *treeView_4 = new QTreeView(tab_10);
treeView_4->setObjectName(QString::fromUtf8("treeView_4"));
QStandardItemModel *standardModel = new QStandardItemModel ;
QStandardItem *rootNode = standardModel->invisibleRootItem();
treeView_4->setModel(standardModel);
verticalLayout_4->addWidget(treeView_4);
gridLayout->addLayout(verticalLayout_4, 0, 0, 1, 1);
tabWidget_2->addTab(tab_10, QString());
treeView_4->raise();
Marble::MarbleWidget* MarbleWidget = new Marble::MarbleWidget(splitter_4);
splitter_4->addWidget(MarbleWidget);
splitter_4->setStretchFactor(0,0);
splitter_4->setStretchFactor(1,6);
gridLayout_4->addWidget(splitter_4, 0, 0, 1, 1);
MainWindow->setCentralWidget(centralwidget);
MarbleWidget->raise();
tabWidget_2->raise();
overlay = new Overlay(MarbleWidget);
overlay->raise();
QMetaObject::connectSlotsByName(MainWindow);
} // setupUi
< /code>
[b]overlay.h[/b]
#include
#include
class Overlay : public QWidget
{
public:
Overlay(QWidget *parent);
protected:
void paintEvent(QPaintEvent *event);
};
< /code>
[b]overlay.cpp[/b]
#include "overlay.h"
Overlay::Overlay(QWidget *parent)
: QWidget(parent)
{
setPalette(Qt::transparent);
setAttribute(Qt::WA_TransparentForMouseEvents);
}
void Overlay::paintEvent(QPaintEvent *event)
{
QFont font;
font.setStyleHint(QFont::Helvetica, QFont::PreferAntialias);
font.setPointSize(10);
QPainter painter(this);
painter.setRenderHint(QPainter::Antialiasing);
painter.setPen(QColor(10, 10, 10, 255));
painter.fillRect(QRect(50, 50, 100, 100), QColor(100, 100, 100, 120));
painter.setFont(font);
painter.drawText(20, 20, "hi..............................");
}
Das
Problem ist, dass Overlay-> Größe (Ereignis-> size ()); verursacht Sigsegv Wenn der Kern diese Zeile ausführt. < /p>
Was ist mit dem Code los, wie kann ich ihn beheben? < /p>
1741519745
Anonymous
Mein Ziel ist es, eine Klasse namens Overlay.h zu verwenden, um ein rechteckiges Feld und einen Text über einem Widget (Marblewidget) hinzuzufügen. Hier unten finden Sie mein Code für die GUI. Ich habe versucht, alle unnötigen Teile zu entfernen: < /p> [b] mainwindow.cpp[/b] [code]MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) { setupUi(this); } MainWindow::~MainWindow() { } void MainWindow::resizeEvent(QResizeEvent *event) { overlay->resize(event->size()); //////////////// CAUSES SIGSEGV!!!!!!!!!!!!! event->accept(); } void MainWindow::setupUi(QMainWindow *MainWindow) { MainWindow->showMaximized(); QSizePolicy sizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding); sizePolicy.setHorizontalStretch(0); sizePolicy.setVerticalStretch(0); sizePolicy.setHeightForWidth(MainWindow->sizePolicy().hasHeightForWidth()); MainWindow->setSizePolicy(sizePolicy); MainWindow->setTabShape(QTabWidget::Rounded); QWidget *centralwidget = new QWidget(MainWindow); centralwidget->setObjectName(QString::fromUtf8("centralwidget")); sizePolicy.setHeightForWidth(centralwidget->sizePolicy().hasHeightForWidth()); centralwidget->setSizePolicy(sizePolicy); centralwidget->setLayoutDirection(Qt::LeftToRight); QGridLayout *gridLayout_4 = new QGridLayout(centralwidget); gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4")); QSplitter *splitter_4 = new QSplitter(centralwidget); splitter_4->setObjectName(QString::fromUtf8("splitter_4")); splitter_4->setOrientation(Qt::Horizontal); QTabWidget *tabWidget_2 = new QTabWidget(splitter_4); tabWidget_2->setObjectName(QString::fromUtf8("tabWidget_2")); sizePolicy.setHeightForWidth(tabWidget_2->sizePolicy().hasHeightForWidth()); tabWidget_2->setSizePolicy(sizePolicy); tabWidget_2->setMaximumSize(QSize(443, 16777)); tabWidget_2->setAutoFillBackground(true); tabWidget_2->setTabPosition(QTabWidget::West); tabWidget_2->setTabShape(QTabWidget::Rounded); tabWidget_2->setIconSize(QSize(30, 16)); QWidget *tab_10 = new QWidget(); tab_10->setObjectName(QString::fromUtf8("tab_10")); QGridLayout *gridLayout = new QGridLayout(tab_10); gridLayout->setObjectName(QString::fromUtf8("gridLayout")); QVBoxLayout *verticalLayout_4 = new QVBoxLayout(); verticalLayout_4->setObjectName(QString::fromUtf8("verticalLayout_4")); QHBoxLayout *horizontalLayout_7 = new QHBoxLayout(); horizontalLayout_7->setObjectName(QString::fromUtf8("horizontalLayout_7")); QLabel *label_3 = new QLabel(tab_10); label_3->setObjectName(QString::fromUtf8("label_3")); horizontalLayout_7->addWidget(label_3); verticalLayout_4->addLayout(horizontalLayout_7); QTreeView *treeView_4 = new QTreeView(tab_10); treeView_4->setObjectName(QString::fromUtf8("treeView_4")); QStandardItemModel *standardModel = new QStandardItemModel ; QStandardItem *rootNode = standardModel->invisibleRootItem(); treeView_4->setModel(standardModel); verticalLayout_4->addWidget(treeView_4); gridLayout->addLayout(verticalLayout_4, 0, 0, 1, 1); tabWidget_2->addTab(tab_10, QString()); treeView_4->raise(); Marble::MarbleWidget* MarbleWidget = new Marble::MarbleWidget(splitter_4); splitter_4->addWidget(MarbleWidget); splitter_4->setStretchFactor(0,0); splitter_4->setStretchFactor(1,6); gridLayout_4->addWidget(splitter_4, 0, 0, 1, 1); MainWindow->setCentralWidget(centralwidget); MarbleWidget->raise(); tabWidget_2->raise(); overlay = new Overlay(MarbleWidget); overlay->raise(); QMetaObject::connectSlotsByName(MainWindow); } // setupUi < /code> [b]overlay.h[/b] #include #include class Overlay : public QWidget { public: Overlay(QWidget *parent); protected: void paintEvent(QPaintEvent *event); }; < /code> [b]overlay.cpp[/b] #include "overlay.h" Overlay::Overlay(QWidget *parent) : QWidget(parent) { setPalette(Qt::transparent); setAttribute(Qt::WA_TransparentForMouseEvents); } void Overlay::paintEvent(QPaintEvent *event) { QFont font; font.setStyleHint(QFont::Helvetica, QFont::PreferAntialias); font.setPointSize(10); QPainter painter(this); painter.setRenderHint(QPainter::Antialiasing); painter.setPen(QColor(10, 10, 10, 255)); painter.fillRect(QRect(50, 50, 100, 100), QColor(100, 100, 100, 120)); painter.setFont(font); painter.drawText(20, 20, "hi.............................."); } [/code] Das [url=viewtopic.php?t=15738]Problem[/url] ist, dass Overlay-> Größe (Ereignis-> size ()); verursacht Sigsegv Wenn der Kern diese Zeile ausführt. < /p> Was ist mit dem Code los, wie kann ich ihn beheben? < /p>