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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: Развернуть окно  (Прочитано 17696 раз)
Victor007
Гость
« : Июнь 05, 2013, 17:03 »

Здравствуйте!
Возник вопрос: как развернуть окно на весь экран? То есть так, чтобы при запуске приложения Widget (или MainWindow) сразу автоматически занимало весь экран, закрывая собой и панель к кнопкой пуск, часами и т.д. и не было видно "шапки" самого виджета? Сама программа очень простая, рисует прямоугольник на белом фоне этого окна.
Спасибо!
Записан
Bepec
Гость
« Ответ #1 : Июнь 05, 2013, 17:21 »

вирусописатель? Улыбающийся
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #2 : Июнь 05, 2013, 18:34 »

Здравствуйте!
Возник вопрос: как развернуть окно на весь экран? То есть так, чтобы при запуске приложения Widget (или MainWindow) сразу автоматически занимало весь экран, закрывая собой и панель к кнопкой пуск, часами и т.д. и не было видно "шапки" самого виджета? Сама программа очень простая, рисует прямоугольник на белом фоне этого окна.
Спасибо!
Код
C++ (Qt)
void QWidget::showFullScreen () [slot]
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #3 : Июнь 05, 2013, 18:34 »

вирусописатель? Улыбающийся
Вирус на Qt? Оригинально Улыбающийся
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Bepec
Гость
« Ответ #4 : Июнь 05, 2013, 19:44 »

Вполне нормальный вирус написать можно Веселый
Записан
lighting
Гость
« Ответ #5 : Июнь 06, 2013, 12:09 »

и какое отношение вопрос имеет к Qt Quick?
Записан
Victor007
Гость
« Ответ #6 : Июнь 06, 2013, 16:56 »

Всем большое спасибо!
To lighting: прошу прощения, вообще стараюсь следить , но тут, видимо, просмотрел. Можно наверное перенести тему?

Мой код main.cpp такой:

#include "mainfr.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainFr w;
    w.show();
   
    return a.exec();
}

Попробовал вставить предложенные варианты, но все время получаю ошибки. Что не так делаю?
Записан
Victor007
Гость
« Ответ #7 : Июнь 06, 2013, 17:08 »

Ага! Вот так получилось:

w.showFullScreen();

Да, не сразу сообразишь, как из такого окна выйти. Пока пользуюсь Alt+F4
Забыл еще написать, чтобы всех разуверить: программа нужна для управления экспериментальной установкой, так что вирусы здесь не причем)

PS: Сразу спрошу, раз уж я все равно влез не в ту тему. Мне необходимо этот прямоугольник на белом фоне перерисовывать раз в секунду. Видимо, мне нужна функция задержки и стирания всего, что было нарисовано. Может, подскажете, как это реализовать?
Еще раз большое всем спасибо!
« Последнее редактирование: Июнь 06, 2013, 17:12 от Victor007 » Записан
Bepec
Гость
« Ответ #8 : Июнь 06, 2013, 18:15 »

Мб проще не мучиться и сразу назвать цель, а не конкретную проблему?

PS на мой взгляд вы пишите ПО на комп, которое будет аналогом ОС. Ну т.е. на весь экран, графики, набор действий и больше ничего.

PPS а под какую платформу?

Записан
Victor007
Гость
« Ответ #9 : Июнь 07, 2013, 16:53 »

У меня достаточно большая программа, состоит из нескольких "блоков", то есть, сначала выводится одно окно, потом другое, потом идет обработка данных и т.д. Все это описывать нет смысла. Программа была написана под builder, но недавно главную часть, с которой были проблемы переписали (не я) под qt. Получилось очень красиво и работает безукоризненно. На выходе, мне теперь проще освоить qt и переписать недостающие блоки исходной программы. Опыта пока мало, но он очень полезен. Вроде все объяснил.
Поэтому я и спрашиваю только некоторые технические аспекты. Еще раз спасибо за такую оперативную помощь.
Так как мне сделать перерисовку экрана? По идее, это должно быть достаточно тривиально. Мне дали вот такой совет:
 "Если нужна перерисовка, используйте таймер. По таймеру перемещайте объект (функция translate)", но, честно говоря, я его не очень понял.
Работаю в win8, соответственно, 64-бита.
« Последнее редактирование: Июнь 07, 2013, 17:08 от Victor007 » Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #10 : Июнь 10, 2013, 11:51 »

Поэтому я и спрашиваю только некоторые технические аспекты. Еще раз спасибо за такую оперативную помощь.
Так как мне сделать перерисовку экрана? По идее, это должно быть достаточно тривиально. Мне дали вот такой совет:
 "Если нужна перерисовка, используйте таймер. По таймеру перемещайте объект (функция translate)", но, честно говоря, я его не очень понял.
Работаю в win8, соответственно, 64-бита.
Всё зависит от того, как ты рисуешь на экране. А так пока тока один совет вырисовывается - вызывать слот update() у виджета через соединенный сигнал таймера timeout(), настроенный на секунду.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Victor007
Гость
« Ответ #11 : Июнь 10, 2013, 16:58 »

Спасибо, идея понятна! Я пока еще очень с трудом ориентируюсь в сигналах и слотах. Нельзя ли написать какой-то минимальный код?
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #12 : Июнь 11, 2013, 10:33 »

Спасибо, идея понятна! Я пока еще очень с трудом ориентируюсь в сигналах и слотах. Нельзя ли написать какой-то минимальный код?
Код
C++ (Qt)
   QTimer *timer = new QTimer(this);
   //...
 
   connect(timer, SIGNAL(timeout()), this, SLOT(update()));
   timer->start(1000);
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
Victor007
Гость
« Ответ #13 : Июнь 11, 2013, 16:35 »

Спасибо! Правда, так сразу все равно ничего не работает. Во-первых, программе  в этой строке
Код:
QTimer *timer = new QTimer(this);
не нравится this, я его убрал.
Во-вторых, я решил сначала немного упростить задачу: просто сделать задержку при рисовании каждого следующего прямоугольника. Попробовал вот такой вариант:
Код:
void MainFr::paintEvent(QPaintEvent *)
{
    QPainter painter(this);
    painter.setRenderHint(QPainter::Antialiasing);
    painter.setPen(Qt::darkGreen);
    painter.setBrush(QBrush(Qt::darkGreen, Qt::SolidPattern)); // Чем красим
    painter.drawRect(2, 2, Rect_size-2, Rect_size);
    timer->start(1000);
    painter.drawRect(455-Rect_size-2, 2, Rect_size, Rect_size);
    painter.drawRect(910-Rect_size-2, 2, Rect_size, Rect_size);
    painter.drawRect(1366-Rect_size-2, 2, Rect_size, Rect_size);
}

Однако прямоугольники рисуются без какой-либо задержки. В чем здесь может быть дело?
Записан
mutineer
Гость
« Ответ #14 : Июнь 11, 2013, 17:28 »

А где должна быть задержка? timer->start() не задерживает выполнение в точке своего вызова
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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