Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Общие вопросы _ Скриншот в Линукс

Автор: V7T 11.10.2011, 20:45

Здравствуйте, уважаемые форумчане!
Сразу скажу c QT и линуксом, до сих пор, дела никогда не имел, да и с плюсами очень мало работал, в основном программировал на шарпе.
Суть такова, нужно написать простенькое приложение клиент-сервер, клиент каждые несколько секунд делает скриншот всей области экрана с последующей отправкой его на сервер. В принципе литературу перелопатил малость "основы программирования в линукс". Приложение пишу консольное. Нашел код в интернете, который делает скрин, и столкнулся с проблемой...

....
#include <qpixmap.h>

int main(int argc, char *argv[])
{
...
QPixmap screenshot = QPixmap::grabWindow(qt_xrootwin());
screenshot.save(QString(getenv("HOME"))+"/screen.png","PNG",100);
return 0;
...
}

... что за метод qt_xrootwin()? При компилировании ругается "error: ‘qt_xscreen’ was not declared in this scope". На просторах инета ни черта не нашел.
И по сему, уважаемые, решил обратиться к вам. Подскажите, может нужно подключить библиотеку какую-нибудь(я копался в СДК QT и видел пример приложения СКРИНШОТ, но мне хотелось бы использовать именно данный, т.к. сразу в таймер загнал этот маленький кусок и все)?
Спасибо.

Автор: registr 11.10.2011, 21:55

Похоже, что это какая-то самописная функция.

Qt Assistant:
QPixmap QPixmap::grabWindow ( WId window, int x = 0, int y = 0, int width = -1, int height = -1 )

Creates and returns a pixmap constructed by grabbing the contents of the given window restricted by QRect(x, y, width, height).

The arguments (x, y) specify the offset in the window, whereas (width, height) specify the area to be copied. If width is negative, the function copies everything to the right border of the window. If height is negative, the function copies everything to the bottom of the window.

Ты лучше сам ее допиши.

Т.е. сам вставь нужные значения.

Читаем дальше:
The window system identifier (WId) can be retrieved using the QWidget::winId() function. The rationale for using a window identifier and not a QWidget, is to enable grabbing of windows that are not part of the application, window system frames, and so on.

The grabWindow() function grabs pixels from the screen, not from the window, i.e. if there is another window partially or entirely over the one you grab, you get pixels from the overlying window, too. The mouse cursor is generally not grabbed.

Автор: DOGG 12.10.2011, 14:13

qt_xrootwin() - скорее всего это функция получения WId виртуального корневого окна в X Window System.

Ищите как его определить и сможете сами ее дописать (можете вот сдесь посмотреть http://qt.osdn.org.ua/screensaver.html).

Автор: V7T 13.10.2011, 10:22

Спасибо вам.

Как оказалось ни чего сложного не было:
QPixmap screenshot = QPixmap::grabWindow(QApplication::desktop()->winId());

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)