ps:写了点垃圾(哈哈哈)
它继承自QDialog
这是Windows自己的文件夹
这是两者的对比图:
通过看QFileDialog的源码,来分析它是怎么实现这样的效果的。
源码组成:
qfiledialog.h
qfiledialog_p.h(它是实现也在qfiledialog.cpp中)
qfiledialog.cpp
qfiledialog.ui
(1)
左侧感觉是用QFileDialogTreeView实现的
(2)
左侧感觉是用QFileDialogListView实现的(可能吧,我的猜测)
(3)
这是用什么实现的呢?(不知道)
(4)
这个做的还挺好的
void QFileDialogComboBox::paintEvent(QPaintEvent *)
{QStylePainter painter(this);painter.setPen(palette().color(QPalette::Text));// draw the combobox frame, focusrect and selected etc.QStyleOptionComboBox opt;initStyleOption(&opt);QRect editRect = style()->subControlRect(QStyle::CC_ComboBox, &opt,QStyle::SC_ComboBoxEditField, this);int size = editRect.width() - opt.iconSize.width() - 4;opt.currentText = opt.fontMetrics.elidedText(opt.currentText, Qt::ElideMiddle, size);painter.drawComplexControl(QStyle::CC_ComboBox, opt);// draw the icon and textpainter.drawControl(QStyle::CE_ComboBoxLabel, opt);
}
(5)
使用到的Model:
QAbstractProxyModel *proxyModel;
QFileSystemModel *model;
(6)
发现了ui文件,这样前面的一些猜测都可以被验证是否正确了。