О да - великий хакер. теперь объясни мне почему здесь нет связи?
по теме, даж если в куте нет функции, изменяющей разрашение, это дростаточно легко реализовать. пример:
#include <QPushButton>
#include <QApplication>
#if defined Q_OS_WIN32
#include <windows.h>
#endif
int main(int argc, char *argv [] ){
QApplication app ( argc, argv );
QPushButton A;
#if defined Q_OS_LINUX
A.setText ( "Linux rulezzz, U - cool hazker =) " );
// теоретически можно посмотреть в сорцах xorg'а какой функцией там это делается
system ( "xrandr --size 800x600" );
#elif defined Q_OS_WIN32
A.setText("Abnormal I/O Error!!!. Trying to drop you partitional table");
> О да - великий хакер. теперь объясни мне почему здесь нет связи?
Потому что переносимое приложение не должно делать предположений о физических характеристиках экрана. Представь, что ты рассчитываешь рисовать при разрешении 800x600, а новомодный девайс, на котором запускается твоя программа, не поддерживает _меньше, чем 4400x3300. Плюс нестандартные размеры шрифта и бордюр вокруг кнопочек 50 пиксел. И как всё это будет выглядеть?
X11 и Win32 - это далеко не полный список.
Код, который ты предлагаешь, конечно, будет работать в некоторых случаях, но в целом это называется "костыль".
>Код, который ты предлагаешь, конечно, будет работать в некоторых случаях, но в целом это называется "костыль".
это называется не костыль - а платформо-зависимый код, и в том же qt его хватает. Посмотри хотя бы на класс QX11Info (причем этот класс никем не наследуется)
>а новомодный девайс, на котором запускается твоя программа, не поддерживает _меньше, чем 4400x3300
в qt есть поддержка сетевой составляющей и поддержа opengl, и это по твоему значит, что qt нельзя использовать на системах с отсутствующей поддержкой opengl и tcp/ip?
>Плюс нестандартные размеры шрифта и бордюр вокруг кнопочек 50 пиксел. И как всё это будет выглядеть?
расмешил =)))))) чем отличается смена разрешения вне программы и последующий repaint(), от того что смена разрешения будет в самой программе?
ale, ты, похоже, можешь, но не хочешь понять, о чём я говорю. Скажем так: если человеку понадобилось "менять разрешение экрана через Qt", то скорее всего он использует неправильный инструмент или некорректно подходит к решению своей конкретной задачи. Понятно, что если нужно, можно и эектропитанием из свой программы управлять, и это будет зависеть от платформы и оставаться правильным, тут не о чем спорить.
Если в коде помимо Qt используется ещё и Xlib или WinAPI, то это уже не чистое Qt-приложение и для этого треда офтопик.
>> #if defined Q_OS_LINUX
>
>может правильнее проверять на наличие RandR X extension? есть, например, OS_LINUX работающие без X11-RandR,
я привел простой пример, причем оставил комментарий "теоретически можно посмотреть в сорцах xorg'а какой функцией там это делается". естно, что использование system() не кашерно.
> и даже вООбще без X11 :-)
что, простой вопрос смены разрешения превращаем в вопрос: "Как сменить разрешение экрана, средствами qt3, при условии портирования на любую даже еще не спроектированную и не поддерживаемую платформу, с учетом будующих изменений в 6-ой ветке qt?" =) Не надо усложнять лишний раз
>Скажем так: если человеку понадобилось "менять разрешение экрана через Qt", то скорее всего он использует неправильный инструмент или некорректно подходит к решению своей конкретной задачи
я это понимаю. но вот мое имхо: есть конкретная задача, если задача поставлена криво - то тут никакими советами не поможешь. есть задача - должно быть решение. при этом человек ставящий задачу просто окажется не компитентен (последствия будут соответствующие).
цель моего первого поста сказать: нет объективных причин почему это не могло бы быть реализовано (просто сейчас это не реализовано и все), и привел пример как можно решить задачу, возможно, расширив условия (qt3)
>Если в коде помимо Qt используется ещё и Xlib или WinAPI, то это уже не чистое Qt-приложение и для этого треда офтопик.
Я не случайно написал "возможно" в абзаце выше. ибо никаких дополнительных библиотек, кроме qt'шных, не требуется. И что значит не "чистое Qt-приложение"? Qt-приложение под виндами как-раз таки и использует winapi, а под x11 - xlib.
> цель моего первого поста сказать: нет объективных причин почему это не могло бы быть реализовано (просто сейчас это не реализовано и все)
Я на пальцах привёл пример, почему этого в Qt не должно быть. Учитывая возраст Qt, можно предположить, что разработчики тоже не считают это правильным, иначе такую простую возможность (несколько строк для каждой платформы) они бы уже давно включили.
> И что значит не "чистое Qt-приложение"? Qt-приложение под виндами как-раз таки и использует winapi, а под x11 - xlib.
Это значит, что в коде программы не присутствует вызовов зависящих от платформы функций, благодаря чему эта программа переносится на любую платформу, поддерживаемую Qt, простой перекомпиляцией.
>Я на пальцах привёл пример, почему этого в Qt не должно быть. Учитывая возраст Qt, можно предположить, что разработчики тоже не считают это правильным, иначе такую простую возможность (несколько строк для каждой платформы) они бы уже давно включили.
а я (правда уже на своих) пальцах опроверг ваш пример (если нет - приведите то место где я ошибся) и привел свой почему такой код может быть включен. Кстати в рассылке (которую привели выше) привели лишь техническую причину почему не будут включать (из-за косяка со спрайтами), но о принципиальных причинах "не включения" там речи не было
>Это значит, что в коде программы не присутствует вызовов зависящих от платформы функций, благодаря чему эта программа переносится на любую платформу, поддерживаемую Qt, простой перекомпиляцией.
примера с классом QX11Info не достаточно, привести еще? попробуйте откомпилить мне приложение под винду с этим классом.
директивы Q_OS_WIN32 и Q_OS_LINUX (и прочие Q_OS_*) более чем стандартные, они то и позволяют не модифицируя исходный код улучшить переноимость программы
зы споры о не кроссплатформенности использования winapi "защищеного" директивами - считаю не обоснованными, ввиду отсутствия опровержения моих слов (хотябы о классе QX11Info)
>О да - великий хакер. теперь объясни мне почему здесь нет связи?
><немного кода, имеющего к Qt весьма посредственное отношение>
Связь Qt и разрешения экрана никак не показана.
Замени создание и инициализацию Qt-приложения на аналогичные действия на GTK+, оставив всякие #if defined Q_OS_LINUX .... #elif defined Q_OS_WIN32 .... #endif --- получишь "смену разрешения экрана с помощью GTK+" ?
> Замени создание и инициализацию Qt-приложения на аналогичные действия на GTK+, оставив всякие #if defined Q_OS_LINUX .... #elif defined Q_OS_WIN32 .... #endif ---
начнем с того, что скорее всего (не могу утверждать наверняка - gtk активно не использовал для программистских целей) константы Q_OS_* там неопределены =) но, инстинктивно (о как!) подозреваю что там есть подобные константы
>Связь Qt и разрешения экрана никак не показана.
xlib, qt (и прочие соответствующие либы) у них основная цель одна - отображение окон, оформлений, рюшечек и прочих "анти-консольных" составляющих, всязи с этим вопрос чем так выделяются xlib,win32api, тем что через эти библиотеки можно менять разрешение, а "вышестоящие" либы (типа qt или gtk) - не должны этого делать? можно поставить вопрос иначе - чем так отличаются функция изменения разрешения рабочего стола, от вызова функции отрисовки "квадрата" на рабочем столе. ИМХО - ничем не отличаются =)
>получишь "смену разрешения экрана с помощью GTK+" ?
скажем так, не противоречащим средствам gtk
> а я (правда уже на своих) пальцах опроверг ваш пример (если нет - приведите то место где я ошибся) и привел свой почему такой код может быть включен
Твой пример о другом. Такой код может быть включен в программу, но ему не место в самой Qt. Аргументация простая, повторять не буду.
> Кстати в рассылке (которую привели выше) привели лишь техническую причину почему не будут включать (из-за косяка со спрайтами), но о принципиальных причинах "не включения" там речи не было
Если в треде за n-е число n-го года из пяти e-mail'ов об этом не сказано, то это ещё ничего не говорит о мнении разработчиков.
> примера с классом QX11Info не достаточно, привести еще? попробуйте откомпилить мне приложение под винду с этим классом.
В документации Qt для каждого такого класса особо оговорено, что его использование делает программу непереносимой.
> зы споры о не кроссплатформенности использования winapi "защищеного" директивами - считаю не обоснованными, ввиду отсутствия опровержения моих слов (хотябы о классе QX11Info)
Если для какой-то определённой платформы делается исключение, и специфичный для неё код обрамляется #ifdef'ами, то это ещё более-менее нормально. Но со сменой разрешения другой случай: множество поддерживаемых платформ определяется не множеством платформ, поддерживаемых Qt в настоящем и в будущем, а тем, о каких платформах мы успели подумать при написании программы. Получившаяся программа переносима между этими несколькими платформами, но непереносима как Qt-приложение, по тем же причинам, что и с классами типа QX11Info.
> всязи с этим вопрос чем так выделяются xlib,win32api, тем что через эти библиотеки можно менять разрешение, а "вышестоящие" либы (типа qt или gtk) - не должны этого делать?
Заметь, в Xlib этого нельзя делать без специального расширения, которое вполне может быть и недоступно. Ну а WinAPI - солянка из абсолютно всех доступных функций, по одному её составу об архитектурных особенностях нельзя судить.
>Получившаяся программа переносима между этими несколькими платформами, но непереносима как Qt-приложение, по тем же причинам, что и с классами типа QX11Info.
вот, дошли до самого главного. во всем треде не было ни строчки упомянуто о целевых платформах. Если ты пишешь программу (не калькулятор разумеется, что-то поболе сложное) фазу тестирования на конечных платформах не выкинешь. Сложно делать большую программу, кушающую несколько метров ram'а, втайне надеясь, что кто-то откомпилит её и будет использовать на смартфоне (это просто гипертрафированный пример).
>Если для какой-то определённой платформы делается исключение, и специфичный для неё код обрамляется #ifdef'ами, то это ещё более-менее нормально.
нутк =) FoXy_ спросил "как сменить разрешение экрана" - я ему привел пример.
>Заметь, в Xlib этого нельзя делать без специального расширения, которое вполне может быть и недоступно. Ну а WinAPI - солянка из абсолютно всех доступных функций, по одному её составу об архитектурных особенностях нельзя судить.
напоминаю о opengl и tcp/ip которые тоже нельзя использовать если не поддерживает платформа. напоминаю что вопрос был "как сменить разрешение экрана", а не "как сменить разрешение экрана на qt3, с учетом того, что qt скомпилен без XRandr"
Тестирование тут ни при чём, ты слишком отклонился в поисках призрачных доказательств.
>>Если для какой-то определённой платформы делается исключение, и специфичный для неё код обрамляется #ifdef'ами, то это ещё более-менее нормально.
>нутк =) FoXy_ спросил "как сменить разрешение экрана" - я ему привел пример.
Нет, ты привёл пример для двух платформ: [X11] + [Win32], а не для ([Все платформы поддерживаемые Qt] - 2) + [X11] + [Win32].
Если ты заметил, я не спорю с тобой ни по одному пункту. Я только в очередной раз восстанавливаю своё единственное утверждение, смысл которого ты не устаёшь искажать.
>Тестирование тут ни при чём, ты слишком отклонился в поисках призрачных доказательств.
нет, я всего лишь хотел сказать что все зависит от задачи. задача поставленная Foxy_ решена на примере двух платформ. Если ему нужно чтоб это работало с qt скомпиленным без чего-то на всех возможных платформах, то об это в задаче не говорилось. вот...
Кстати, там выше есть тред про трей, и там как раз оправданно сделать #ifdef'ы и спрятать окошко с помощью WinAPI, потому что для Linux и других платформ при этом ничего не изменится.
лучший способ доказать, кто Прав, а кто Не прав ...
наклепать патч и отослать его троллям ..
посмотрим через какое время появится что-нибудь типа
static QDesktopWidget::setScreenResolution (или QApplication::xxx).
++
для win32 и X11+RandR тема исчерпана, а как быть с Carbon-oм?
>за неимением оной, меня вполне устроит пример ale.
[ ale вешая очередную медаль на грудь ]: "О-о-о!!! Кто оказался наиболее полезным?! Все побежали с вопросом увеличения количества очков ale к модерам!"