Russian Qt Forum

Qt => Пользовательский интерфейс (GUI) => Тема начата: ramin от Декабря 03, 2009, 09:26



Название: Определение центра экрана
Отправлено: ramin от Декабря 03, 2009, 09:26
ЗДРАВСТВУЙТЕ.
Помогите как определить центр экрана.чтобы использовать ее в программе.мне нужно чтобы в моей программе все диалоговые окна которые я открываю появлялись в центре Экрана????


Название: Re: Определение центра экрана
Отправлено: spectre71 от Декабря 03, 2009, 09:36
ЗДРАВСТВУЙТЕ.
Помогите как определить центр экрана.чтобы использовать ее в программе.мне нужно чтобы в моей программе все диалоговые окна которые я открываю появлялись в центре Экрана????

QDesktopWidget


Название: Re: Определение центра экрана
Отправлено: irv от Декабря 03, 2009, 10:18
ЗДРАВСТВУЙТЕ.
Помогите как определить центр экрана.чтобы использовать ее в программе.мне нужно чтобы в моей программе все диалоговые окна которые я открываю появлялись в центре Экрана????

Можно сделать так:
Код:
private slots:
void setupWidget();
А далее в процедуре инициализации виджета:

Код:
this->setupWidget();

И сама функция:

Код:
void test::setupWidget()
{
    QRect screenRect = Application::desktop()->screenGeometry(QApplication::desktop()->primaryScreen());
    QRect windowRect(0, 0, 400, 232); //параметры виджета
    if (screenRect.width() < 400)
        windowRect.setWidth(screenRect.width());
    if (screenRect.height() < 232)
        windowRect.setHeight(screenRect.height());
    windowRect.moveCenter(screenRect.center());
    this->setGeometry(windowRect);
    this->setMinimumSize(80, 60);
}



Название: Re: Определение центра экрана
Отправлено: ramin от Декабря 03, 2009, 11:06
Я проверил только далог окна опять не открываються в центре!!!!


Название: Re: Определение центра экрана
Отправлено: Павел_F. от Декабря 03, 2009, 11:35
Переопредели showEvent вот так:
Код:
void MyDialog::showEvent( QShowEvent* event)
{
int x,y;
x = QApplication::desktop()->screen( 0)->width()/2 - width()/2;
y = QApplication::desktop()->screen( 0)->height()/2 - height()/2;
move( x, y);
QDialog::showEvent( event);
}
Это окно у меня появляется в центре экрана, была такая необходимость.


Название: Re: Определение центра экрана
Отправлено: SASA от Декабря 03, 2009, 12:47
По-моему диалоги и так отрображаются в центре монитора с мышкой.


Название: Re: Определение центра экрана
Отправлено: MoPDoBoPoT от Декабря 03, 2009, 13:23
Как расположить окно по центру экрана? (http://wiki.crossplatform.ru/index.php/Как_расположить_окно_по_центру_экрана%3F)
По-моему диалоги и так отрображаются в центре монитора с мышкой.
Это если парент не указан, иначе - относительно центра парента.


Название: Re: Определение центра экрана
Отправлено: sendevent от Декабря 03, 2009, 13:25
1. модальные диалоги вроде действительно сами центрируются по паренту (наверное, зависит от WM);
2. не забываем, что рабочих столов может быть больше одного - как физически, так и виртуально.

Код:
/*static*/ const QRect OurApplication::getScreenSize( const QPoint& pnt/*=QPoint()*/ )
{
    if( pnt.isNull() )
    {
        return qApp->desktop()->availableGeometry(); //-- default system' screen
    }
    return qApp->desktop()->availableGeometry( pnt ); //--"current" (under cursor) screen
}

/*static*/ void OurApplication::makeWidgetCentered( QWidget *pWidget, QWidget *pBaseWidget/*=0*/ )
{
    if( !pWidget )
    {
        return;
    }

    QRect baseRect;
    if( !pBaseWidget )
    {
        baseRect = getScreenSize( QCursor::pos() );
    }
    else
    {
        baseRect = pBaseWidget->rect();
        baseRect.setTopLeft( pBaseWidget->mapToGlobal( baseRect.topLeft() ) );
        baseRect.setBottomRight( pBaseWidget->mapToGlobal( baseRect.bottomRight() ) );
    }
   
    QRect widgetGeometry = pWidget->geometry();
    widgetGeometry.moveCenter( baseRect.center() );
   
    pWidget->setGeometry( widgetGeometry );
}


Название: Re: Определение центра экрана
Отправлено: NicK от Декабря 04, 2009, 11:48
Код:
void PlaceWndInTheDesktopCentre()
{
        QDesktopWidget *desktop = QApplication::desktop();

        int screenWidth, width;
        int screenHeight, height;
        int x, y;
        QSize windowSize;

        screenWidth = desktop->width(); // get width of screen
        screenHeight = desktop->height(); // get height of screen

        windowSize = size(); // size of our application window
        width = windowSize.width();
        height = windowSize.height();

        // little computations
        x = (screenWidth - width) / 2;
        y = (screenHeight - height) / 2;
        y -= 20;

        // move window to desired coordinates
        move ( x, y );
}