2012-06-28 4 views
3

Необходимо указать каталоги по указанному пути в значках и флажках QListView, а затем передать в программу имена отмеченных папок. Для справочников списков я использую код:QListView с флажками для просмотра файловой системы

#include <QtGui/QApplication> 
#include <QFileSystemModel> 
#include <QListView> 


    int main(int argc, char *argv[]) 
    { 
     QApplication a(argc, argv); 

     QFileSystemModel model; 

     QListView listView; 
     listView.setModel(&model); 
     listView.setRootIndex(model.setRootPath("C:\\Program Files")); 
     listView.show(); 

     return a.exec(); 
    } 

Как добавить флажки и передать их после нажатия кнопки?

Спасибо.

+0

+1 для [sscce] (HTTP: // sscce. орг)! –

ответ

1

Нет ничего, что вы могли бы сделать, если бы это было всего лишь несколько строк. Вы можете либо получить от QFileSystemModel и добавить столбец флажка, либо создать прокси-модель, которая будет делать то же самое.

Обратите внимание, что вы можете использовать встроенный механизм выбора для Ctrl щелкните/⌘ кнопкой мыши, чтобы расширить выбор для нескольких элементов:

//main.cpp 
#include <QApplication> 
#include <QFileSystemModel> 
#include <QGridLayout> 
#include <QListView> 
#include <QPushButton> 
#include <QMessageBox> 

class Win : public QWidget 
{ 
    Q_OBJECT 
    QListView * view; 
    QPushButton * button; 
public: 
    Win(QAbstractItemModel * model, const QModelIndex & idx) : 
     view(new QListView(this)), button(new QPushButton("List Selection", this)) 
    { 
     QGridLayout * lay = new QGridLayout; 
     lay->addWidget(view, 0, 0, 1, 2); 
     lay->addWidget(button, 1, 0); 
     setLayout(lay); 
     view->setSelectionMode(QAbstractItemView::MultiSelection); 
     view->setModel(model); 
     view->setRootIndex(idx); 
     connect(button, SIGNAL(clicked()), SLOT(showSelection())); 
    } 
public slots: 
    void showSelection() { 
     QString str; 
     foreach (QModelIndex i, view->selectionModel()->selectedIndexes()) { 
      str.append(i.data().toString()); 
      str.append("\n"); 
     } 
     QMessageBox::information(this, "Selected items", str); 
    } 
}; 

int main(int argc, char *argv[]) 
{ 
    QApplication a(argc, argv); 
    QFileSystemModel model; 
    Win v(&model, model.setRootPath("/")); 
    v.show(); 
    return a.exec(); 
} 

#include "main.moc" 
+0

Вы можете детализировать? –

+0

Я также покажу код прокси-модели. Дайте мне несколько минут - cпасибо –

+0

Благодарим вас за ответ. Это почти то, что мне нужно, но выбор элементов, необходимых для флажков. –

 Смежные вопросы

  • Нет связанных вопросов^_^