реклама на сайте
подробности

 
 
> Прилипание к краям экрана Qt
nice_vladi
сообщение Nov 28 2017, 03:51
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 7-09-16
Из: Томск
Пользователь №: 93 239



Всем привет. Вопрос простой: как реализовать прилипание к краям экрана основного виджета (QMainWindow) в Qt Creator? Либо каким образом можно сделать прилипание? Может быть, главная форма не имеет такой возможности? Поиски в интернатах и книжках не привели к успеху(((

Qt Creator 4.0.2
Windows 7
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
nice_vladi
сообщение Jan 31 2018, 07:04
Сообщение #2


Участник
*

Группа: Участник
Сообщений: 53
Регистрация: 7-09-16
Из: Томск
Пользователь №: 93 239



Всем привет!

Добрались руки до нормальной переделки. За исходник взял код arhiv6 и малость допилил. Корректно работает на нескольких мониторах (расширенный рабочий стол). И корректно отрабатывает доступные области (липнет к краям панели задач, а не к краю экрана под ней).

Пробовал только под виндой. Если руки дойдут - попробую под линуксом - отпишусь (хочется проверить, не будет ли конфликтов с wm).

CODE

void MainWindow::moveEvent(QMoveEvent *event)
{
Q_UNUSED(event);

const int magnetDistance = 100;

int screenNum = QApplication::desktop()->screenNumber(this);

int windowTopBorder = pos().y();
int windowBottomBorder = windowTopBorder + size().height();
int windowLeftBorder = pos().x();
int windowRightBorder = windowLeftBorder + size().width();

qDebug() << "win" << windowLeftBorder << windowRightBorder << windowTopBorder << windowBottomBorder;

int screenTopBorder = QApplication::desktop()->availableGeometry(screenNum).top();
int screenBottomBorder = QApplication::desktop()->availableGeometry(screenNum).bottom();
int screenLeftBorder = QApplication::desktop()->availableGeometry(screenNum).left();
int screenRightBorder = QApplication::desktop()->availableGeometry(screenNum).right();

qDebug() << "screen" << screenLeftBorder << screenRightBorder << screenTopBorder << screenBottomBorder;

if (abs(windowLeftBorder - screenLeftBorder) < magnetDistance) {
move(screenLeftBorder, windowTopBorder);
}

if (abs(windowRightBorder - screenRightBorder) < magnetDistance) {
move(screenRightBorder - size().width(), windowTopBorder);
}

if (abs(windowTopBorder - screenTopBorder) < magnetDistance) {
move(windowLeftBorder, screenTopBorder);
}

if (abs(windowBottomBorder - screenBottomBorder) < magnetDistance) {
move(windowLeftBorder, screenBottomBorder - size().height());
}
}
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 22nd July 2025 - 06:06
Рейтинг@Mail.ru


Страница сгенерированна за 0.01364 секунд с 7
ELECTRONIX ©2004-2016