Russian Qt Forum
Сентябрь 21, 2024, 22:29 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как запретить перетаскивание окна  (Прочитано 9190 раз)
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;
       }
   }
 
Записан
pastor
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 2901



Просмотр профиля WWW
« Ответ #1 : Сентябрь 14, 2009, 10:00 »

Поищи по форуму. Аналогичная тема уже поднималась
Записан

Integrated Computer Solutions, Inc. (ICS)
http://www.ics.com/
JonNiBravo
Гость
« Ответ #2 : Сентябрь 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); }
 
};
 

Проблема в том, что окно все еще можно таскать, и только при отпускании левой кнопки мыши оно отщелкивается на прежнее место.
Мне же нужно, чтобы оно вообще не двигалось.
Записан
SABROG
Гость
« Ответ #3 : Сентябрь 14, 2009, 10:54 »

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

Убери у окна titlebar или замени своим. Если ты помнишь, то даже зависшее приложение (которое в принципе не может никаких твоих эвентов на клики и мышку обработать) можно таскать за заголовок и жмакать на кнопочки закрытия окна. Я даже сомневаюсь, что существуют платформозависимые API ОС, которые бы могли выставить флаг типа notmovable.
---
Только на WindowsCE можно, через флаг: WS_EX_NODRAG
« Последнее редактирование: Сентябрь 14, 2009, 11:12 от SABROG » Записан
shadone
Гость
« Ответ #4 : Сентябрь 15, 2009, 13:03 »

запретить окно двигать нельзя. по крайней мере не платформонезависимыми средствами.

В X11 например можно помочь установка Qt::X11BypassWindowManagerHint и установка MWMHint (Motif hints) вручную чтобы убрать MWM_FUNC_MOVE, но все равно не все window manager будут следовать этому флагу.
Записан
kuzmich
Гость
« Ответ #5 : Январь 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
...
Записан
Пытон
Гость
« Ответ #6 : Январь 13, 2012, 18:32 »

Интересно, а зачем это надо?
Записан
Bepec
Гость
« Ответ #7 : Январь 14, 2012, 12:43 »

Вирус, защита доступа, блокировка пользователя ^^
Да мало ли зачем Улыбающийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.081 секунд. Запросов: 22.