Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: JonNiBravo от Сентябрь 14, 2009, 09:26



Название: Как запретить перетаскивание окна
Отправлено: JonNiBravo от Сентябрь 14, 2009, 09:26
Пробую через eventFilter, но не выходит

Код
C++ (Qt)
bool Testproject::eventFilter( QObject *o, QEvent *e )
   {
if ( e->type() == QEvent::Move ) {
e->ignore();
           return true; // eat event
       } else {
           // standard event processing
           return false;
       }
   }
 


Название: Re: Как запретить перетаскивание окна
Отправлено: pastor от Сентябрь 14, 2009, 10:00
Поищи по форуму. Аналогичная тема уже поднималась


Название: Re: Как запретить перетаскивание окна
Отправлено: JonNiBravo от Сентябрь 14, 2009, 10:30
Сделал так
Код
C++ (Qt)
class Testproject : public QDialog
{
Q_OBJECT
 
public:
Testproject(QWidget *parent = 0, Qt::WFlags flags = 0);
~Testproject();
void setPos( int x, int y ) { wpos = QPoint(x, y); move( wpos ); }
 
private:
Ui::TestprojectClass ui;
//bool eventFilter( QObject *o, QEvent *e );
QPoint wpos;
 
protected:
void moveEvent ( QMoveEvent* e ) { move(wpos); }
 
};
 

Проблема в том, что окно все еще можно таскать, и только при отпускании левой кнопки мыши оно отщелкивается на прежнее место.
Мне же нужно, чтобы оно вообще не двигалось.


Название: Re: Как запретить перетаскивание окна
Отправлено: SABROG от Сентябрь 14, 2009, 10:54
Проблема в том, что окно все еще можно таскать, и только при отпускании левой кнопки мыши оно отщелкивается на прежнее место.
Мне же нужно, чтобы оно вообще не двигалось.

Убери у окна titlebar или замени своим. Если ты помнишь, то даже зависшее приложение (которое в принципе не может никаких твоих эвентов на клики и мышку обработать) можно таскать за заголовок и жмакать на кнопочки закрытия окна. Я даже сомневаюсь, что существуют платформозависимые API ОС, которые бы могли выставить флаг типа notmovable.
---
Только на WindowsCE можно, через флаг: WS_EX_NODRAG


Название: Re: Как запретить перетаскивание окна
Отправлено: shadone от Сентябрь 15, 2009, 13:03
запретить окно двигать нельзя. по крайней мере не платформонезависимыми средствами.

В X11 например можно помочь установка Qt::X11BypassWindowManagerHint и установка MWMHint (Motif hints) вручную чтобы убрать MWM_FUNC_MOVE, но все равно не все window manager будут следовать этому флагу.


Название: Re: Как запретить перетаскивание окна
Отправлено: kuzmich от Январь 12, 2012, 11:20
Вариант для Embedded - поправить исходник библиотеки. gui/embedded/qwsmanager_qws.cpp
Код:
void QWSManager::handleMove(QPoint g)
{
    Q_D(QWSManager);

//new
    if (d->activeRegion == QDecoration::Title)
        return;
//new
...


Название: Re: Как запретить перетаскивание окна
Отправлено: Пытон от Январь 13, 2012, 18:32
Интересно, а зачем это надо?


Название: Re: Как запретить перетаскивание окна
Отправлено: Bepec от Январь 14, 2012, 12:43
Вирус, защита доступа, блокировка пользователя ^^
Да мало ли зачем :)