Диалог выбора файла Qt
Обновлено: 21.11.2024
Большинство приложений PyQt с графическим интерфейсом состоят из главного окна и нескольких диалоговых окон. Диалоги — это окна небольшого размера, которые позволяют вам общаться с вашими пользователями, либо показывая сообщения на экране, либо принимая ввод пользователя. Вы можете использовать Qt Designer для создания диалогов, используя преимущества множества опций, предлагаемых этим инструментом.
В этом руководстве мы узнаем, как создавать и настраивать диалоговые окна с помощью Qt Designer. Мы также изучим два разных способа использования и запуска диалогов в наших приложениях с графическим интерфейсом. Обладая этими знаниями, мы сможем быстро и легко добавлять диалоги в наши приложения.
Для лучшего понимания тем, которые мы рассмотрим в этом руководстве, полезно иметь некоторые предварительные знания о приложениях PyQt, виджетах, макетах, сигналах и слотах.
Начало работы с диалоговыми окнами PyQt
В программировании с графическим интерфейсом диалоги представляют собой окна небольшого размера, предлагающие дополнительные функции и позволяющие общаться с пользователями. Некоторые распространенные примеры диалоговых окон включают диалоговое окно Открыть документ в текстовом процессоре или текстовом редакторе, диалоговые окна Настройки или Предпочтения в большинстве приложений с графическим интерфейсом пользователя, диалоговое окно Поиск в файловом менеджере или текстовом редакторе и т. д.
Диалоги также часто используются для отображения сообщений об ошибках или общей информации о данной операции. Их также можно использовать, чтобы запросить у пользователей подтверждение продолжения операции или получить от пользователя данные для базы данных.
-
для выбора шрифта для указания конфигурации принтера для предоставления обратной связи о ходе медленной операции для указания цветов для получения единого значения от пользователя для выбора файлов или каталогов
Кроме того, PyQt предоставляет класс QDialog для создания полностью настраиваемых диалоговых окон, когда для операции, которую необходимо выполнить, нет встроенных средств.
Хотя мы можем использовать класс QDialog для создания диалогов в коде Python, мы также можем использовать Qt Designer для создания пользовательских диалогов в редакторе перетаскивания. Qt Designer — это инструмент Qt с удобным графическим интерфейсом, который позволит нам быстро создавать и настраивать диалоговые окна и окна.
Создание диалогов с помощью Qt Designer
Вы можете использовать Qt Designer для создания и настройки пользовательского интерфейса ваших пользовательских диалогов. С помощью Qt Designer вы можете создать графический интерфейс диалога, используя встроенный шаблон, или вы можете создать диалог полностью с нуля. Вы можете добавлять виджеты в свои диалоговые окна, размещать виджеты в макетах, настраивать их внешний вид, задавать начальные значения для их атрибутов, устанавливать их порядок табуляции, создавать друзей для предоставления сочетаний клавиш и подключать встроенные сигналы виджетов к слотам. р>
Когда мы создаем диалоговое окно с помощью Qt Designer, графический интерфейс диалогового окна сохраняется в файле .ui, который представляет собой XML-файл, содержащий всю информацию, которая нам понадобится для последующего создания графического пользовательского интерфейса диалогового окна в наших приложениях.
В следующих нескольких разделах мы рассмотрим, как создать и настроить графический интерфейс диалогового окна с помощью Qt Designer.
Использование шаблонов диалогов Qt Designer
Когда мы запускаем Qt Designer, мы видим главное окно приложения и диалоговое окно под названием "Новая форма". Этот диалог позволяет нам выбрать шаблон для графического интерфейса, который мы хотим создать. Эти шаблоны включают параметры для создания диалоговых окон, основных окон и пользовательских виджетов.
В этом руководстве нас просто интересует, как создавать диалоги с помощью Qt Designer. Итак, мы просто рассмотрим 3 шаблона, которые предлагает Qt Designer для создания диалогов:
Диалоговое окно с кнопками внизу, чтобы создать форму (или диалоговое окно) с кнопками "ОК" и "Отмена", расположенными горизонтально в правом нижнем углу формы
Диалоговое окно с кнопками справа, чтобы создать форму с кнопками «ОК» и «Отмена», расположенными вертикально в правом верхнем углу формы
Диалоговое окно без кнопок для создания пустой формы без кнопок
Следующий скринкаст показывает, как мы можем использовать Qt Designer для создания пользовательских диалогов с использованием различных шаблонов диалогов (по умолчанию):
Чтобы создать диалоговое окно с использованием шаблона Qt Designer, нам просто нужно выбрать нужный шаблон в диалоговом окне "Новая форма", а затем нажать кнопку "Создать" или нажать клавиши Alt+R на клавиатуре.
Если при запуске Qt Designer диалоговое окно "Новая форма" не появляется, вы можете нажать кнопку "Создать" на панели инструментов Qt Designer. Вы также можете нажать «Файл»> «Создать». пункт главного меню или нажмите комбинацию клавиш Ctrl+N на клавиатуре.
Добавление виджетов и макетов
Виджеты — это строительные блоки любого приложения PyQt с графическим интерфейсом. Вы можете использовать виджеты для отображения информации, ввода данных пользователем и предоставления контейнеров для других виджетов, которые должны быть сгруппированы. С помощью Qt Designer вы можете добавлять виджеты в наши диалоги и окна, перетаскивая их из панели виджетов Qt Designer в вашу форму. Когда у вас есть все необходимые виджеты, вы можете расположить их с помощью макетов Qt.
Допустим, ваша компания создает приложение базы данных для управления важной информацией о сотрудниках. Вас попросят добавить новое диалоговое окно PyQt для ввода или обновления общей информации о сотрудниках. В диалоговом окне должны быть параметры для ввода следующей информации: Имя сотрудника, Дата приема на работу, Отдел, Должность, < em>Годовой оклад и Описание работы.
Следующий скринкаст показывает, как мы можем быстро создать графический интерфейс для диалогового окна с помощью Qt Designer:
Здесь мы сначала создаем диалоговое окно, используя шаблон диалогового окна с кнопками внизу. Затем мы добавляем объекты QLabel, чтобы запрашивать необходимую информацию. Для каждого поля нужен определенный виджет ввода. Например, мы добавляем объект QLineEdit для имени сотрудника, объект QDateEdit для даты трудоустройства, два объекта QComboBox для отдела и должности, объект QDoubleSpinBox для годовой зарплаты и объект QTextEdit для поля описания работы.< /p>
После того как у нас есть все виджеты, мы выбираем их все и упорядочиваем с помощью объекта QFormLayout. Последним шагом является добавление основного макета в диалоговое окно. Для этого мы используем объект QVBoxLayout, который позволяет расположить виджеты и кнопки диалога в вертикальном столбце. Вот и все, мы создали наш первый диалог с помощью Qt Designer. Сохраним файл графического интерфейса диалогового окна под именем employee.ui для дальнейшего использования.
Если вы хотите просмотреть, как ваш диалог будет выглядеть в продакшене, вы можете нажать комбинацию клавиш Ctrl+R или щелкнуть «Форма»> «Предварительный просмотр». в главном меню Qt Designer.
В этом разделе мы использовали Qt Designer в режиме редактирования виджетов, который является режимом по умолчанию. В этом режиме мы можем добавлять виджеты в наши диалоги, редактировать свойства виджетов, размещать виджеты в графическом интерфейсе диалогов и так далее. Чтобы активировать режим редактирования виджетов, мы можем выбрать любой из трех следующих вариантов:
- Нажмите клавишу F3
- Выберите параметр «Правка»> «Редактировать виджеты» в главном меню.
- Нажмите кнопку «Редактировать виджеты» на панели инструментов Qt Designer.
Настройка порядка вкладок для виджетов ввода
Элементом, который может повысить удобство использования ваших диалогов, является порядок табуляции виджетов ввода. Порядок табуляции — это порядок, в котором виджеты ввода получают фокус при нажатии клавиш Tab или Shift+Tab. Порядок табуляции по умолчанию основан на порядке размещения виджетов в форме.
Например, в нашем диалоговом окне сотрудника мы поместили объект QDoubleSpinBox для Годовой оклад после объекта QTextEdit для Описания работы. Если пользователь нажимает клавишу Tab для перемещения по диалоговому окну, то он заметит, что когда он нажимает клавишу Tab для перехода от QComboBox Позиция к QDoubleSpinBox Годовая зарплата, что происходит заключается в том, что фокус переходит на описание работы QTextEdit . Это своего рода раздражающее поведение. В следующем скринкасте показана проблема:
Обратите внимание, что когда фокус находится на QComboBox Позиция и пользователь нажимает Tab , фокус переходит непосредственно к Описанию работы QTextEdit, а не к Годовой оклад QDoubleSpinBox, как и следовало ожидать.
Чтобы решить эту проблему, нам нужно изменить порядок табуляции виджетов ввода в нашем диалоговом окне. Во-первых, нам нужно переключиться в режим редактирования порядка вкладок в Qt Designer. Для этого мы можем либо выбрать пункт «Правка»> «Изменить порядок вкладок» в главном меню, либо нажать кнопку «Изменить порядок вкладок» на панели инструментов.
В режиме «Редактировать порядок вкладок» каждый виджет ввода в форме отображается с номером, указывающим его положение в цепочке порядка вкладок. Мы можем изменить порядок вкладок, щелкнув номер каждого виджета в правильном порядке. Вы можете увидеть, как это сделать, в следующем скринкасте:
В этом примере мы меняем порядок табуляции виджетов ввода, нажимая каждый номер в правильном порядке. Когда мы выбираем номер, он становится красным, чтобы указать, что это текущая редактируемая позиция в порядке табуляции. Когда мы нажимаем на другое число, оно будет вторым в порядке табуляции и т. д.
В случае ошибки мы можем перезапустить нумерацию, выбрав «Перезапустить» в контекстном меню формы. Чтобы частично отредактировать порядок табуляции, мы можем выбрать число с нажатой клавишей Ctrl. Порядок табуляции будет изменен с этого виджета. Мы также можем щелкнуть правой кнопкой мыши по данному номеру и затем выбрать «Начать отсюда» в контекстном меню.
Определение друзей
В Qt друзья — это связи между связанными виджетами. Обычно между виджетом QLabel и виджетом ввода, таким как QLineEdit или QComboBox. Эти соединения позволяют вам предоставить быструю комбинацию клавиш для перемещения фокуса на данный виджет ввода. Настроив друзей, вы повысите удобство использования своих диалогов, поскольку предоставите пользователю быстрый способ перемещаться по диалоговым окнам и окнам.
В нашем диалоговом окне сотрудника, чтобы переместить фокус на Годовой оклад QDoubleSpinBox, мы можем установить приятеля между ним и виджетом Годовой оклад QLabel. Друг автоматически предоставит комбинацию клавиш в форме Alt+Letter , где Letter представляет собой одну букву в тексте метки.
В нашей Годовой зарплате QLabel этой буквой может быть A или s или любая другая буква в тексте метки. Единственным ограничением является то, что выбранная буква не конфликтует с буквой любого другого собеседника в диалоговом окне или окне под рукой.
Чтобы выбрать букву для использования в нашем приятеле, нам нужно поставить амперсанд ( & ) перед буквой в тексте метки. С этим дополнением мы предоставляем букву для использования в сочетании клавиш. Например, если мы поместим амперсанд перед буквой s в нашу Годовую зарплату QLabel , тогда мы сможем получить доступ к Годовой зарплате QDoubleSpinBox, нажав Alt+S сочетание клавиш на нашей клавиатуре.
После того, как мы выбрали буквы для использования и разместили соответствующие амперсанды, нам нужно установить друзей. Для этого мы активируем режим Edit Buddies в Qt Designer либо выбрав опцию Edit>Edit Buddies в главном меню, либо нажав кнопку Edit Buddies на панели инструментов.
Чтобы определить друзей, мы нажмем на ярлык и перетащим его на соответствующий виджет ввода. Весь процесс показан в следующем скринкасте:
Чтобы создать друзей между метками и виджетами ввода, мы можем выбрать метку с помощью мыши и перетащить ее на виджет ввода, который мы хотим установить в качестве партнера. Метка и виджет ввода станут друзьями. С этого момента наши пользователи смогут быстро переместить фокус на конкретный виджет ввода, нажав Alt+Letter , где Letter будет буквой, которую мы использовали для определения отношения приятеля. Обратите внимание, что буквы друзей будут подчеркнуты, чтобы указать правильную комбинацию клавиш для использования.
Использование блоков кнопок для размещения кнопок диалогового окна
Существует стандартный набор кнопок, которые можно использовать при создании диалогов. Несмотря на то, что шаблоны Qt Designer предоставляют кнопку OK и кнопку Отмена, на практике вы увидите диалоги, в которых используются разные кнопки, такие как Применить, Закрыть, Да, Нет и т. д.
В нашем примере с сотрудником мы использовали кнопки "Отмена" и "ОК", расположенные в том же порядке слева направо. Это обычный порядок кнопок в Linux или macOS, но не в Windows, где порядок следует поменять местами.
Если мы хотим, чтобы наши приложения с графическим интерфейсом выглядели как можно более естественными на разных платформах, нам потребуется развернуть разные диалоговые окна для разных платформ, чтобы отображать кнопки в правильном порядке для используемой платформы.
К счастью, PyQt предлагает эффективное решение этой конкретной проблемы. Вместо того, чтобы напрямую добавлять кнопки «Отмена» и «ОК», мы можем использовать класс QDialogButtonBox и выбирать кнопки в соответствии с нашими потребностями. Этот класс PyQt будет автоматически обрабатывать порядок кнопок в соответствии со стандартной практикой базовой платформы.
Вот как диалоговое окно нашего сотрудника выглядит в Windows 10, Linux и macOS:
Блок кнопок в Windows
Блок кнопок в Linux
Блок кнопок в macOS
В Windows кнопки в правом нижнем углу диалогового окна меняются местами, если сравнивать их с тем же диалоговым окном, работающим в Linux или macOS. Это связано с тем, что шаблоны диалоговых окон Qt Designer по умолчанию используют объект QDialogButtonBox для расположения кнопок в диалоговом окне. Это очень удобно, если вы создаете мультиплатформенные приложения с графическим интерфейсом с помощью PyQt.
Мы можем выбрать кнопки, которые мы хотим отображать в наших диалогах, изменив свойство .standardButtons объекта QDialogButtonBox в редакторе свойств Qt Designer. Взгляните на следующий скринкаст:
Редактор свойств позволяет установить свойство .standardButtons объекта QDialogButtonBox и выбрать различные наборы стандартных кнопок. Обратите внимание, что когда мы меняем кнопки в QDialogButtonBox, они размещаются в соответствии со стандартной практикой на текущей платформе.
Подключение встроенных сигналов и слотов
В PyQt действия пользователя над виджетом приложения с графическим интерфейсом называются событиями. Когда происходит событие, виджет под рукой излучает сигнал, чтобы сообщить вам, что событие произошло. Чтобы вдохнуть жизнь в ваши приложения, вам нужно подключить эти сигналы к определенным слотам. Слоты — это методы, которые выполняются в ответ на события.
Большинство виджетов реализуют встроенные сигналы, которые выдаются, когда в виджете происходит определенное событие (например, щелчок мышью). Виджеты также предоставляют встроенные слоты, которые позволяют выполнять определенные действия с виджетом. Например, объект QTextEdit предоставляет слот .clear(), который можно соединить с кнопкой или пунктом меню, чтобы очистить содержимое виджета.
Вы можете использовать Qt Designer для подключения этих встроенных сигналов и слотов. Чтобы установить соединение сигнала и слота между двумя виджетами в диалоговом окне, вам сначала нужно переключиться в режим редактирования сигналов/слотов Qt Designer. Для этого вы можете нажать клавишу F4, выбрать пункт Edit>Edit Signals/Slots в главном меню или нажать кнопку Edit Signals/Slots на панели инструментов.
Находясь в режиме редактирования сигналов/слотов, вы выбираете виджет поставщика сигналов с помощью мыши, а затем перетаскиваете этот виджет на виджет поставщика слотов. Это запустит диалоговое окно «Настроить соединение» Qt Designer.
Диалоговое окно «Настройка подключения» состоит из двух панелей. На левой панели вы можете выбрать сигнал, а на правой панели вы можете выбрать слот. Затем вам нужно нажать кнопку OK, чтобы создать соединение. Это нарисует стрелку от виджета поставщика сигналов к виджету поставщика слотов, указывая на то, что соединение установлено. Кроме того, вы увидите название сигнала и слот, который вы только что подключили.
Например, предположим, что у нас есть диалоговое окно с QTextEdit и QPushButton. Нам нужно соединить сигнал .clicked() кнопки со слотом .clear() текстового редактирования, чтобы мы могли очистить содержимое текстового редактирования, нажав на кнопку. Посмотрите следующий пример:
В этом примере мы сначала переключаемся в режим редактирования сигналов/слотов. Затем мы выбираем кнопку «Очистить», перетаскиваем ее и опускаем на объект QTextEdit. Это представляет нам диалоговое окно Configure Connection. В этом диалоговом окне мы выбираем сигнал .clicked() на левой панели и слот .clear() на правой панели. Когда мы нажимаем OK , соединение устанавливается. Мы также можем нажать кнопку «Отмена», чтобы отменить операцию подключения.
Соединение отображается в виде стрелки, соединяющей два виджета с двумя метками, указывающими имя сигнала и слот, который предоставляет каждый виджет.
Чтобы изменить подключение, дважды щелкните стрелку или один из ярлыков. Откроется диалоговое окно «Настроить соединение», в котором вы можете изменить сигнал или слот, задействованный в соединении.
Чтобы удалить соединение, выберите стрелку, обозначающую соединение, или одну из меток, обозначающих сигнал и слот, а затем нажмите клавишу Del.
Поскольку диалоги также являются виджетами, вы можете связать сигнал виджета (скажем, кнопки) со слотом диалога или формы. Процесс тот же, вам просто нужно перетащить виджет на форму, а затем настроить нужный сигнал и слот в диалоговом окне «Настроить соединение».
Наконец, если вы используете шаблон Qt Designer для создания диалогового окна с кнопкой, то вы заметите, что сигнал .accepted() объекта QDialogButtonBox по умолчанию связан со слотом .accept() объекта форма. Точно так же сигнал .rejected() связан со слотом reject(). Итак, ваш диалог полностью функционален с самого начала.
Создание приложений с графическим интерфейсом с помощью Python и Qt6
Простой способ создания настольных приложений
Мое полное руководство, обновленное для версии 2021 и PyQt6. Все, что вам нужно для создания реальных приложений.
Опытный пользователь
Дата регистрации Январь 2006 г. Местоположение Sta. Eugènia de Berga (Vic - Barcelona - Spain) Сообщений: 869 Спасибо 70 Поблагодарили 59 раз в 57 сообщениях Продукты Qt Платформы
QFileDialog выбирает файл или каталог
Мне нужен QFileDialog, который мог бы выбирать файлы с расширением "mp3", а также можно было выбрать каталог (обратите внимание, что мне нужен только один выбор, поэтому вы можете выбрать один файл MP3 или каталог).
Я вставил "Музыка (*.mp3)" в качестве фильтра, но не знаю, как разрешить ему выбирать каталоги.
Опытный пользователь
Дата регистрации Январь 2006 г. Местоположение Sta. Eugènia de Berga (Vic - Barcelona - Spain) Сообщений: 869 Спасибо 70 Поблагодарили 59 раз в 57 сообщениях Продукты Qt Платформы
Решил это, просто вызвав "setFileMode(QFileDialog:irectory)" в диалоговое окно.
Проблема в том, что теперь диалог отличается от того, если бы я использовал статическую функцию "QFileDialog::getOpenFileName". Он не выглядит родным и не переведен.
Новичок
Дата регистрации Июнь 2008 г. Сообщений: 35 Благодарностей 5 благодарностей: 3 раза в 2 сообщениях Продукты Qt Платформы
Надеюсь, будет полезно.
Это код, который я использую для фильтрации JPG и установки пути @ a Label:
Опытный пользователь
Дата регистрации Январь 2006 г. Местоположение Sta. Eugènia de Berga (Vic - Barcelona - Spain) Сообщений: 869 Спасибо 70 Поблагодарили 59 раз в 57 сообщениях Продукты Qt Платформы
У меня еще есть проблема. Теперь диалоговое окно позволяло мне выбирать только каталоги.
Новичок
Дата регистрации Декабрь 2018 г. Сообщений 1 Продукты Qt Платформы
Это не работает для меня. Я могу только выбирать файлы. Невозможно выбрать каталог, не открывая его. Вопрос заключался в том, как выбрать файл или каталог. Это выбирает только файлы.
Гуру
Дата регистрации: январь 2008 г. Местоположение Аламеда, Калифорния, США Сообщений: 5094. Спасибо: 289. Поблагодарили: 842 раз в 829 сообщениях: Продукты Qt Платформы
Если вы используете статические методы QFileDialog, вы вызываете QFileDialog::getExistingDirectory() только для выбора каталогов и QFileDialog::getOpenFileName() только для файлов. Если вы используете нестатический метод (то есть через QFileDialog::exec()), то вы устанавливаете опцию QFileDialog::ShowDirsOnly и используете режим файла QFileDialog::Directory.
Исходному сообщению 13 лет, в течение Qt 3 или Qt 4 дней. Qt — это три основные версии после этого.
В этой главе мы узнаем, как использовать диалоги по умолчанию, позволяющие пользователю выбирать входные и выходные файлы.
Выбор входного файла
При нажатии кнопки рядом со строкой ввода входного файла мы хотим, чтобы программа показывала диалоговое окно выбора файла, чтобы пользователь мог выбрать входной файл.
Первый шаг — создать функцию обратного вызова:
Затем мы подключаем его к событию нажатия кнопки:
Теперь мы можем создать диалог внутри обратного вызова, который будет представлен пользователю при нажатии кнопки inputFileButton:
В качестве аргументов мы передаем родительский виджет (окно), заголовок, который появится в строке заголовка диалогового окна, текущий каталог и фильтр, который ограничивает поддерживаемые файлы файлами *.kicad_pcb. После закрытия диалогового окна функция вернет путь к выбранному файлу, а также фильтр, соответствующий этому файлу.
Если пользователь отменит диалоговое окно, будет возвращена пустая строка. Мы должны проверить это, чтобы отбросить этот ввод. Как только мы узнаем, что путь к файлу не пуст, мы помещаем его в inputFileLineEdit:
Выбор выходного файла
Когда пользователь нажимает кнопку "Экспорт", должно появиться диалоговое окно, позволяющее ему выбрать выходной файл. Для этого мы снова создадим функцию обратного вызова, связанную с exportButton.
В рамках этого обратного вызова мы будем использовать другое диалоговое окно по умолчанию, позволяющее выбрать выходной файл:
Мы добавим еще одну проверку, чтобы убедиться, что файл имеет правильное расширение:
Дополнительно: диалоговое окно подтверждения перезаписи
Выбор выходного файла автоматически предоставит нам диалоговое окно подтверждения, если выбранный файл уже существует. С другой стороны, кнопка сохранения, которая по умолчанию выполняет перезапись файлов, не имеет такого красивого диалогового окна, чтобы предотвратить ошибочную перезапись файлов.
В этой статье мы покажем, как выбрать и открыть файл на компьютере в приложении виджета Qt на C++.
Поэтому, когда вы работаете с различными программами для обработки текстов, всегда есть возможность выбрать файл. Обычно имеется элемент «Открыть», при выборе которого открывается диалоговое окно файла, позволяющее выбрать файл в вашей операционной системе.
В этой программе мы создаем виджет Qt, который содержит кнопку "Открыть файл".
Это показано ниже.
Таким образом, вы можете видеть кнопку "Открыть файл" в правой части приложения. При нажатии этой кнопки открывается стандартное диалоговое окно файла, в котором можно выбрать и открыть файл.
После того, как файл выбран, его содержимое можно прочитать, а файл можно изменить и сохранить, как и в любом текстовом редакторе.
Итак, первое, что вам нужно сделать, это создать приложение виджета Qt.
В этом приложении виджета вам нужно будет разместить 2 элемента: текстовое редактирование и кнопку.
Мы помечаем кнопку "Открыть файл", поскольку она функционирует как кнопка "Открыть файл".
Мы меняем имя объекта на "SelectFileButton", чтобы сделать его более информативным.
Теперь мы переходим к сути нашего кода, находящегося в файле 'widget.cpp'.
В этот файл 'widget.cpp' мы помещаем следующее содержимое, показанное ниже.
Чтобы открыть файл на вашем компьютере, нам нужно включить несколько классов.
Нам нужен класс QFile для работы с файлами на вашем компьютере. Это позволяет нам делать такие вещи, как открытие и сохранение файлов.
Нам нужен класс QFileDialog, чтобы диалоговое окно файла открывалось, когда мы нажимаем кнопку «Открыть файл» в нашей программе. Это позволяет нам искать на нашем компьютере существующий файл.
Класс QTextStream позволяет нам брать содержимое из файлового объекта и записывать его в элемент textEdit нашей программы, чтобы мы могли читать и/или изменять его содержимое.
Итак, мы создаем функцию void Widget::on_SelectFileButton_clicked(), которая выполняется при нажатии кнопки "Открыть файл".
В рамках этой функции мы делаем несколько вещей.
Мы создаем переменную типа String с именем fileContent. В эту переменную мы будем сохранять содержимое выбранного нами файла.
Далее мы создаем еще одну переменную, имя файла, в которой хранится выбранный нами файл.
Нам не нужны пустые или пустые имена файлов. Поэтому проверяем, не пусто ли имя файла. Если это так, программа не продолжается.
Затем мы хотим проверить, успешно ли открывается файл при доступе к нему.
Мы ссылаемся на файл через строку QFile file(filename);
Переменная файла теперь ссылается на файл, который мы выбрали в диалоговом окне файла.
Теперь мы используем оператор if, чтобы проверить, не открывается ли файл успешно. У нас есть несколько операторов ИЛИ, потому что файл может находиться в нескольких разных режимах, таких как ReadWrite или Text.
Если файл не открывается, программа не продолжает работу.
Далее мы создаем объект QTextStream с именем in, который позволяет нам читать содержимое файла.
&file относится к адресу или расположению файла, в который программа затем записывает содержимое элемента textEdit.
Затем мы читаем содержимое файла и записываем его содержимое в элемент textEdit через строку fileContent= in.readAll();
Затем мы закрываем файл, что следует сделать сейчас, когда мы закончили чтение из него.
Затем мы очищаем элемент textEdit от любого содержимого, которое может быть в нем, и записываем содержимое выбранного файла в элемент textEdit с помощью функции setPlainText(), передавая переменную fileContent в качестве ее параметра. .
Вот что мы можем сделать для выбора и открытия простого текстового файла.
Обратите внимание, что мы записываем содержимое файла в элемент textEdit с помощью функции setPlainText(). Это справедливо для текстовых редакторов. Если вам нужен более продвинутый редактор, вы не должны использовать функцию setPlainText(). Вам нужно будет посмотреть, какая функция лучше всего подходит для типа файла, с которым вы работаете.
Для автоматизации файловых диалогов на уровне объекта Squish for Qt требует, чтобы файловые диалоги были основаны на самом Qt.
Qt 4.x во многих случаях позволяет использовать диалоги на основе Qt.
От Qt 5.3 до Qt 5.6 в большинстве случаев нельзя принудительно вызывать диалоги на основе Qt.
Qt 5.7 снова позволяет это, а Squish 6.2 использует это преимущество.
Разработчики приложений Qt могут явно запрашивать файловые диалоги на основе Qt посредством изменений в исходном коде приложений.
При записи диалоговых окон собственных файлов Windows Squish записывает взаимодействие с собственными элементами управления графического интерфейса Windows, но при попытке доступа к этим объектам графического интерфейса при воспроизведении появляются такие сообщения:
Диалоги в приложениях Qt¶
Приложения Qt, работающие в Windows, по умолчанию используют собственные файловые диалоги Windows. Собственные диалоговые окна файлов Windows выглядят следующим образом:
Qt от 4.x до 5.2 (вкл.) и Qt 5.7 и выше¶
Squish может попытаться принудительно использовать диалоги Qt вместо собственных, и Squish делает это по умолчанию.
Если по какой-то причине вы хотите вместо этого видеть собственные диалоговые окна, вы можете отредактировать запись SQUISHDIR/etc/qtwrapper.ini для UseNativeDialogs и установить для нее значение 1.
От Qt 5.3 до Qt 5.6¶
Qt 5.3–Qt 5.6 не позволяют Squish отключать нативные диалоги, что имеет ряд недостатков:
Тестовые сценарии больше не являются кроссплатформенными, поскольку автоматические объекты внутри файлового диалога различаются в зависимости от платформы (Windows).
Пользователям могут потребоваться дополнительные лицензии для встроенного инструментария (Mac, Windows).
В случае Linux/X11 с диалоговым окном файла Gtk+/Gnome Squish вообще ничего не записывает.
Решения¶
Это решение не работает с Qt 5.5.1 из-за ошибки QTBUG-49782 в самом Qt.
Эта же проблема была зарегистрирована (и воспроизведена нами) для Qt 5.9.0 и 5.9.1 в Windows (MSVC14, 64-разрядная версия), но она возникает только иногда. Кажется, это не происходит с Qt 5.9.3.
Это решение не позволяет выполнять точную синхронизацию на основе существования объекта, поэтому необходимо использовать команду snooze() в дополнение к тому, чтобы убедиться, что диалоговое окно действительно уже находится на экране и имеет фокус ввода, когда начинается отправка нажатий клавиш через nativeType. () .
Добавление аргументов командной строки -platformtheme none при запуске AUT может включить диалоговые окна файлов на основе Qt. Например:
Приведенное выше заставит Qt попытаться загрузить подключаемый модуль с именем "none", и поскольку такого подключаемого модуля не существует, он вернется к своим внутренним значениям по умолчанию.
Это решение было успешно протестировано в Linux/X11 и Windows с использованием Qt 5.3.0 и применимо как к традиционному QFileDialog, так и к новому QML/QtQuick2 FileDialog.
Известные проблемы с решением:
Приложение больше не может использовать настройки цвета и шрифта из среды рабочего стола, поскольку они также предоставляются подключаемыми модулями "platformtheme".
Приложениям чистого QtQuick 2 может потребоваться использовать/связать модуль QtWidgets, чтобы вернуться к встроенному диалоговому окну файла Qt, что может быть проблемой для некоторых пользователей.
В macOS: не работает для Qt 5.2.0 в macOS (пока).
В macOS: отсутствие меню — отображается только меню приложения.
Приложение Qt само может запрашивать диалоги на основе Qt с помощью параметра QFileDialog.DontUseNativeDialog, который передается в качестве параметров многим статическим общедоступным функциям QFileDialog, а также с помощью собственного метода получения/установки.
Это можно сделать дополнительно, учитывая наличие переменной среды SQUISH_PREFIX , чтобы ограничить такое поведение случаями, когда приложение запускается с помощью Squish.
Дополнительная информация¶
Мы хотели бы использовать Google Analytics, чтобы лучше понять, как вы используете веб-сайт.
Согласившись с этим, ваши данные об использовании будут храниться в США и обрабатываться компанией Google LLC. Как Google, так и федеральные агентства США могут получить доступ к этим данным и объединить их с любыми другими данными о вас, такими как ваша история поиска, личные учетные записи или любые другие данные, известные Google.
Ознакомьтесь с нашей политикой конфиденциальности, чтобы включить эту функцию и узнать больше, или свяжитесь с нами.
Читайте также: