【问题标题】:QListView with checkboxes for viewing of filesystem带有用于查看文件系统的复选框的 QListView
【发布时间】:2012-06-30 00:49:31
【问题描述】:

有必要在 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();
    }

如何添加复选框并在按下按钮后发送?

谢谢。

【问题讨论】:

标签: qt checkbox qlistview model-view qtgui


【解决方案1】:

只有几行代码,您无法做到。您可以从 QFileSystemModel 派生并添加一个复选框列,或者创建一个代理模型来执行相同的操作。

请注意,您可以使用内置的选择机制来 Ctrl-click/⌘-click 将选择扩展到多个项目:

//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"

【讨论】:

  • 我还将展示代理模型代码。给我几分钟 - cпасибо
  • 感谢您的回复。这几乎是我需要的,但是选择复选框需要的项目。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-11-12
  • 2016-06-22
  • 2022-08-10
  • 2015-10-07
  • 1970-01-01
相关资源
最近更新 更多