【发布时间】:2014-11-06 06:54:22
【问题描述】:
我有一个QMainWindow,其中包含一个循环QWidget。为了有一个圆形的QWidget,我正在使用QWidget::setMask。应用程序在鼠标按下时的预期行为是在 MainWindow 内,这取决于按下鼠标的区域。
class MyMainWindow: public QMainWindow
{
public:
MyMainWindow():QMainWindow()
{
}
void mousePressEvent( QMouseEvent * event )
{
qDebug()<<"Clicked on MainWindow";
}
};
class CircularWidget: public QWidget
{
public:
CircularWidget( QWidget * parent ):QWidget( parent )
{
}
void paintEvent(QPaintEvent * event)
{
QRegion circularMask( QRect( pos(), size() ), QRegion::Ellipse );
setMask( circularMask );
setStyleSheet("background-color:black;");
QWidget::paintEvent( event );
}
void mousePressEvent( QMouseEvent * event )
{
qDebug()<<"Clicked on Circular Widget";
}
};
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QMainWindow w;
w.resize( 400, 400 );
CircularWidget circularWidget( &w );
circularWidget.show();
w.setCentralWidget( &circularWidget );
w.show();
return a.exec();
}
目前,当我在圆形区域内单击时,我会在我的小部件中收到该事件。但是圈外的所有鼠标按下事件都丢失了。我在 Qt 文档中看到:Masked widgets receive mouse events only on their visible portions。有没有办法将其他鼠标点击事件(图中灰色区域的事件)传递给父widget?
【问题讨论】:
-
那么 CircularWidget 覆盖了整个主窗口?你如何把这个小部件放在主窗口中?
-
我将不得不调整它的大小,但目前它覆盖了整个主窗口。我只想让主窗口占用圆圈外的所有鼠标事件