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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: QSplashScreen  (Прочитано 5731 раз)
hemul
Гость
« : Декабрь 13, 2012, 20:27 »

Код:
class EoF_gameSplashScreen:public QSplashScreen
{
private:
    QPixmap *pixmap;
    QColor  backgroung_color,text_color;


public:
    EoF_gameSplashScreen(QPixmap *pix):QSplashScreen(*pix),pixmap(pix){}

    void show_bottom_text(const QString &text)
    {
        showMessage(text,Qt::AlignCenter | Qt::AlignBottom,text_color);
    }

    void set_colors(QColor bg,QColor text)
    {
        backgroung_color = bg;
        text_color = text;
    }

};

Код:
EoF_gameSplashScreen splash(&splash_pic);
    splash.set_colors(Qt::black,Qt::white);
    splash.showFullScreen();
    splash.show_bottom_text("test");

    splash.finish(this);

Хочу сделать картинку загрузки на полный экран, при этом чтобы картинка меньших размеров была по центру, а остальной фон был цвета background_color. С цветом я знаю как реализовать, а вот поместить картинку в центр у меня не получилось. Не подскажете, как это можно сделать?
Записан
Bepec
Гость
« Ответ #1 : Декабрь 13, 2012, 20:28 »

QDesktopWidgets вам в помощь.
Размер текущего экрана получить несложно. Далее +- и вуаля.
Записан
hemul
Гость
« Ответ #2 : Декабрь 13, 2012, 20:43 »

Я знаю как получить центр виджета, я не знаю как именно поместить картинку в QSplashScreen в центр
Записан
Bepec
Гость
« Ответ #3 : Декабрь 13, 2012, 22:22 »

Сплешскрин это виджет.
Виджет может двигаться.
Двигаться по координатам.
Координаты получаем от DesktopWidgets.
Знаем размер виджета.
Вычитаем от размера экрана размер виджета.
Делим получившийся размер на 50%.
Передвигаем в полученные координаты сплешскрин.
Профит? Профит.
Записан
hemul
Гость
« Ответ #4 : Декабрь 14, 2012, 10:07 »

Я сделал, что хотел
Код:
class EoF_gameSplashScreen:public QSplashScreen
{
private:
    QColor  text_color;

    QSplashScreen picture;
public:
    EoF_gameSplashScreen(QPixmap pix,QColor bg,QColor text):QSplashScreen(pix)
    {
        picture.setPixmap(pix);
        text_color =text;

        QPixmap bgpix(1,1);
        QPainter p;
        p.begin(&pix);
        p.fillRect(0,0,1,1,bg);
        p.end();
        setPixmap(bgpix);

        QPalette Pal(palette());
        // set black background
        Pal.setColor(QPalette::Background, bg);
        setAutoFillBackground(true);
        setPalette(Pal);
        show();

        picture.setParent(this);
    }

    void show_bottom_text(const QString &text)
    {
        showMessage(text,Qt::AlignCenter | Qt::AlignBottom,text_color);
    }

    void set_colors(QColor bg,QColor text)
    {
        text_color = text;

        QPalette Pal(palette());
        // set black background
        Pal.setColor(QPalette::Background, bg);
        setAutoFillBackground(true);
        setPalette(Pal);
        show();
    }

    void show()
    {
        showFullScreen();
        picture.show();
    }

    void stop(QWidget *w)
    {
        picture.finish(w);
        finish(w);
    }

};

Наследуем QSplashScreen, ставим картинку QPixmap(1;1) и ставим нужный нам цвет фона - фон есть .
Делаем членом нашего класса еще один QSplashScreen и добавляем нужную картинку для загрузки в центр (она сама туда помещается).
Записан
Bepec
Гость
« Ответ #5 : Декабрь 14, 2012, 10:28 »

Омфг. А в втором сплешскрине нет третьего сплешскрина с надписью?
Могли б просто картинки отрисовывать на нём, если уж стандартные функции не подходят.
Записан
hemul
Гость
« Ответ #6 : Декабрь 14, 2012, 13:15 »

Вот я и пытался узнать как, потому что paintEvent не вызывался вообще, а drawContents не работал .
Записан
Bepec
Гость
« Ответ #7 : Декабрь 14, 2012, 13:23 »

Минимально компилируемый пример в студию и возможно вам помогут.
Записан
Dancing_on_water
Гость
« Ответ #8 : Декабрь 14, 2012, 20:35 »

Как было сказано QSplashScreen это виджет.
И самый простой способ отцентрировать элемент в виджете это поместить в него gridLayout, а затем к слою добавить картинку. Цвет фона задать через QPallite или через QSS
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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