QListView包装非常慢

时间:2016-01-26 23:06:27

标签: qt qlistview

我希望有一个列表视图,就像Windows中的列表视图一样。文件浏览器:数据显示在列中。所以我使用下面的代码设置QListView。 它看起来完全一样(见图)。

但是一个主要缺点:当调整窗口大小时,包裹非常慢。相反,Window的文件浏览器非常快。

如何加快QListView中的换行?

enter image description here

H:

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
protected:
    void resizeEvent(QResizeEvent *);
private:
    Ui::MainWindow *ui;
};

CPP:

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    QStandardItemModel* m=new QStandardItemModel;
    for (int i=100;i<1000;++i){
        m->insertRow(i-100,new QStandardItem(QString::number(i).repeated(5)+"   "));
    }
    ui->listView->setModel(m);
    ui->listView->setWrapping(true);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::resizeEvent(QResizeEvent *e)
{
    QMainWindow::resizeEvent(e);
    ui->listView->setWrapping(ui->listView->isWrapping());
}

2 个答案:

答案 0 :(得分:1)

我使用Qt 5.5.1在Linux下尝试了你的代码,并且包装快速而即时。 您使用的Qt版本是什么? Qt 4.x在Windows下有一些性能问题。

您可以使用NoAntialias

加快速度
QFont fnt;
fnt.setStyleStrategy(QFont::NoAntialias);
ui->listView->setFont(fnt);

如果您的列表变得越来越大并且您不想插入新数据,那么您将获得糟糕的性能。对于大型数据集,您应该避免使用QStandardItemModel。

答案 1 :(得分:0)

每次调整窗口小部件时,您都不需要设置换行。 Qt在调整大小时正在寻找isWrapping属性,并决定是否需要新的段。您只需在创建窗口小部件时设置flow属性LeftToRightTopToBottom以及isWrapping属性。从resizeEvent中删除代码。 您还可以查看layoutMode属性以获得性能目的。