在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線(xiàn)課程
  • 觀(guān)看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Qt自定義委托--實(shí)現(xiàn)批量升級(jí)UI

Rice嵌入式開(kāi)發(fā)技術(shù)分享 ? 來(lái)源:Rice 嵌入式開(kāi)發(fā)技術(shù)分享 ? 作者:Rice 嵌入式開(kāi)發(fā)技 ? 2022-10-31 12:27 ? 次閱讀

概要

使用Qt編寫(xiě)上位機(jī)是一個(gè)非常不錯(cuò)的選擇,簡(jiǎn)單說(shuō)一下作者的看法:

①Q(mào)t采用的是C++,所以在某種程度上與嵌入式設(shè)備數(shù)據(jù)類(lèi)型兼容,所以嵌入式設(shè)備與上位機(jī)間的協(xié)議定義數(shù)據(jù)結(jié)構(gòu)等都可以相互套用,

②Qt是跨平臺(tái)的,所以代碼開(kāi)發(fā)一次,多平臺(tái)運(yùn)行。

③Qt學(xué)習(xí)成本低,網(wǎng)上資料很多,基本你遇到的問(wèn)題,網(wǎng)上都能找到。

對(duì)于嵌入式開(kāi)發(fā)者來(lái)說(shuō),會(huì)寫(xiě)上位機(jī)可以提高開(kāi)發(fā)效率,比如可以開(kāi)發(fā)抓包工具,日志數(shù)據(jù)分析,升級(jí)(網(wǎng)絡(luò)升級(jí),串口升級(jí)等)

說(shuō)到升級(jí),那么就有些場(chǎng)景,比如批量升級(jí),某臺(tái)升級(jí)等需求。有這些需求那么就要有對(duì)應(yīng)的UI呈現(xiàn)給用戶(hù)。所以Qt的自定義委托在這種場(chǎng)景顯的尤為重要。

32d2d19a-580b-11ed-b468-dac502259ad0.png

Qt模型視圖中的委托

Qt模型視圖采用類(lèi)MVC框架,那什么是MVC框架?

M--模型:負(fù)責(zé)組織數(shù)據(jù)

V--試圖:負(fù)責(zé)顯示數(shù)據(jù)

C--控制:負(fù)責(zé)用戶(hù)輸入

3304feb8-580b-11ed-b468-dac502259ad0.png

Qt模型視圖設(shè)計(jì):①視圖中集成了處理用戶(hù)輸入的功能,②視圖將用戶(hù)輸入作為內(nèi)部獨(dú)立的子功能實(shí)現(xiàn)

332c57ec-580b-11ed-b468-dac502259ad0.png

模型視圖中的委托:①委托是視圖中處理用戶(hù)輸入的部件。②視圖可以設(shè)置委托對(duì)象用于用戶(hù)輸入。③委托對(duì)象負(fù)責(zé)創(chuàng)建和顯示用戶(hù)輸入上下文。

Qt 自定義委托--實(shí)現(xiàn)批量升級(jí)UI

準(zhǔn)備工作:下載Qt工具,然后創(chuàng)建一個(gè)基類(lèi)為QMainWindow的工程,并且?guī)i的。

設(shè)計(jì)一個(gè)ui,一個(gè)CheckBox控件和TableView控件

33432710-580b-11ed-b468-dac502259ad0.png

自定義表格中單選框CheckBox委托 -- 創(chuàng)建QRiceButtonDelegate類(lèi)繼承QItemDelegate

重寫(xiě)paint方法和editorEvent方法,其中paint用于繪制,editorEvent用于處理用戶(hù)輸入

單選框其實(shí)使用按鈕項(xiàng)樣式(QStyleOptionButton)繪制。

QRiceButtonDelegate源文件

#include"qricecheckboxdelegate.h"

#include
#include
#include
#include
#include

QRiceCheckBoxDelegate::QRiceCheckBoxDelegate(QObject*parent)
:QItemDelegate(parent)
{

}

QRiceCheckBoxDelegate::~QRiceCheckBoxDelegate()
{

}

voidQRiceCheckBoxDelegate::paint(QPainter*painter,constQStyleOptionViewItem&option,constQModelIndex&index)const
{
if(QVariant::Bool==index.data(Qt::DisplayRole).type())//如果數(shù)據(jù)類(lèi)型為bool型,才繪制單選寬
{
QStyleOptionButtoncheckBox;
checkBox.state=index.data().toBool()?QStyle::State_On:QStyle::State_Off;//繪制后的默認(rèn)狀態(tài)
checkBox.state|=QStyle::State_Enabled;
checkBox.rect=option.rect;
checkBox.rect.setX(option.rect.x()+option.rect.width()/2-6);//設(shè)置在表格中的顯示位置

QApplication::style()->drawControl(QStyle::CE_CheckBox,&checkBox,painter);//繪制
}
else
{
QItemDelegate::paint(painter,option,index);
}
}

boolQRiceCheckBoxDelegate::editorEvent(QEvent*event,QAbstractItemModel*model,constQStyleOptionViewItem&option,constQModelIndex&index)
{
boolret=true;
if(QVariant::Bool==index.data().type())
{
QMouseEvent*mouse=dynamic_cast(event);

if((NULL!=mouse)&&(QEvent::MouseButtonPress==mouse->type())&&(option.rect.contains(mouse->pos())))
{
model->setData(index,!index.data().toBool(),Qt::DisplayRole);//更新模型數(shù)據(jù)
}
}
else
{
ret=QItemDelegate::editorEvent(event,model,option,index);
}

returnret;
}
*>

QRiceButtonDelegate頭文件

#ifndefQRICECHECKBOXDELEGATE_H
#defineQRICECHECKBOXDELEGATE_H

#include

classQRiceCheckBoxDelegate:publicQItemDelegate
{
Q_OBJECT
public:
explicitQRiceCheckBoxDelegate(QObject*parent=nullptr);
~QRiceCheckBoxDelegate();

voidpaint(QPainter*painter,constQStyleOptionViewItem&option,constQModelIndex&index)const;
booleditorEvent(QEvent*event,QAbstractItemModel*model,constQStyleOptionViewItem&option,constQModelIndex&index);
signals:

};

#endif//QRICECHECKBOXDELEGATE_H

自定義表格中進(jìn)度條ProgressBar委托 -- 創(chuàng)建QRiceProgressBarDelegate類(lèi)繼承QItemDelegate

重寫(xiě)paint方法和editorEvent方法,其中paint用于繪制,editorEvent用于處理用戶(hù)輸入

進(jìn)度條其實(shí)采用進(jìn)度條項(xiàng)樣式(QStyleOptionProgressBar)繪制。

QRiceProgressBarDelegate源文件

voidQRiceProgressBarDelegate::paint(QPainter*painter,constQStyleOptionViewItem&option,constQModelIndex&index)const
{
intprogress=index.data(Qt::DisplayRole).toInt();
QStyleOptionProgressBarprogressBar;

progressBar.minimum=0;//設(shè)置進(jìn)度條最小值
progressBar.maximum=100;//設(shè)置進(jìn)度條最大值
progressBar.progress=progress;//設(shè)置繪制后的數(shù)值
progressBar.rect=option.rect.adjusted(4,4,-4,-4);//設(shè)置進(jìn)度條的大小
progressBar.textVisible=true;//設(shè)置進(jìn)度條顯示數(shù)值
progressBar.textAlignment=Qt::AlignCenter;//設(shè)置進(jìn)度條數(shù)值顯示位置
progressBar.text=QString("%1%").arg(progress);//設(shè)置進(jìn)度條數(shù)值顯示

QApplication::style()->drawControl(QStyle::CE_ProgressBar,&progressBar,painter);//繪制
}

boolQRiceProgressBarDelegate::editorEvent(QEvent*event,QAbstractItemModel*model,constQStyleOptionViewItem&option,constQModelIndex&index)
{
boolret=true;

if(QEvent::MouseButtonDblClick!=event->type())
{
ret=QItemDelegate::editorEvent(event,model,option,index);
}

returnret;
}

QRiceProgressBarDelegate頭文件

#ifndefQRICEPROGRESSBARDELEGATE_H
#defineQRICEPROGRESSBARDELEGATE_H

#include

classQRiceProgressBarDelegate:publicQItemDelegate
{
Q_OBJECT
public:
explicitQRiceProgressBarDelegate(QObject*parent=nullptr);
~QRiceProgressBarDelegate();

voidpaint(QPainter*painter,constQStyleOptionViewItem&option,constQModelIndex&index)const;
booleditorEvent(QEvent*event,QAbstractItemModel*model,constQStyleOptionViewItem&option,constQModelIndex&index);
signals:

};

#endif//QRICEPROGRESSBARDELEGATE_H

自定義表格中按紐Button委托 -- 創(chuàng)建QRiceButtonDelegate類(lèi)繼承QItemDelegate

重寫(xiě)paint方法和editorEvent方法,其中paint用于繪制,editorEvent用于處理用戶(hù)輸入

按鈕其實(shí)按鈕項(xiàng)樣式(QStyleOptionButton)繪制。

QRiceButtonDelegate源文件

voidQRiceButtonDelegate::paint(QPainter*painter,constQStyleOptionViewItem&option,constQModelIndex&index)const
{
QStyleOptionButton*buttonStyle=buttonDelegate.value(index);
if(!buttonStyle)
{
buttonStyle=newQStyleOptionButton();//創(chuàng)建按鈕項(xiàng)樣式
buttonStyle->text="Update";//設(shè)置按鈕中顯示的內(nèi)容
buttonStyle->state|=QStyle::State_Enabled;//設(shè)置按鈕中的狀態(tài)
(const_cast(this))->buttonDelegate.insert(index,buttonStyle);
}
buttonStyle->rect=option.rect.adjusted(4,4,-4,-4);//設(shè)置按鈕的大小
painter->save();

if(option.state&QStyle::State_Selected){
painter->fillRect(option.rect,option.palette.highlight());
}

painter->restore();
QApplication::style()->drawControl(QStyle::CE_PushButton,buttonStyle,painter);//繪制
}

boolQRiceButtonDelegate::editorEvent(QEvent*event,QAbstractItemModel*model,constQStyleOptionViewItem&option,constQModelIndex&index)
{
Q_UNUSED(model);
Q_UNUSED(option);
QMouseEvent*mouseEvent=(QMouseEvent*)event;

if(event->type()==QEvent::MouseButtonPress)//按鈕按下,設(shè)置按鈕的狀態(tài)
{
if(buttonDelegate.contains(index))
{
QStyleOptionButton*buttonStyle=buttonDelegate.value(index);
if(buttonStyle->rect.contains(mouseEvent->x(),mouseEvent->y()))
{
buttonStyle->state|=QStyle::State_Sunken;
}
}
}
if(event->type()==QEvent::MouseButtonRelease)//按鈕松開(kāi),設(shè)置按鈕的狀態(tài)
{
if(buttonDelegate.contains(index))
{
QStyleOptionButton*buttonStyle=buttonDelegate.value(index);
if(buttonStyle->rect.contains(mouseEvent->x(),mouseEvent->y()))
{
buttonStyle->state&=(~QStyle::State_Sunken);
showMsg(tr("btn1column%1").arg(index.row()));//松開(kāi)彈出消息框,顯示對(duì)應(yīng)行號(hào)
}
}
}

returntrue;
}

voidQRiceButtonDelegate::showMsg(QStringstr)
{
QMessageBoxmsg;
msg.setText(str);
msg.exec();
}

QRiceButtonDelegate頭文件

#ifndefQRICEBUTTONDELEGATE_H
#defineQRICEBUTTONDELEGATE_H

#include

classQRiceButtonDelegate:publicQItemDelegate
{
Q_OBJECT
public:
explicitQRiceButtonDelegate(QObject*parent=nullptr);
~QRiceButtonDelegate();

voidpaint(QPainter*painter,constQStyleOptionViewItem&option,constQModelIndex&index)const;
booleditorEvent(QEvent*event,QAbstractItemModel*model,constQStyleOptionViewItem&option,constQModelIndex&index);
signals:

private:
voidshowMsg(QStringstr);

private:
typedefQMapcollButtons;
collButtonsbuttonDelegate;
};

#endif//QRICEBUTTONDELEGATE_H
,>

創(chuàng)建一個(gè)自定義QRiceTableView類(lèi)繼承QTableView類(lèi)

構(gòu)造方法實(shí)現(xiàn):①創(chuàng)建QStandardItemModel模型。②創(chuàng)建單選框委托到視圖中。③創(chuàng)建進(jìn)度條委托到視圖第五列中。④創(chuàng)建按鈕委托到視圖第六列中。⑤設(shè)置表格視圖的頭部。

QRiceTableView::QRiceTableView(QWidget*parent):
QTableView(parent)
{
horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

tableItemModel=newQStandardItemModel();
setModel(tableItemModel);

tableCheckBoxDelegate=newQRiceCheckBoxDelegate(this);
setItemDelegate(tableCheckBoxDelegate);

tableProgressBarDelegate=newQRiceProgressBarDelegate(this);
setItemDelegateForColumn(4,tableProgressBarDelegate);

tableButtonDelegate=newQRiceButtonDelegate(this);
setItemDelegateForColumn(5,tableButtonDelegate);

QStringListtableHeaders;
tableHeaders<setHorizontalHeaderLabels(tableHeaders);
}
,>(

在QRiceTableView中實(shí)現(xiàn)用戶(hù)使用方法:

方法 說(shuō)明
int QRiceTableGetRow(void); 獲取列表行數(shù)
int QRiceTableGetColumn(void); 獲取列表列數(shù)
void QRiceTableAddItem(int row, struct tableItemInfo *info); 增加一行
void QRiceTableSetProgress(int row, int Progress); 設(shè)置某行的進(jìn)度條
void QRiceTableSetSelect(int row, bool select); 單選框狀態(tài)設(shè)置
bool QRiceTableGetSelect(int row); 單選框狀態(tài)獲取
QString QRiceTableGetString(int row, int column); 獲取某行某列的數(shù)據(jù)

在QRiceTableView中方法代碼:

intQRiceTableView::QRiceTableGetRow(void)
{
returntableItemModel->rowCount();
}

intQRiceTableView::QRiceTableGetColumn(void)
{
returntableItemModel->columnCount();
}

voidQRiceTableView::QRiceTableAddItem(introw,structtableItemInfo*info)
{
QStandardItem*otaDeviceListStandardItem=tableItemModel->invisibleRootItem();

QStandardItem*checkBox=newQStandardItem();
QStandardItem*name=newQStandardItem();
QStandardItem*age=newQStandardItem();
QStandardItem*work=newQStandardItem();

checkBox->setData(false,Qt::DisplayRole);
name->setData(info->name,Qt::DisplayRole);
age->setData(info->age,Qt::DisplayRole);
work->setData(info->work,Qt::DisplayRole);

otaDeviceListStandardItem->setChild(row,0,checkBox);
otaDeviceListStandardItem->setChild(row,1,name);
otaDeviceListStandardItem->setChild(row,2,age);
otaDeviceListStandardItem->setChild(row,3,work);
}

voidQRiceTableView::QRiceTableSetProgress(introw,intProgress)
{
if(rowrowCount())
{
QModelIndexindex=tableItemModel->index(row,4);
tableItemModel->setData(index,Progress,Qt::DisplayRole);
}
}

voidQRiceTableView::QRiceTableSetSelect(introw,boolselect)
{
if(rowrowCount())
{
QModelIndexindex=tableItemModel->index(row,0);
tableItemModel->setData(index,select,Qt::DisplayRole);
}
}

boolQRiceTableView::QRiceTableGetSelect(introw)
{
if(rowrowCount())
{
QModelIndexindex=tableItemModel->index(row,0);
returnindex.data(Qt::DisplayRole).toBool();
}
returnfalse;
}

QStringQRiceTableView::QRiceTableGetString(introw,intcolumn)
{
if(rowrowCount()
&&column>0&&columncolumnCount()-2))
{
QModelIndexindex=tableItemModel->index(row,column);
returnindex.data(Qt::DisplayRole).toString();
}
return"";
}

QRiceTableView頭文件:

#ifndefQRICETABLEVIEW_H
#defineQRICETABLEVIEW_H

#include

#include
#include"qricecheckboxdelegate.h"
#include"qriceprogressbardelegate.h"
#include"qricebuttondelegate.h"

classQRiceTableView:publicQTableView
{
Q_OBJECT
public:
structtableItemInfo
{
QStringname;
QStringage;
QStringwork;
};
public:
explicitQRiceTableView(QWidget*parent=nullptr);
~QRiceTableView();

signals:

public:
intQRiceTableGetRow(void);
intQRiceTableGetColumn(void);
voidQRiceTableAddItem(introw,structtableItemInfo*info);
voidQRiceTableSetProgress(introw,intProgress);
voidQRiceTableSetSelect(introw,boolselect);
boolQRiceTableGetSelect(introw);
QStringQRiceTableGetString(introw,intcolumn);

private:
QStandardItemModel*tableItemModel;

QRiceCheckBoxDelegate*tableCheckBoxDelegate;
QRiceProgressBarDelegate*tableProgressBarDelegate;
QRiceButtonDelegate*tableButtonDelegate;
};

#endif//QRICETABLEVIEW_H

將UI中的QTableView提升為QRiceTableView:

右擊QTableView控件,選擇提升為:

3377fcec-580b-11ed-b468-dac502259ad0.png

填寫(xiě)對(duì)應(yīng)類(lèi)名,類(lèi)的頭文件相對(duì)路徑:

34078f88-580b-11ed-b468-dac502259ad0.png

點(diǎn)擊添加后,然后點(diǎn)擊提升按鈕,就完成了控件的提升

在mainwindow.cpp中增加測(cè)試用例:

在構(gòu)造方法中,創(chuàng)建兩條數(shù)據(jù),并且啟動(dòng)一個(gè)定時(shí)器刷新進(jìn)度條:

MainWindow::MainWindow(QWidget*parent)
:QMainWindow(parent)
,ui(newUi::MainWindow)
{
ui->setupUi(this);

setWindowTitle(tr("RiceDelegate"));

structQRiceTableView::tableItemInfoinfo;
info.name=tr("RiceChen");
info.age=tr("18");
info.work=tr("程序員");
ui->tableView->QRiceTableAddItem(0,&info);

info.name=tr("米飯");
info.age=tr("20");
info.work=tr("公務(wù)員");
ui->tableView->QRiceTableAddItem(1,&info);

QTimer*timer=newQTimer(this);
connect(timer,&QTimer::timeout,[=](){
staticintProgress1=0;
staticintProgress2=0;

ui->tableView->QRiceTableSetProgress(0,Progress1);
ui->tableView->QRiceTableSetProgress(1,Progress2);
Progress1+=1;
Progress2+=2;
if(Progress1>100)
{
Progress1=0;
}
if(Progress2>100)
{
Progress2=0;
}
});
timer->start(1000);
}

界面中全選框的實(shí)現(xiàn):

voidMainWindow::on_allCheckBox_clicked()
{
for(introw=0;rowtableView->QRiceTableGetRow();row++)
{
if(ui->allCheckBox->checkState()==Qt::Checked)
{
ui->tableView->QRiceTableSetSelect(row,true);
}
else
{
ui->tableView->QRiceTableSetSelect(row,false);
}
}
}

最終呈現(xiàn)結(jié)果:

32d2d19a-580b-11ed-b468-dac502259ad0.png

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀(guān)點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 嵌入式
    +關(guān)注

    關(guān)注

    5142

    文章

    19561

    瀏覽量

    315355
  • ui
    ui
    +關(guān)注

    關(guān)注

    0

    文章

    206

    瀏覽量

    21694
  • 上位機(jī)
    +關(guān)注

    關(guān)注

    27

    文章

    961

    瀏覽量

    55628
  • Qt
    Qt
    +關(guān)注

    關(guān)注

    1

    文章

    313

    瀏覽量

    38838
收藏 人收藏

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    HarmonyOS開(kāi)發(fā)實(shí)例:【自定義Emitter】

    使用[Emitter]實(shí)現(xiàn)事件的訂閱和發(fā)布,使用[自定義彈窗]設(shè)置廣告信息。
    的頭像 發(fā)表于 04-14 11:37 ?1262次閱讀
    HarmonyOS開(kāi)發(fā)實(shí)例:【<b class='flag-5'>自定義</b>Emitter】

    HarmonyOS應(yīng)用自定義鍵盤(pán)解決方案

    自定義鍵盤(pán)是一種替換系統(tǒng)默認(rèn)鍵盤(pán)的解決方案,可實(shí)現(xiàn)鍵盤(pán)個(gè)性化交互。允許用戶(hù)結(jié)合業(yè)務(wù)需求與操作習(xí)慣,對(duì)按鍵布局進(jìn)行可視化重構(gòu)、設(shè)置多功能組合鍵位,使輸入更加便捷和舒適。在安全防護(hù)層面,自定義鍵盤(pán)可以
    的頭像 發(fā)表于 06-05 14:19 ?377次閱讀

    OpenHarmony應(yīng)用開(kāi)發(fā)之自定義彈窗

    , `getApplicationVersion is fail`) } } ... ... 以上是應(yīng)用升級(jí)所需的數(shù)據(jù)結(jié)構(gòu)及部分?jǐn)?shù)據(jù)獲取。 彈窗具體實(shí)現(xiàn) 自定義彈窗的實(shí)現(xiàn)就是在原頁(yè)面
    發(fā)表于 09-06 14:40

    OpenHarmony自定義組件介紹

    見(jiàn)的容器組件上。 二、頁(yè)面和自定義組件生命周期 在開(kāi)始之前,我們先明確自定義組件和頁(yè)面的關(guān)系: ● 自定義組件:@Component裝飾的UI單元,可以組合多個(gè)系統(tǒng)組件
    發(fā)表于 09-25 15:36

    1602自定義字符

    1602液晶能夠顯示自定義字符,能夠根據(jù)讀者的具體情況顯示自定義字符。
    發(fā)表于 01-20 15:43 ?1次下載

    Qt自定義窗口部件的創(chuàng)建

    通過(guò)對(duì)一個(gè)已經(jīng)存在的Qt窗口部件進(jìn)行子類(lèi)化或者直接對(duì)QWidget進(jìn)行子類(lèi)化,就可以創(chuàng)建自定義窗口部件。以下直接對(duì)已有的Qt窗口部件進(jìn)行子類(lèi)化
    發(fā)表于 09-09 09:00 ?2554次閱讀

    如何在LabVIEW中實(shí)現(xiàn)自定義控件

    本文檔的主要內(nèi)容詳細(xì)介紹的是如何在LabVIEW中實(shí)現(xiàn)自定義控件。
    發(fā)表于 01-14 17:17 ?48次下載
    如何在LabVIEW中<b class='flag-5'>實(shí)現(xiàn)</b><b class='flag-5'>自定義</b>控件

    基于HAL庫(kù)的USB自定義HID設(shè)備實(shí)現(xiàn)

    基于HAL庫(kù)的USB自定義HID設(shè)備實(shí)現(xiàn)基于HAL庫(kù)的USB自定義HID設(shè)備實(shí)現(xiàn)準(zhǔn)備工作CubeMX配置代碼實(shí)現(xiàn)基于HAL庫(kù)的USB
    發(fā)表于 12-28 20:04 ?13次下載
    基于HAL庫(kù)的USB<b class='flag-5'>自定義</b>HID設(shè)備<b class='flag-5'>實(shí)現(xiàn)</b>

    三種自定義彈窗UI組件封裝的實(shí)現(xiàn)

    鴻蒙已經(jīng)提供了全局 UI 方法自定義彈窗,本文是基于基礎(chǔ)的自定義彈窗來(lái)實(shí)現(xiàn)提示消息彈窗、確認(rèn)彈窗、輸入彈窗的 UI 組件封裝。
    的頭像 發(fā)表于 03-30 09:28 ?3518次閱讀

    自定義視圖組件教程案例

    自定義組件 1.自定義組件-particles(粒子效果) 2.自定義組件- pulse(脈沖button效果) 3.自定義組件-progress(progress效果) 4.
    發(fā)表于 04-08 10:48 ?14次下載

    ArkUI如何自定義彈窗(eTS)

    自定義彈窗其實(shí)也是比較簡(jiǎn)單的,通過(guò)CustomDialogController類(lèi)就可以顯示自定義彈窗。
    的頭像 發(fā)表于 08-31 08:24 ?2580次閱讀

    自定義特性能做什么?

    今天跟大家分享的主題是基于自定義特性實(shí)現(xiàn)DataGridView全自動(dòng)生成。
    的頭像 發(fā)表于 02-22 16:20 ?1036次閱讀
    <b class='flag-5'>自定義</b>特性能做什么?

    labview自定義控件

    labview自定義精美控件
    發(fā)表于 05-15 16:46 ?18次下載

    自定義算子開(kāi)發(fā)

    一個(gè)完整的自定義算子應(yīng)用過(guò)程包括注冊(cè)算子、算子實(shí)現(xiàn)、含自定義算子模型轉(zhuǎn)換和運(yùn)行含自定義op模型四個(gè)階段。在大多數(shù)情況下,您的模型應(yīng)該可以通過(guò)使用hb_mapper工具完成轉(zhuǎn)換并順利部署
    的頭像 發(fā)表于 04-07 16:11 ?3244次閱讀
    <b class='flag-5'>自定義</b>算子開(kāi)發(fā)

    labview超快自定義控件制作和普通自定義控件制作

    labview超快自定義控件制作和普通自定義控件制作
    發(fā)表于 08-21 10:32 ?14次下載
    主站蜘蛛池模板: 欧洲精品码一区二区三区免费看 | 亚洲人成网站在线观看妞妞网 | 午夜影院0606免费 | 天天鲁天天爽精品视频 | 免费操人视频 | 欧美成人综合在线 | 人与牲动交xxxxbbbb | 天天鲁天天爽天天视频 | 欧美成人免费全部观看天天性色 | 激情六月天婷婷 | 四虎884| 操美女视频网站 | 天堂在线国产 | 六月激情婷婷 | 亚洲最大成人综合网 | 久久99热久久精品动漫 | 天天做天天爱天天爽天天综合 | 你懂的视频在线看 | 欧洲一卡二卡乱码新区 | 亚洲好骚综合 | xxx69日本hd| 三级在线观看 | 美女扒开内裤无遮挡禁18 | 亚瑟 国产精品 | 久久久噜噜噜久久 | 欧美成人亚洲 | 亚洲香蕉久久一区二区三区四区 | 97九色 | 特级无码毛片免费视频尤物 | 1024视频色版在线网站 | 又黄又粗暴的120秒免费gif视频 | 亚洲欧洲一区二区三区在线观看 | 伊人久久大香线蕉综合影 | 卡一卡二卡三国色天香永不失联 | 午夜高清免费观看视频 | 日本不卡视频 | 久久一卡二卡 | 特污兔午夜影院 | 欧美一级视频在线观看 | 俺去啦最新官网 | 精品xxxxxbbbb欧美中文 |