Модераторы: Daevaorn
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [QT4] событие начала выполнения приложения, как получить/сымитировать? 
V
    Опции темы
JackYF
Дата 1.10.2007, 22:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Суть задачи: у меня есть созданное окно. Наследник QWidget'a.

Окончанию функции main() стандартное:

Код

mainWindow.show();                                                                                                                                                             
return app.exec();   


Но при запуске приложения мне нужно, чтобы окно само по себе, не дожидаясь никаких действий пользователя, медленно изменило свою прозрачность в сторону 0. Функцию я написал, но как ее вызвать автоматически в начале работы приложения? Ведь насколько я понял, эта функция должна выполняться уже после старта приложения...

Официальные доки на мысли не навели, а гуглу проблему сформулировать не смог.

Добавлено через 1 минуту и 19 секунд
Сигналов типа "началось", "создалось" у QApplication, QCoreApplication, QWidget не нашёл...


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 1.10.2007, 22:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



К примеру так:
Код

mainWindow.show();                                                                                                                                                             
mainWindow.foo();
return app.exec(); 

// ....
MainWindow::foo()
{
    while (...)
    {
        QApplication::processEvents();
        // ...
    }
}  



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 1.10.2007, 22:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



archimed7592, гм... не понял задумки.
У меня есть следующее:

Код

#include <QApplication>                                                                                                                                                            
#include <QWidget>                                                                                                                                                                 
#include <QString>                                                                                                                                                                 
                                                                                                                                                                                   
#include <iostream>                                                                                                                                                                
                                                                                                                                                                                   
const unsigned long opacityDelay = 100*1000;                                                                                                                                       
const qreal opacityStep = 0.01f;                                                                                                                                                   
                                                                                                                                                                                   
class OpaqueWidget: public QWidget                                                                                                                                                 
{                                                                                                                                                                                  
 public:                                                                                                                                                                           
    OpaqueWidget(QWidget* parent = NULL)                                                                                                                                           
    {                                                                                                                                                                              
        this->setWindowOpacity(0.0f);                                                                                                                                              
    }                                                                                                                                                                              
                                                                                                                                                                                   
    void beVisible(bool visible)                                                                                                                                                   
    {                                                                                                                                                                              
        qreal currentOpacity = 0.0f;                                                                                                                                               
        while (currentOpacity < 0.98f)                                                                                                                                             
        {                                                                                                                                                                          
            this->setWindowOpacity(visible ? currentOpacity : (1.0f - currentOpacity));                                                                                            
            currentOpacity += opacityStep;                                                                                                                                         
            usleep(opacityDelay);                                                                                                                                                  
            this->repaint();                                                                                                                                                       
        }                                                                                                                                                                          
    }                                                                                                                                                                              
};

int main(int argc, char* argv[])                                                                                                                                                   
{                                                                                                                                                                                  
    // creating the main window                                                                                                                                                    
    QApplication app(argc, argv);                                                                                                                                                  
    OpaqueWidget mainWindow;                                                                                                                                                       
                                                                                                                                                                                   
    mainWindow.show();                                                                                                                                                             
    mainWindow.beVisible(true);                                                                                                                                                    
    //mainWindow.beVisible(false);                                                                                                                                                 
                                                                                                                                                                                   
    return app.exec();                                                                                                                                                             
}                                          


Что и куда вписать?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 1.10.2007, 22:46 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Цитата(JackYF @  1.10.2007,  22:30 Найти цитируемый пост)
У меня есть следующее:

JackYF, а ты пробовал этот метод на нажатие кнопки повесить? Работает? Сомневаюсь smile.

Цитата(JackYF @  1.10.2007,  22:30 Найти цитируемый пост)
Что и куда вписать? 

Код

    void beVisible(bool visible)                                                                                                                                                   
    {                                                                                                                                                                              
        qreal currentOpacity = 0.0f;                                                                                                                                               
        while (currentOpacity < 0.98f)                                                                                                                                             
        {
            QApplication::processEvents();            
            this->setWindowOpacity(visible ? currentOpacity : (1.0f - currentOpacity));                                                                                            
            currentOpacity += opacityStep;                                                                                                                                         
            usleep(opacityDelay);                                                                                                                                                  
            this->repaint();                                                                                                                                                       
        }                                                                                                                                                                          
    }    



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 1.10.2007, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



archimed7592, уже спасибо. Судя по дебаговым меткам, оно таки начало выполняться после начала.
Но ты прав, это не работает - окно остается непрозрачным. Я еще что-то напутал?


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
archimed7592
Дата 1.10.2007, 23:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Архимед
****


Профиль
Группа: Завсегдатай
Сообщений: 2531
Регистрация: 12.6.2004
Где: Moscow

Репутация: 58
Всего: 93



Уже незачто smile.
Цитата(JackYF @  1.10.2007,  22:59 Найти цитируемый пост)
Но ты прав, это не работает - окно остается непрозрачным. Я еще что-то напутал? 

Не знаю smile. Вот это работает как часы:

Код

#include <QApplication>
#include <QWidget>
#include <QString>

#include <iostream>

const qreal opacityStep = 0.01f;

class OpaqueWidget: public QWidget
{
public:
    OpaqueWidget(QWidget* parent = NULL)
    {
        this->setWindowOpacity(0.0f);
    }

    void beVisible(bool visible)
    {
        qreal currentOpacity = 0.0f;
        while (currentOpacity < 0.98f)
        {
            QApplication::processEvents();
            this->setWindowOpacity(visible ? currentOpacity : (1.0f - currentOpacity));
            currentOpacity += opacityStep;
            this->update();
        }
    }
};
int main(int argc, char* argv[])
{
    // creating the main window
    QApplication app(argc, argv);
    OpaqueWidget mainWindow;

    mainWindow.show();
    mainWindow.beVisible(true);
    //mainWindow.beVisible(false);

    return app.exec();
}



--------------------
If you have an apple and I have an apple and we exchange apples then you and I will still each have one apple. But if you have an idea and I have an idea and we exchange these ideas, then each of us will have two ideas.
© George Bernard Shaw
PM Jabber   Вверх
JackYF
Дата 1.10.2007, 23:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


полуавантюрист
****


Профиль
Группа: Участник
Сообщений: 5814
Регистрация: 28.8.2004
Где: страна тысячи озё р

Репутация: 18
Всего: 162



Цитата(archimed7592 @  1.10.2007,  23:07 Найти цитируемый пост)
Вот это работает как часы

то есть прозрачность изменяется? у меня нет... менеджер xfce4 вроде бы поддерживает условия, которые были сказаны в доках по QT для обеспечения прозрачности, насколько я нагуглил.

Ладно, буду разбираться. На основной вопрос ответ получен, спасибо.


--------------------
Пожаловаться на меня как модератора можно здесь.
PM MAIL Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0629 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.