我希望有一个列表视图,就像Windows中的列表视图一样。文件浏览器:数据显示在列中。所以我使用下面的代码设置QListView
。
它看起来完全一样(见图)。
但是一个主要缺点:当调整窗口大小时,包裹非常慢。相反,Window的文件浏览器非常快。
如何加快QListView中的换行?
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());
}
答案 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
属性LeftToRight
或TopToBottom
以及isWrapping
属性。从resizeEvent
中删除代码。
您还可以查看layoutMode
属性以获得性能目的。