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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как перехватить поворот КПК на 90 градусов (на бок) и развернуть GUI ?  (Прочитано 7059 раз)
neosapient
Гость
« : Июль 14, 2009, 21:26 »

Здравствуйте.

Есть коммуникатор под управлением WinCE 6.1.
Хочется сделать так, чтобы повернув приложение на бок, весь интерфейс повернулся на 90 градусов (на бок) . Поэтому, интересует:
- как перехватить этот самый поворот на бок ?
- как заставить все стандартные элементы управления повернуться на нужные 90 градусов ?
Записан
neosapient
Гость
« Ответ #1 : Июль 17, 2009, 17:04 »

Пытаюсь разобраться со вторым вопросом
Цитировать
как заставить все стандартные элементы управления повернуться на нужные 90 градусов ?

Итак решил работать со связкой QDialog <-> QGraphicsView <-> QGraphicsScene <-> QGraphicsProxyWidget.

Для этого решил реализовать промежуточный класс PdaDialog, в котором реализован метод rotate
Код:
void QxPdaDialog::rotate(int isRotate)
{
m_isRotate = isRotate;
if(m_isRotate==FALSE){
proxyWidget->rotate(0);
QSizeF sz = proxyWidget->size();
proxyWidget->setPos(0.0, 0.0);
scene->setSceneRect(0.0, 0.0, sz.width(), sz.height());
}
else{
proxyWidget->rotate(90);
QSizeF sz = proxyWidget->size();
proxyWidget->setPos(sz.height(), 0.0);
scene->setSceneRect(0.0, 0.0, sz.height(), sz.width());
}
}

Если этот метод вызвать в конструкторе класса QxPdaDialog, то не работает растягивание окна.

Если этот метод вызвать в каком либо другом месте (например в main() ), то все вообще "расползается".


Как мне сделать правильное растягивание окон сцены и повернутого виджета диалога?
« Последнее редактирование: Июль 17, 2009, 17:07 от neosapient » Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #2 : Июль 17, 2009, 19:22 »

ну как минимум сцену нужно добавить в layout
Код:
	view = new QGraphicsView ( scene, this );
        QVBoxLayout * lay = new QVBoxLayout(this);
        lay->addWidget(view);
        this->setLayout(lay);
view->show();
также надо управлять размером виджета в сцене. Но, сдается мне, путь неправильный:(
Записан
lit-uriy
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3880


Просмотр профиля WWW
« Ответ #3 : Июль 18, 2009, 04:45 »

neosapient, посмотри у тролей в лаборатории: http://labs.trolltech.com/blogs/2009/07/15/digital-clock-in-a-phone/

"I included three animation effects: Slide, Flip, and Rotate (all in 400 lines of Qt/C++ code)."
Записан

Юра.
neosapient
Гость
« Ответ #4 : Июль 18, 2009, 14:19 »

Здравствуйте.

Реализован класс QxPdaDialog. В конструкторе создается графическая сцена, а также тестовый виджет с надписями по углам: "Up Left", "Up Right", "Down Left", "Down Right". Кроме того в классе присутствует реакция на открытие панели клавиатуры, как это сделано в примере SipDialog. Для тестирования, повесил обработчик на клавиатуру - поэтому при нажатии на клавиши изображение "ворочается"
Собрал проект под коммуникатор и под винду, выглядит так как я хочу:
Код:
int main(int argc, char *argv[])
{
QApplication app(argc,argv);

QxPdaDialog* dialog = new QxPdaDialog;
dialog->show();
dialog->rotate(TRUE);
return dialog->exec();
}
(Чтобы увеличить рисунок - нажмите на него)


----------------------
В классе QxPdaDialog реализован метод setWidget(). Этот метод предназначен, чтобы загружать другие виджеты вместо тестового. Сделал дилог (QDialog взятый из ресурсов ui) с надписями по углам: "Верхний левый", "Верхний правый", "Нижний левый", "Нижний правый". Изображение QDialog`a в сцене имеет заголовок("шапку"). Собрал проект под коммуникатор и под винду. Под винду выглядит нормально, заголовок над диалоговым окном спрятан вне видимой части экрана. А вот при сборке под коммуникатор эта "шапка" виднеется и портит всю графику. Как спрятать эту шапку для QDialog, чтобы всё выглядело эстетично ?

К слову, пробовал давать запускать с типом Qt::ToolTip - не помогает.

Вот что выходит
Код:
int main(int argc, char *argv[])
{
QApplication app(argc,argv);

QxPdaDialog* dialog = new QxPdaDialog;
QxMainDialog *mainDialog = new QxMainDialog(dialog);
dialog->setWidget(mainDialog);
dialog->show();
dialog->rotate(TRUE);
return dialog->exec();
}
(Чтобы увеличить рисунок - нажмите на него)


Как спрятать заголовок для QDialog, чтобы всё выглядело эстетично ?
« Последнее редактирование: Июль 18, 2009, 15:41 от neosapient » Записан
neosapient
Гость
« Ответ #5 : Июль 18, 2009, 15:16 »

neosapient, посмотри у тролей в лаборатории: http://labs.trolltech.com/blogs/2009/07/15/digital-clock-in-a-phone/

"I included three animation effects: Slide, Flip, and Rotate (all in 400 lines of Qt/C++ code)."
lit-uriy, спасибо, но я хочу повернуть всё диалоговое окно на 90 градусов.
Сейчас иду с следующем направлении: встраиваю диалог как виджет в графическую сцену,  так как он не должен терять своей функциональности. Но при портировании на КПК остается "шапка" - заголовок диалогового окна  Непонимающий.
« Последнее редактирование: Июль 18, 2009, 15:18 от neosapient » Записан
silvansky
Гость
« Ответ #6 : Март 16, 2010, 19:32 »

попробуй наследовать не диалог, а виджет
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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