您可以将绘制代码放在QWidget的paintEvent事件中,而不是resizeEvent事件中。paintEvent会在窗口重绘时调用,保证绘制位置相对稳定。以下是修改后的示例代码:
void MyWidget::paintEvent(QPaintEvent *event) {
QPainter painter(this);
QRect geometry = ui->tabWidget->geometry();
int x = geometry.x();
int y = geometry.y();
QPoint tabWidgetPos = ui->tabWidget->mapToGlobal(QPoint(0, 0));
x = tabWidgetPos.x();
y = tabWidgetPos.y();
painter.setRenderHint(QPainter::Antialiasing); // 设置抗锯齿
int width = ui->tabWidget->width();
int height = ui->tabWidget->height();
int cornerRadius = 10;
QColor color(235, 235, 235);
painter.setBrush(color); // 设置填充颜色
painter.drawRoundedRect(x - 15, y - 20, width + 20, height + 20, cornerRadius, cornerRadius);
qDebug() << "x=" << x << "y=" << y << "width=" << width << "height=" << height << endl;
}
通过将绘制代码放在paintEvent中,确保每次窗口重绘都会重新绘制矩形,并且位置相对稳定。
内容由零声教学AI助手提供,问题来源于学员提问