Меня удивляет, как часто люди не отвечают на первоначально заданный вопрос.Я постараюсь не делать этого здесь, если смогу.Я сделал домашнее задание по этой проблеме, так как у меня точно такая же проблема.Краткий ответ: вы не можете использовать QFileDialog для надежного вывода списка и выбора узлов в «/ dev».Когда вы устанавливаете бит «QDIR :: System» в фильтре QFileDialog, используя QFileDialog::setFilter(QDIR::System)
, вы ожидаете, что все файлы в / dev будут отображаться, но они этого не делают.По общему признанию, есть больше записей, чем когда это не установлено, но большинство узлов устройства все еще не отображаются.Ясно, что QFileDialog выполняет некоторую дополнительную фильтрацию за кулисами, и что эта фильтрация не может быть отключена каким-либо очевидным способом.
С другой стороны, если вы используете класс QDir с установленным битом фильтра QDir :: System, то фактически все записи / dev появляются в entryList.Например, предполагая, что у вас уже есть QComboBox с именем TTYDevices в вашем пользовательском интерфейсе, попробуйте что-то вроде этого:
DevDir=new QDir("/dev","tty*",QDir::Name,QDir::System);
ui->TTyDevices->addItems(DevDir->entryList());
Затем используйте стандартные сигналы от QComboBox, чтобы обнаружить и действовать при выборе нужного узла устройства.Кстати, ui - это стандартный указатель Qt на экземпляр класса вашего родительского окна, который должен быть установлен в конструкторе Window.Просто убедитесь, что вы не ссылаетесь на него, прежде чем конструктор вызовет ui->setupUi(this)
.Если вы это сделаете, программа завершится сбоем.
Этот прием предоставляет функции, идентичные QFileDialog, с дополнительными функциями, предоставляемыми непосредственным доступом к объекту QDir.Это означает, что вы не можете легко иметь такой же знакомый, унифицированный интерфейс, предоставляемый QFileDialog, но он работает и удивительно легко кодируется.