DListView 一个用于展示一列数据的控件.
DListView 类似与 QListView 属于 Qt's model/view framework 的一个类,常被用来展示一列数据,当数据较多时可以滚动控件以显示跟多内容。 但与 QListView 也有不同之处,DListView 提供了顶部控件和底部控件,它们始终显示在listview中,不会因为滚动而不可见,另外还提供了方便编辑 数据的方法,如:addItem , addItems , insertItem , takeItem , removeItem , 以及一些开发中常用的信号。
DListView 示例
通过简单的示例来学习如何使用 DListView
项目目录结构在同一目录下
CMakeLists.txt
cmake_minimum_required(VERSION 3.1.0) # 指定cmake最低版本
project(example1 VERSION 1.0.0 LANGUAGES CXX) # 指定项目名称, 版本, 语言 cxx就是c++
set(CMAKE_CXX_STANDARD 11) # 指定c++标准
set(CMAKE_CXX_STANDARD_REQUIRED ON) # 指定c++标准要求,至少为11以上
set(target example1) # 指定目标名称
set(CMAKE_AUTOMOC ON) # support qt moc # 支持qt moc
set(CMAKE_AUTORCC ON) # support qt resource file # 支持qt资源文件
set(CMAKE_AUTOUIC ON) # support qt ui file # 支持qt ui文件(非必须)
set(CMAKE_EXPORT_COMPILE_COMMANDS ON) # support clangd 支持 clangd
if (CMAKE_VERSION VERSION_LESS "3.7.0") # 如果cmake版本小于3.7.0
set(CMAKE_INCLUDE_CURRENT_DIR ON) # 设置包含当前目录
endif()
find_package(Qt5 COMPONENTS Widgets REQUIRED) # 寻找Qt5组件Widgets
find_package(Qt5 COMPONENTS Gui REQUIRED) # 寻找Qt5组件Gui
find_package(Dtk COMPONENTS Widget REQUIRED) # 寻找Dtk组件Widget
find_package(Dtk COMPONENTS Core REQUIRED) # 寻找Dtk组件Core
find_package(Dtk COMPONENTS Gui) # 寻找Dtk组件Gui
add_executable(example1 # 添加可执行文件
main.cpp
)
target_link_libraries(example1 PRIVATE
Qt5::Widgets
Qt5::Gui
${DtkGui_LIBRARIES}
${DtkCore_LIBRARIES}
${DtkWidget_LIBRARIES}
) # 链接库
main.cpp
#include <DApplication>
#include <DListView>
#include <DMainWindow>
#include <DWidget>
#include <DStyle>
#include <DHeaderView>
#include <QStyle>
#include <QLabel>
DWIDGET_USE_NAMESPACE
int main(int argc, char *argv[]){
QStandardItemModel *model = new QStandardItemModel();
auto AddItems = [&win, &model](QIcon icon, QString name){
item->setEditable(false);
model->appendRow(item);
return item;
};
auto item0 = AddItems(win.style()->standardIcon(DStyle::SP_ComputerIcon), "电脑");
auto item1 = AddItems(win.style()->standardIcon(DStyle::SP_DirIcon), "文件");
auto item2 = AddItems(win.style()->standardIcon(DStyle::SP_DriveCDIcon), "媒体");
auto item3 = AddItems(win.style()->standardIcon(DStyle::SP_TrashIcon), "回收站");
DStyle *style = qobject_cast<DStyle *>(win.style());
action->setIcon(style->
standardIcon(DStyle::SP_IndicatorChecked));
item1->setActionList(Qt::Edge::RightEdge, {action});
DListView *listview = new DListView();
listview->setModel(model);
listview->setBackgroundType(DStyledItemDelegate::BackgroundType::RoundedBackground);
QStandardItemModel *hmodel = new QStandardItemModel();
hmodel->setHorizontalHeaderLabels({"功能", "最后打开时间"});
DHeaderView *headerview = new DHeaderView(Qt::Horizontal);
headerview->setModel(hmodel);
headerview->setMaximumHeight(36);
headerview->setSectionResizeMode(DHeaderView::Stretch);
listview->addHeaderWidget(headerview);
QLabel *label = new QLabel("共四项内容");
label->setAlignment(Qt::AlignCenter);
listview->addFooterWidget(label);
win.setCentralWidget(listview);
win.resize(500,350);
win.show();
return app.exec();
}
The DMainWindow class provides a main application window.
Definition dmainwindow.h:20
上述代码中 setBackgroundType 中的参数为枚举类型,其他的枚举值为 BackgroundType_Mask, ClipCornerBackground, NoBackground, NoNormalState, 可以更改代码中枚举值查看效果
依次使用 如下命令 编译和运行程序
cmake -B build
cmake --build build
./build/example1
程序运行效果如下:
dlistview_example