翻譯|使用教程|編輯:龔雪|2023-03-31 10:39:24.640|閱讀 142 次
概述:Qt提供了許多功能,可以以不同的方式顯示預先和用戶定義的項模型。本文將為大家介紹Qt框架中的一些項目視圖示例,歡迎下載相關組件體驗~
# 界面/圖表報表/文檔/IDE等千款熱門軟控件火熱銷售中 >>
Qt 是目前最先進、最完整的跨平臺C++開發(fā)工具。它不僅完全實現(xiàn)了一次編寫,所有平臺無差別運行,更提供了幾乎所有開發(fā)過程中需要用到的工具。如今,Qt已被運用于超過70個行業(yè)、數(shù)千家企業(yè),支持數(shù)百萬設備及應用。
Qt提供了許多功能,可以以不同的方式顯示預先和用戶定義的項模型,模型/視圖體系結構引入的功能分離為開發(fā)人員定制項的表示提供了更大的靈活性。
Qt技術交流群:166830288 歡迎一起進群討論
本示例演示如何創(chuàng)建可以使用的編輯器。
在、或中編輯數(shù)據(jù)時,編輯器由委托創(chuàng)建和顯示。QItemDelegate是Qt的項目視圖使用的默認委托,它使用QItemEditorFactory為它創(chuàng)建編輯器,QItemEditorFactory提供的唯一實例默認安裝在所有項目委托上。
項目編輯器包含實例的集合,這些實例為特定的QVariant數(shù)據(jù)類型生成編輯器(Qt中的所有模型都將數(shù)據(jù)存儲在QVariant中),編輯器可以是任何Qt或自定義小部件。
在本例中,我們將創(chuàng)建一個編輯器(在ColorListEditor類中實現(xiàn)),它可以編輯QColor數(shù)據(jù)類型并由qitemdelegate使用。為此,我們創(chuàng)建了一個新的QItemEditorCreatorBase,該QItemEditorCreatorBase生成colorlisteditor并將其注冊到一個新工廠,我們將其設置為默認的編輯器項工廠(唯一的工廠實例)。為了測試編輯器,我們實現(xiàn)了Window類,它顯示一個QTableWidget,可以在其中編輯QColors。
窗口類實現(xiàn)
在窗口類中,為顏色編輯器創(chuàng)建項目編輯器基礎,并將其添加到默認工廠。同時還添加了一個QTableWidget,可以在其中測試編輯器,它填充了一些數(shù)據(jù)并顯示在窗口中。
仔細看看構造函數(shù):
Window::Window() { QItemEditorFactory *factory = new QItemEditorFactory; QItemEditorCreatorBase *colorListCreator = new QStandardItemEditorCreator<ColorListEditor>(); factory->registerEditor(QMetaType::QColor, colorListCreator); QItemEditorFactory::setDefaultFactory(factory); createGUI(); }
是一個繼承了的方便類,它的構造函數(shù)接受一個模板類,其實例從createWidget()返回。創(chuàng)建者使用一個構造函數(shù),該構造函數(shù)將QWidget作為惟一參數(shù);模板類必須提供這一點,這樣,就不需要創(chuàng)建QStandardItemEditorCreator的子類。
在設置了新工廠之后,所有標準項目委托都將使用它(也就是,在設置新的默認工廠之前創(chuàng)建的委托)。
createGUI()函數(shù)設置表并用數(shù)據(jù)填充它。
ColorListEditor定義
ColorListEditor繼承了,并讓用戶從彈出列表中選擇一個QColor。
class ColorListEditor : public QComboBox { Q_OBJECT Q_PROPERTY(QColor color READ color WRITE setColor USER true) public: ColorListEditor(QWidget *widget = nullptr); public: QColor color() const; void setColor(const QColor &color); private: void populateList(); };
管理編輯器和模型之間的交互,它從模型中檢索要編輯的數(shù)據(jù),并將來自編輯器的數(shù)據(jù)存儲在模型中。編輯器編輯的數(shù)據(jù)存儲在編輯器的用戶數(shù)據(jù)屬性中,委托使用Qt的屬性系統(tǒng)按名稱訪問它。我們使用Q_PROPERTY宏聲明用戶數(shù)據(jù)屬性,屬性被設置為具有user關鍵字的用戶類型。
ColorListEditor實現(xiàn)
ColorListEditor的構造函數(shù)簡單地調(diào)用populateList(),稍后我們將討論它,接下來看color()函數(shù):
QColor ColorListEditor::color() const { return qvariant_cast<QColor>(itemData(currentIndex(), Qt::DecorationRole)); }
我們返回在組合框中選擇的數(shù)據(jù),數(shù)據(jù)存儲在Qt::DecorationRole中,然后顏色也顯示在彈出列表中(如上圖所示)。
void ColorListEditor::setColor(const QColor &color) { setCurrentIndex(findData(color, Qt::DecorationRole)); }
findData()函數(shù)搜索組合框中的項目,并返回Qt::Decoration角色中有顏色的項目索引。
void ColorListEditor::populateList() { const QStringList colorNames = QColor::colorNames(); for (int i = 0; i < colorNames.size(); ++i) { QColor color(colorNames[i]); insertItem(i, colorNames[i]); setItemData(i, color, Qt::DecorationRole); } }
Qt通過名稱知道一些預定義的顏色,只需循環(huán)遍歷這些元素,用項填充編輯器。
本站文章除注明轉載外,均為本站原創(chuàng)或翻譯。歡迎任何形式的轉載,但請務必注明出處、不得修改原文相關鏈接,如果存在內(nèi)容上的異議請郵件反饋至chenjj@fc6vip.cn
文章轉載自:慧都網(wǎng)