界面開發框架Qt新手入門教程 – 顏色編輯器示例
Qt 是目前最先進、最完整的跨平臺C 開發工具。它不僅完全實現了一次編寫,所有平臺無差別運行,更提供了幾乎所有開發過程中需要用到的工具。如今,Qt已被運用于超過70個行業、數千家企業,支持數百萬設備及應用。
Qt提供了許多功能,可以以不同的方式顯示預先和用戶定義的項模型,模型/視圖體系結構引入的功能分離為開發人員定制項的表示提供了更大的靈活性。
QtitanRibbon官方最新版免費下載試用,歷史版本下載,在線文檔和幫助文件下載-慧都網
顏色編輯器示例
本示例演示如何創建QItemDelegate可以使用的編輯器。
在QListView、QTableView或QTreeView中編輯數據時,編輯器由委托創建和顯示。QItemDelegate是Qt的項目視圖使用的默認委托,它使用QItemEditorFactory為它創建編輯器,QItemEditorFactory提供的唯一實例默認安裝在所有項目委托上。
項目編輯器包含QItemEditorCreatorBase實例的集合,這些實例為特定的QVariant數據類型生成編輯器(Qt中的所有模型都將數據存儲在QVariant中),編輯器可以是任何Qt或自定義小部件。
在本例中,我們將創建一個編輯器(在ColorListEditor類中實現),它可以編輯QColor數據類型并由qitemdelegate使用。為此,我們創建了一個新的QItemEditorCreatorBase,該QItemEditorCreatorBase生成colorlisteditor并將其注冊到一個新工廠,我們將其設置為默認的編輯器項工廠(唯一的工廠實例)。為了測試編輯器,我們實現了Window類,它顯示一個QTableWidget,可以在其中編輯QColors。
窗口類實現
在窗口類中,為顏色編輯器創建項目編輯器基礎,并將其添加到默認工廠。同時還添加了一個QTableWidget,可以在其中測試編輯器,它填充了一些數據并顯示在窗口中。
仔細看看構造函數:
Window::Window(){QItemEditorFactory *factory = new QItemEditorFactory;QItemEditorCreatorBase *colorListCreator =new QStandardItemEditorCreator<ColorListEditor>();factory->registerEditor(QMetaType::QColor, colorListCreator);QItemEditorFactory::setDefaultFactory(factory);createGUI();}
QStandardItemEditorCreator是一個繼承了QItemEditorCreatorBase的方便類,它的構造函數接受一個模板類,其實例從createWidget()返回。創建者使用一個構造函數,該構造函數將QWidget作為惟一參數;模板類必須提供這一點,這樣,就不需要創建QStandardItemEditorCreator的子類。
在設置了新工廠之后,所有標準項目委托都將使用它(也就是,在設置新的默認工廠之前創建的委托)。
createGUI()函數設置表并用數據填充它。
ColorListEditor定義
ColorListEditor繼承了QComboBox,并讓用戶從彈出列表中選擇一個QColor。
class ColorListEditor : public QComboBox{Q_OBJECTQ_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();};
QItemDelegate 管理編輯器和模型之間的交互,它從模型中檢索要編輯的數據,并將來自編輯器的數據存儲在模型中。編輯器編輯的數據存儲在編輯器的用戶數據屬性中,委托使用Qt的屬性系統按名稱訪問它。我們使用Q_PROPERTY宏聲明用戶數據屬性,屬性被設置為具有user關鍵字的用戶類型。
ColorListEditor實現
ColorListEditor的構造函數簡單地調用populateList(),稍后我們將討論它,接下來看color()函數:
QColor ColorListEditor::color() const{return qvariant_cast<QColor>(itemData(currentIndex(), Qt::DecorationRole));}
我們返回在組合框中選擇的數據,數據存儲在Qt::DecorationRole中,然后顏色也顯示在彈出列表中(如上圖所示)。
void ColorListEditor::setColor(const QColor &color){setCurrentIndex(findData(color, Qt::DecorationRole));}
findData()函數搜索組合框中的項目,并返回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通過名稱知道一些預定義的顏色,只需循環遍歷這些元素,用項填充編輯器。
Qt Widget組件推薦
- QtitanRibbon – Ribbon UI組件:是一款遵循Microsoft Ribbon UI Paradigm for Qt技術的Ribbon UI組件,QtitanRibbon致力于為Windows、Linux和Mac OS X提供功能完整的Ribbon組件。
- QtitanChart – Qt類圖表組件:是一個C 庫,代表一組控件,這些控件使您可以快速地為應用程序提供漂亮而豐富的圖表。
- QtitanDataGrid – Qt網格組件:提供了一套完整的標準 QTableView 函數和傳統組件無法實現的獨特功能。使您能夠將不同來源的各類數據加載到一個快速、靈活且功能強大的可編輯網格中,支持排序、分組、報告、創建帶狀列、拖放按鈕和許多其他方便的功能。
- QtitanDocking:允許您像 Visual Studio 一樣為您的偉大應用程序配備可??棵姘搴涂赏?抗ぞ邫?。黑色、白色、藍色調色板完全支持 Visual Studio 2019 主題!