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文件,這樣前面的一些猜測都可以被驗證是否正確了。