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