Qt QListView,带有用于查看文件系统的复选框

Qt QListView,带有用于查看文件系统的复选框,qt,checkbox,qlistview,model-view,qtgui,Qt,Checkbox,Qlistview,Model View,Qtgui,有必要在QListView中按给定路径列出带有图标和复选框的目录,然后将标记文件夹的名称传输给程序。对于列表目录,我使用以下代码: #include <QtGui/QApplication> #include <QFileSystemModel> #include <QListView> int main(int argc, char *argv[]) { QApplication a(argc, argv);

有必要在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();
    }
#包括
#包括
#包括
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QFileSystemModel模型;
QListView列表视图;
setModel(&model);
setRootIndex(model.setRootPath(“C:\\ProgramFiles”);
show();
返回a.exec();
}
如何添加复选框并在按下按钮后发送


谢谢。

你所能做的只有几行。您可以从
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"
//main.cpp
#包括
#包括
#包括
#包括
#包括
#包括
类赢:公共QWidget
{
Q_对象
QListView*视图;
QPushButton*按钮;
公众:
Win(QAbstractItemModel*模型、常数QModelIndex和idx):
视图(新建QListView(this)),按钮(新建QPushButton(“列表选择”,this))
{
QGridLayout*lay=新的QGridLayout;
lay->addWidget(视图,0,0,1,2);
lay->addWidget(按钮,1,0);
设置布局(布局);
view->setSelectionMode(QAbstractItemView::MultiSelection);
查看->设置模型(模型);
查看->设置根索引(idx);
连接(按钮、信号(单击())、插槽(显示选择());
}
公众时段:
void showSelection(){
QString-str;
foreach(QModelIndex i,view->selectionModel()->selectedIndex()){
str.append(i.data().toString());
str.append(“\n”);
}
QMessageBox::信息(此“选定项”,str);
}
};
int main(int argc,char*argv[])
{
质量保证申请a(argc、argv);
QFileSystemModel模型;
Win v(&model,model.setRootPath(“/”);
v、 show();
返回a.exec();
}
#包括“main.moc”

+1表示一个!我还将显示代理模型代码。给我几分钟-谢谢你的回复。这几乎是我所需要的,但选择项目需要复选框。