QWidget 禁用覆盖小部件的边距
QtWidget Disable Margin for overlay widget
我的情况:我有一个网格布局,里面有 n*n 个小部件。此外,我在网格中放置了一个覆盖小部件,位置为 0,0,跨度为 n,n。
一切都很好,但是有一个奇怪的边缘,我不知道是什么原因造成的...
有谁知道我该如何防止这种情况发生?我想我遗漏了一些微不足道的东西...
SudokuFieldWidget::SudokuFieldWidget(QWidget *parent) : QFrame(parent)
{
...
m_layout = new QGridLayout( this );
m_layout->setSpacing( 0 );
m_layout->setMargin( 1 );
this->initCells( true );
this->setLayout( m_layout );
m_markerOverlay = new SudokuMarkerOverlayWidget( this );
m_layout->addWidget( m_markerOverlay, 0, 0, m_fieldSize, m_fieldSize );
}
SudokuMarkerOverlayWidget::SudokuMarkerOverlayWidget(QWidget* parent) : QWidget(parent)
{
setAttribute(Qt::WA_NoSystemBackground);
setAttribute(Qt::WA_TransparentForMouseEvents);
...
}
void SudokuMarkerOverlayWidget::paintEvent(QPaintEvent*)
{
QPainter painter(this);
painter.fillRect( rect(), QColor( 255, 0, 0, 128 ) );
}
我的 SudokuFieldWidget 绘画例程中有一个错误导致了这种不当行为...m_markerOverlay->setGeometry( this->geometry() );
我的情况:我有一个网格布局,里面有 n*n 个小部件。此外,我在网格中放置了一个覆盖小部件,位置为 0,0,跨度为 n,n。
一切都很好,但是有一个奇怪的边缘,我不知道是什么原因造成的...
有谁知道我该如何防止这种情况发生?我想我遗漏了一些微不足道的东西...
SudokuFieldWidget::SudokuFieldWidget(QWidget *parent) : QFrame(parent)
{
...
m_layout = new QGridLayout( this );
m_layout->setSpacing( 0 );
m_layout->setMargin( 1 );
this->initCells( true );
this->setLayout( m_layout );
m_markerOverlay = new SudokuMarkerOverlayWidget( this );
m_layout->addWidget( m_markerOverlay, 0, 0, m_fieldSize, m_fieldSize );
}
SudokuMarkerOverlayWidget::SudokuMarkerOverlayWidget(QWidget* parent) : QWidget(parent)
{
setAttribute(Qt::WA_NoSystemBackground);
setAttribute(Qt::WA_TransparentForMouseEvents);
...
}
void SudokuMarkerOverlayWidget::paintEvent(QPaintEvent*)
{
QPainter painter(this);
painter.fillRect( rect(), QColor( 255, 0, 0, 128 ) );
}
我的 SudokuFieldWidget 绘画例程中有一个错误导致了这种不当行为...m_markerOverlay->setGeometry( this->geometry() );