Arrow11 квітня 2017 р. 04:48
Вопрос по QScrollArea и по созданию класса для доступа к его элементам по индексу.
Есть два вопроса:
Есть ли возможность в QScrollArea определить текущий видимый элемент, когда остальные скрыты.
И каким образом можно реализовать класс с функционалом QLabel, но с возможностью доступа к его элементам по индексу.
Чтобы было возможным обращение типа:
myClassVariable(i)->Text("text");
Рекомендуємо хостинг TIMEWEB
Стабільний хостинг, на якому розміщується соціальна мережа EVILEG. Для проектів на Django радимо VDS хостинг.Вам це подобається? Поділіться в соціальних мережах!
AD
- Akiv Doros
- 11 листопада 2024 р. 14:58
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:50бали,
- Рейтинг балів-4
m
- molni99
- 26 жовтня 2024 р. 01:37
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:80бали,
- Рейтинг балів4
m
- molni99
- 26 жовтня 2024 р. 01:29
C++ - Тест 004. Указатели, Массивы и Циклы
- Результат:20бали,
- Рейтинг балів-10
Останні коментарі
ИМ
Django - Підручник 017. Налаштуйте сторінку входу до Django Добрый вечер Евгений! Я сделал себе авторизацию аналогичную вашей, все работает, кроме возврата к предидущей странице. Редеректит всегда на главную, хотя в логах сервера вижу запросы на правильн…
Игорь Максимов22 листопада 2024 р. 11:51
Evgenii Legotckoi31 жовтня 2024 р. 14:37
Читалка файлів fb3 на Qt Creator Подскажите как это запустить? Я не шарю в программировании и кодинге. Скачал и установаил Qt, но куча ошибок выдается и не запустить. А очень надо fb3 переконвертировать в html
ИМ
Django - Урок 064. Як написати розширення для Python Markdown Приветствую Евгений! У меня вопрос. Можно ли вставлять свои классы в разметку редактора markdown? Допустим имея стандартную разметку: <ul> <li></li> <li></l…
Игорь Максимов05 жовтня 2024 р. 07:51
QML - Урок 016. База даних SQLite та робота з нею в QML Qt Здравствуйте, возникает такая проблема (я новичок): ApplicationWindow неизвестный элемент. (М300) для TextField и Button аналогично. Могу предположить, что из-за более новой верси…
Тепер обговоріть на форумі
Evgenii Legotckoi24 червня 2024 р. 15:11
t
google domain [url=https://google.com/]domain[/url] domain [http://www.example.com link title]
tonypeachey115 листопада 2024 р. 06:04
NSProject04 червня 2022 р. 03:49
IscanderChe31 жовтня 2024 р. 15:43
Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
Если текущий элемент будет один единственный из видимых, то можно попробовать воспользоваться методом findChildren .
Но это только в том случае, если другие элементы будут действительно скрыты, а не просто не видны из-за того, что выходят за область просмотра.
Если же вопрос идёт о тех виджета, который находятся в области просмотра, то можно поиграться с методом QScrollArea::childAt(int x, int y), который ищет дочерние виджеты по определённым координатам. Думаю, что это будет как раз то, что нужно. По идее под этими координатами должен будет находиться искомый виджет (если только не нужно будет делать трансляцию координат... тут вам в помощь методы mapTo , mapToGlobal , mapToParent )
Что касается вопроса QLabel , то не понятна суть вопроса. QLabel - это не контейнер, чтобы к его элементам по индексу обращаться. Можно конечно наследоваться от QLabel и определить кучку объектов, которые будут доступны по некоторому индексу, или скорее по некоторому enum , который будет перечислением индексов. Только зачем? . Да и выглядеть ваше предполагаемое обращение должно всё таки несколько иначе:
Оператор круглых скобок ради такого точно никто не перегружает, это просто нелогично и является довольно неочевидным решением для стороннего программиста, который будет не в курсе вопроса.
Так что вердикт такой, хотите некие индексы в QLabel и с функционалом QLabel, то наследуйтесь от этого QLabel, делайте метод at(), который будет возвращать указатель на объекты внутри QLabel, и у них уже реализуйте нужные методы. Но на мой взгляд вас куда-то не туда понесло, скорее всего всё должно быть в точности до наоборот.
Спасибо! Со QScrollArea буду пробовать выйти на нужный виджет.
А насчет вопроса о QLabel, то похоже, что я действительно погорячился - это лишнее.
Еще один вопрос немного не по теме:Как можно сохранить QPixmap в pdf, вернее как сохранить ясно, а вот с масштабированием проблема. Подгоняет изображение под размер листа, а не наоборот и где глюк не ясно. (Сохранение в А4 принципиально - изображения содержат страницы текста со сканера).
Код:
Извините выше с кодом намудрил все немного проще, но вопрос остается:
Мм.. Вы пытаетесь масштабировать страницу относительно того в какой ориентации была картинка?
Может стоит тогда для этого использовать метод QPrinter::setPageOrientation , он вроде бы поворачивает каждую страницу, то есть часть будет в портретной ориентации, а часть в ландшафтной.
Ну а масштабирование изображения попробуйте делать методом QPixmap::scaledToWidth , чтобы всё подгонялось по ширине. После того как установили ориентацию страницы и добавили новую страницу. Настройка ориентации применяется к следующей новой странице.
Спасибо все работает, только изображение на первой странице почему-то съезжает в право. Может нужно что-то дополнительно задавать?
В документации сказано, что setPrinterOrientation отрабатывает после вызова newPage() на Windows и Mac .
Возможно проблема в этом. А возможно, что не совсем правильно определяются отступы при вызове pageRect() в первый раз. Возможно имеет смысл настроить margins перед началом печати изображения в файл.
Попробовал так:
Загружаю для создания pdf страницы (все горизонтальные) и получаю следующее:
Через QDebug() видно, что все настраивается отлично, но в документе первая страница получается вертикальной и все изображение на ней обрезано. С остальными страницами все отлично.
Похоже, что принтер не обновляет данные о странице после применения setPageOrientation. Как можно заставить его это сделать или как удалить текущую страницу, чтобы потом создать новую с нормальной ориентацией :) ?
Я выше уже говорил, что ориентация страницы применяется после вызова newPage() и привёл выдержку из документации...
Чтобы установить ориентацию для первой страницы, нужно устанавливать её до вызова метода begin() у QPainter() , тогда первая страница будет отрисована с нужной ориентацией.
Что касается сдвига, то пока понятия не имею, как это исправить.
Извините, туплю.
Проблему решил так:
Извинения излишни ))
Небольшой комментарий по коду.
foreach - это чисто Qt-шный макрос, который был сделан в то время, когда стандарт C++ не поддерживал цикл for с возможностью перебора элементов контейнеров, которые имеют итератор. А вы используете как раз такой контейнер, я имею ввиду fNames . На сегодняшний день for поддерживает перебор элементов таких контейнеров (Начиная со стандарта C++11). А foreach можно считать deprecated . Поэтому в своих проектах, если не пишите на устаревших версиях стандарта C++, используйте новую нотацию. То есть с использованием цикла for . Тогда ваш код будет выглядеть следующим образом:
Спасибо! Цикл foreach привычка с C#.