PDA

View Full Version : سوال: مشکلی عجیب هنگام جابجایی پنجره با ماوس



sd.CSharpProgrammer
دوشنبه 15 اسفند 1390, 10:00 صبح
سلام دوستان

یه برنامه دارم که قاب دورش رو با فلگ FramelessWindowHint حذف کردم و یک نوار عنوان سفارشی روش گذاشتم. برای حرکت پنجره با دراگ ماوس از کدهای مثال shapedClock کیوت استفاده کردم.
ولی میخوام پنجره فقط وقتی حرکت کنه که در محدوده نوارعنوان دراگ میکنه در حالی که تو اون مثال هرجای پنجره دراگ بشه عملیات حرکت پنجره شروع میشه!! حالا این مشکل رو با انجام یکسری تغییرات اِعمال کردم :



void Widget::mousePressEvent(QMouseEvent *event)
{
if (event->pos().y() < 30) {
if (event->buttons() & Qt::LeftButton) {
dragPosition = event->globalPos() - frameGeometry().topLeft();
event->accept();
}
}
}



حالا مشکل اصلی چیه؟! اینکه وقتی ماوس تو خارج از نوارعنوان دراگ میکنه حرکت باز انجام میشه و ماوس میره اون بالا تو ناحیه نوارعنوان!!!
برنامه مثال رو اینجا میگذارم خودتون اجرا کنین مشکل رو ببینید.

ممنون میشم کمک کنید.

83700837018370183701

حامد مصافی
دوشنبه 15 اسفند 1390, 13:24 عصر
else event.reject();

sd.CSharpProgrammer
دوشنبه 15 اسفند 1390, 16:47 عصر
تابعی با نام reject در کلاس QMouseEvent وجود نداره!!!


In member function 'virtual void MainWidget::mousePressEvent(QMouseEvent*)':
'class QMouseEvent' has no member named 'reject'

alamate_aoal
دوشنبه 15 اسفند 1390, 20:06 عصر
سلام

void Widget::mousePressEvent(QMouseEvent *event)
{
if ( ui->titlebarWidget->underMouse() ) {
if (event->buttons() & Qt::LeftButton) {
dragPosition = event->globalPos() - frameGeometry().topLeft();
event->accept();
}
}else {
dragPosition = QPoint();
}
}

void Widget::mouseMoveEvent(QMouseEvent *event)
{
if (event->buttons() & Qt::LeftButton && dragPosition!=QPoint() ) {
move(event->globalPos() - dragPosition);
event->accept();
}
}

حامد مصافی
دوشنبه 15 اسفند 1390, 23:24 عصر
آهان، اشتباه کردم. ignore درسته.

مثال ضمیمه رو برات آماده کردم.

sd.CSharpProgrammer
سه شنبه 16 اسفند 1390, 17:15 عصر
ممنونم دوستان
کمک بزرگی کردین