Как просматривать папки в C ++ или C? - PullRequest
1 голос
/ 12 июля 2011

Я реализую программу на C (также на C ++) для сортировки файлов с использованием потоков, мне нужно реализовать графический интерфейс на C ++ или C, чтобы выбрать файл для сортировки без указания пути через стандарт ввода (эквивалент JFileChooserна Яве).Какие учебники вы рекомендуете?Я читал о Qt, но я не очень знаком с этой IDE.Если бы у вас был какой-либо пример, это мне очень помогло бы.

Ответы [ 6 ]

9 голосов
/ 12 июля 2011

Очень просто с QT:

 void openFile()
  {
    QFileDialog::getOpenFileName( this, tr("Open Document"), QDir::currentPath(), tr("Document files (*.doc *.rtf);;All files (*.*)"), 0, QFileDialog::DontUseNativeDialog );

    QString filename = QFileDialog::getOpenFileName( 
        this, 
        tr("Open Document"), 
        QDir::currentPath(), 
        tr("Document files (*.doc *.rtf);;All files (*.*)") );
    if( !filename.isNull() )
    {
      qDebug( filename.toAscii() );
    }
  }
3 голосов
/ 16 декабря 2014

вам не нужно использовать полный графический интерфейс с основным циклом только для этого. Windows и Unix предлагает вызовы функций, которые отображают необходимые диалоги файлов. В Windows вы бы вызвали GetOpenFileName или GetSaveFileName. Если вам нужен кроссплатформенный способ сделать это, попробуйте крошечные файловые диалоги на sourceforge.

0 голосов
/ 12 июля 2011

Если сортировка - единственное, что делает ваша программа, и если она будет использоваться в среде unix-y, тогда я предлагаю сделать программу инструментом командной строки и создать оболочку GUI на некотором языке сценариев для вызова этой программы. Это будет проще для кода, а также более полезным (вы получите два инструмента по цене половины инструмента), это также облегчит портирование в другие среды графического интерфейса, а также облегчит распространение.

Этот шеллскрипт открывает диалог выбора файлов и запускает вашу программу (с творческим названием yoursort) ( не тестировался и Я не привык писать скрипты оболочки, я предпочитаю другие языки скриптов, я уверен другие участники стекового потока могут найти множество вещей для улучшения):

    #!/bin/sh

    FILE=`zenity --file-selection --title="Choose file to sort"`

    if [ $? -eq 0 ]; then
        yoursort -f "$FILE"
    fi

Zenity - это инструмент командной строки для создания простых диалогов GUI, он также включает в себя диалог прогресса.

Если вы хотите создать более продвинутый графический интерфейс, используйте язык сценариев, такой как tcl, Python или Ruby.

Инструментарий Ruby GUI Shoes чрезвычайно прост в освоении, он имеет механизм разметки на основе потоков (вроде веб-страницы). Вы можете делать большинство вещей, которые вы можете делать с QT (что кажется предпочтительным в других ответах), или, по крайней мере, все, что вам нужно для 99% ваших приложений. Поскольку обувь построена как слой на GTK, она так же переносима, как и GTK, и вы можете расширить ее, выполнив большую часть тяжелой работы, уже запланированной для вас (то есть вам не нужно иметь дело непосредственно с X-серверами, рендерингом шрифтов или другими утомительными и тому подобное).


Остальная часть этого поста является своего рода темой, но, поскольку кто-то понизил меня, потому что я предложил использовать язык сценариев, я чувствую, что должен мотивировать, почему кодирование GUI в сыром C или C ++ почти всегда плохая идея (если только вы не делаете это с единственной целью научиться это делать).

Использование необработанного C или C ++ для создания GUI предназначено для людей, которым нравится вбивать гвозди по всему телу, особенно болезненно в тот день, когда вам приходится менять внешний вид приложения или добавлять новые функции. Используйте некоторый язык сценариев, либо как встроенный язык сценариев в вашем приложении [tcl, lua, guile и pike, который легко интегрировать в ваше приложение], либо создайте оболочку GUI вокруг инструмента командной строки, который вы создаете.

Существует также множество инструментариев GUI (например, GTK, QT), которые могут загружать GUI: из каких-либо файлов описания GUI, таких как XML-файл. Эти файлы чертовски проще в написании и изменении (или создании и изменении с помощью GUI Builder), чем в написании и редактировании сырых C или C ++.

Если важна скорость и, в крайнем случае, , используйте некоторый язык высокого уровня для генерации кода на C или C ++ для вашего графического интерфейса, он гораздо более гибок для изменений, чем написание необработанного кода. Но если вы сделаете это, вам все равно придется выполнить большую часть мучительной работы для первой версии графического интерфейса, как если бы вы написали ее на необработанном языке C или C ++. Такие языки, как TCL, M4 и Ruby, превосходны в этом виде метапрограммирования. Еще одно последнее средство - это написать свой собственный загрузчик графического интерфейса, тогда вы можете сделать синтаксис файла описания графического интерфейса более специализированным, и это сделает его быстрее, чем загрузчики графического интерфейса, которые уже готовы с инструментарием графического интерфейса пользователя (и когда-нибудь предоставим виджеты пользовательского интерфейса, которые не поддерживают готовые загрузчики графического интерфейса), и, опять же, это даст вам больше гибкости для изменения графического интерфейса пользователя, чем для его кодирования в необработанном C или C ++.

PS. QT использует препроцессор, чтобы облегчить боль при программировании с графическим интерфейсом на C ++, но он все еще находится на очень низком уровне и по-прежнему излишне болезненен для использования.

0 голосов
/ 12 июля 2011

Существует также QFileSystemModel, который может быть сопоставлен с элементом QTreeView и будет делать много вещей, которые вам нужны, благодаря его внутренней реализации. Он многопоточный, позволяет сортировать и имеет много других полезных функций. ищите документацию здесь

0 голосов
/ 12 июля 2011

Да, вы можете использовать QT .Вы можете использовать QDir класс QT для просмотра папок и QFile для обработки файлов.

См. Документация QT для примеров.У них их много.

0 голосов
/ 12 июля 2011

У вас есть две опции:

  1. Если вы хотите использовать QT, вам следует использовать QFileDialog и установить Опции для QFileDialog:: ShowDirsOnly.

  2. Если вы хотите кодировать только для Windows, вы можете использовать FolderBrowserDialog класс, который является частью Win32.

...