1. 程式人生 > >QT 扁平化介面風格,自定義TabWidget控制元件

QT 扁平化介面風格,自定義TabWidget控制元件

直接上圖先看效果:

核心程式碼:

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QtCharts>
QT_CHARTS_USE_NAMESPACE

#include <QMainWindow>
#include <QMdiArea>
#include <QToolButton>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private:
    Ui::MainWindow *ui;
    QChart *tpChart;             //定義一個圖表
    QMdiArea *tpMdiArea;         //TabWidget子視窗
    QLineSeries *CH1series;      //通道1按鈕線
    QLineSeries *CH2series;      //通道2按鈕線
    QLineSeries *CH3series;      //通道3按鈕線
    QLineSeries *CH4series;      //通道4按鈕線
    QLineSeries *CH5series;      //通道5按鈕線
    QLineSeries *CH6series;      //通道6按鈕線
    QLineSeries *CH7series;      //通道7按鈕線
    QLineSeries *CH8series;      //通道8按鈕線
    QGraphicsSimpleTextItem *m_coordX;  //滑鼠在圖表上的X位置
    QGraphicsSimpleTextItem *m_coordY;  //滑鼠在圖表上的Y位置
    QPushButton  *changeBtn;
    QToolButton  *closeBtn;
    QToolBar     *mainToolBar;          //主工具欄
    QAction      *actionFile;           //工具欄檔案按鈕
    QAction      *actionTestPro;        //工具欄測量工程按鈕
    QAction      *actionForceStart;     //工具欄強制觸發按鈕
    QAction      *actionRealTimeData;   //工具欄實時資料按鈕
    QAction      *actionStart;          //工具欄啟動按鈕
    QAction      *actionStartN;         //工具欄多次啟動按鈕
    QAction      *actionStop;           //工具欄停止按鈕
    QAction      *actionStore;          //工具欄儲存按鈕
    QAction      *actionTestPara;       //工具欄測量引數按鈕

public:
    void WriteSettings();
    void ReadSettings();
    void init_sig_slots();
    void uninit_sig_slots();
private slots:
    void on_clickCH();
    void on_changeBtn_clicked();
    void timerSingleClick();            //定時器事件,處理單擊任務
protected:
    void mousePressEvent(QMouseEvent *event);
    void mouseMoveEvent(QMouseEvent *event);
    void mouseReleaseEvent(QMouseEvent *event);
public:
    QTimer* pQTimerDoubleClicked;       //判斷單雙擊的定時器
    int     isDoubleClicked;            //區分是單擊還是雙擊
    bool    isEnabledCH1series;         //通道1是否正在繪圖
    bool    isEnabledCH2series;         //通道2是否正在繪圖
    bool    isEnabledCH3series;         //通道3是否正在繪圖
    bool    isEnabledCH4series;         //通道4是否正在繪圖
    bool    isEnabledCH5series;         //通道5是否正在繪圖
    bool    isEnabledCH6series;         //通道6是否正在繪圖
    bool    isEnabledCH7series;         //通道7是否正在繪圖
    bool    isEnabledCH8series;         //通道8是否正在繪圖
    bool    m_Drag;                     //判斷滑鼠左鍵是否按下
    QPoint  m_DragPosition;             //拖動視窗的位置
};

#endif // MAINWINDOW_H

mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QSettings>
#include <QDebug>
#include <QTextCodec>
#include <QLineSeries>
#include <QSplineSeries>
#include <QGraphicsScene>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    m_coordX(0),
    m_coordY(0),
    tpChart(0),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    tpMdiArea = new QMdiArea;
    this->setCentralWidget(tpMdiArea);
    QMdiSubWindow *subWin = new QMdiSubWindow;
    subWin->setWidget(ui->tabWidget);

    subWin->setAttribute(Qt::WA_DeleteOnClose);
    tpMdiArea->addSubWindow(subWin);

    subWin->setWindowFlags(Qt::FramelessWindowHint);
    subWin->show();

    //ui->mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
    ui->tabWidget->setTabText(2,tr("C:\\MyData\\Test.wav"));

    tpChart = new QChart;
    tpChart->setTitle("TP System Chart");
    ui->chart->setFixedWidth(1200);
    ui->chart->setFixedHeight(400);
    ui->chart->setChart(tpChart);
    ui->tabWidget->setFixedWidth(1400);

    m_coordX = new QGraphicsSimpleTextItem(tpChart);
    m_coordX->setPos(tpChart->size().width()/2 - 50, tpChart->size().height());
    m_coordX->setText("X: ");
    m_coordY = new QGraphicsSimpleTextItem(tpChart);
    m_coordY->setPos(tpChart->size().width()/2 + 50, tpChart->size().height());
    m_coordY->setText("Y: ");
    for(int i=0; i<ui->tabWidget->count(); i++)
    {
        changeBtn = new QPushButton;
        QIcon button_icogrey("images/greyIco.png");
        changeBtn->setObjectName("btnC"+QString::number(i));
        changeBtn->setMinimumSize(16,16);
        changeBtn->setMaximumSize(16,16);
        changeBtn->setIcon(button_icogrey);

        changeBtn->setIconSize(QSize(16,16));
        QObject::connect(changeBtn, SIGNAL(clicked(bool)),this,SLOT(on_changeBtn_clicked()));
        ui->statusBar->addWidget(changeBtn);
    }
    isDoubleClicked = 0; //初始化不點選
    pQTimerDoubleClicked = new QTimer(this); //新建定時器
    isEnabledCH1series = false;
    isEnabledCH2series = false;
    isEnabledCH3series = false;
    isEnabledCH4series = false;
    isEnabledCH5series = false;
    isEnabledCH6series = false;
    isEnabledCH7series = false;
    isEnabledCH8series = false;

    //初始化工具欄和對應的圖示
    mainToolBar = new QToolBar(this);
    actionFile = new QAction(this);
    actionFile->setIcon(QIcon(":/images/file.png"));
    actionTestPro = new QAction(this);
    actionTestPro->setIcon(QIcon(":/images/testProject.png"));
    actionForceStart = new QAction(this);
    actionForceStart->setIcon(QIcon(":/images/forceS.png"));
    actionRealTimeData = new QAction(this);
    actionRealTimeData->setIcon(QIcon(":/images/realTimedata.png"));
    actionStart = new QAction(this);
    actionStart->setIcon(QIcon(":/images/start.png"));
    actionStartN = new QAction(this);
    actionStartN->setIcon(QIcon(":/images/startN.png"));
    actionStop = new QAction(this);
    actionStop->setIcon(QIcon(":/images/stop.png"));
    actionStore = new QAction(this);
    actionStore->setIcon(QIcon(":/images/store.png"));
    actionTestPara = new QAction(this);
    actionTestPara->setIcon(QIcon(":/images/testPara.png"));
    //建立主工具欄按鈕
    mainToolBar->addAction(actionFile);
    mainToolBar->addAction(actionTestPro);
    mainToolBar->addAction(actionForceStart);
    mainToolBar->addAction(actionRealTimeData);
    mainToolBar->addAction(actionStart);
    mainToolBar->addAction(actionStartN);
    mainToolBar->addAction(actionStop);
    mainToolBar->addAction(actionStore);
    mainToolBar->addAction(actionTestPara);
    mainToolBar->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);

    ReadSettings();//讀取配置檔案 工具欄按鈕文字資訊
//    QLabel *Titlelabel = new QLabel(this);
//    Titlelabel->setText(tr("   虛擬儀器平臺"));

    closeBtn = new QToolButton(this);
    QPixmap closePix = style()->standardPixmap(QStyle::SP_TitleBarCloseButton);
    closeBtn->setIcon(closePix);
    int width = this->width();
    closeBtn->setGeometry(width-25,5,1400,20);
    closeBtn->setToolTip(tr("關閉"));
    closeBtn->setStyleSheet("background-color:transparent;");
    QHBoxLayout *hbox = new QHBoxLayout(this);
//    hbox->addWidget(Titlelabel);
//    hbox->addWidget(closeBtn);
    mainToolBar->setStyleSheet("background-color:transparent;");
    //hbox->addWidget(mainToolBar);
    setLayout(hbox);\

    addToolBar(mainToolBar);

    init_sig_slots();//初始化槽函式
}

void MainWindow::mousePressEvent(QMouseEvent *event)
{
    if (event->button() == Qt::LeftButton) {
        m_Drag = true;
        m_DragPosition = event->globalPos() - this->pos();
        event->accept();
    }
}

void MainWindow::mouseMoveEvent(QMouseEvent *event)
{
    if (m_Drag && (event->buttons() && Qt::LeftButton)) {
        move(event->globalPos() - m_DragPosition);
        event->accept();
    }
}

void MainWindow::mouseReleaseEvent(QMouseEvent *event)
{
    m_Drag = false;
    event->accept();
}

void MainWindow::init_sig_slots()
{
    QObject::connect(ui->btnCH1, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::connect(ui->btnCH2, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::connect(ui->btnCH3, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::connect(ui->btnCH4, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::connect(ui->btnCH5, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::connect(ui->btnCH6, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::connect(ui->btnCH7, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::connect(ui->btnCH8, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));

    QObject::connect(pQTimerDoubleClicked,SIGNAL(timeout()),this,SLOT(timerSingleClick())); //關聯定時器和槽函式
    QObject::connect(closeBtn, SIGNAL(clicked()), this, SLOT(close()));  //關閉視窗和槽函式
}
void MainWindow::uninit_sig_slots()
{
    QObject::disconnect(ui->btnCH1, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::disconnect(ui->btnCH2, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::disconnect(ui->btnCH3, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::disconnect(ui->btnCH4, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::disconnect(ui->btnCH5, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::disconnect(ui->btnCH6, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::disconnect(ui->btnCH7, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    QObject::disconnect(ui->btnCH8, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    for(int i=0; i<ui->tabWidget->count(); i++)
    {
        QObject::disconnect(changeBtn, SIGNAL(clicked(bool)),this,SLOT(on_clickCH()));
    }
}

MainWindow::~MainWindow()
{
    delete ui;
    delete tpChart;//刪除chart
    tpChart = NULL;
    uninit_sig_slots();
}

void MainWindow::WriteSettings()
{
    //do not implement
}

void MainWindow::ReadSettings()
{
    QSettings *configIniRead = new QSettings("cfgs/cfg.ini", QSettings::IniFormat);
    //將讀取到的ini檔案儲存在QString中,先取值,然後通過toString()函式轉換成QString型別
    configIniRead->setIniCodec(QTextCodec::codecForName("GB2312"));//設定編碼格式
    actionFile->setText(configIniRead->value("/ToolBarText/file").toString());
    actionFile->setStatusTip(configIniRead->value("/ToolBarText/file").toString());
    actionTestPro->setText(configIniRead->value("ToolBarText/testProject").toString());
    actionTestPro->setStatusTip(configIniRead->value("ToolBarText/testProject").toString());
    actionForceStart->setText(configIniRead->value("ToolBarText/forceStart").toString());
    actionForceStart->setStatusTip(configIniRead->value("ToolBarText/forceStart").toString());
    actionRealTimeData->setText(configIniRead->value("ToolBarText/realTimeData").toString());
    actionRealTimeData->setStatusTip(configIniRead->value("ToolBarText/realTimeData").toString());
    actionStart->setText(configIniRead->value("ToolBarText/start").toString());
    actionStart->setStatusTip(configIniRead->value("ToolBarText/start").toString());
    actionStartN->setText(configIniRead->value("ToolBarText/startN").toString());
    actionStartN->setStatusTip(configIniRead->value("ToolBarText/startN").toString());
    actionStop->setText(configIniRead->value("ToolBarText/stop").toString());
    actionStop->setStatusTip(configIniRead->value("ToolBarText/stop").toString());
    actionStore->setText(configIniRead->value("ToolBarText/store").toString());
    actionStore->setStatusTip(configIniRead->value("ToolBarText/store").toString());
    actionTestPara->setText(configIniRead->value("ToolBarText/testPara").toString());
    actionTestPara->setStatusTip(configIniRead->value("ToolBarText/testPara").toString());

    //讀入入完成後刪除指標
    delete configIniRead;
}

void MainWindow::timerSingleClick()
{
    isDoubleClicked = 0; //先初始化
    pQTimerDoubleClicked->stop(); //先初始化
}

void MainWindow::on_clickCH()
{
    QPushButton *pt = qobject_cast <QPushButton*>(sender());
    if(!pt) return;
    if(pt == ui->btnCH1)
    {
        isDoubleClicked++;
        if(isDoubleClicked==1){//430ms為自己設定
            pQTimerDoubleClicked->start(430);
        }
        if (isEnabledCH1series && (isDoubleClicked==2)){
            tpChart->removeSeries(CH1series);
            isEnabledCH1series = false;
            QPalette pal;
            pal.setColor(QPalette::ButtonText, QColor(176,176,176));
            ui->btnCH1->setPalette(pal);
        }
        if(isDoubleClicked==2 && !isEnabledCH1series)
        {
            isDoubleClicked = 0; //先初始化
            pQTimerDoubleClicked->stop();//先初始化
            CH1series = new QLineSeries;
            CH1series->append(1, 3);
            CH1series->append(4, 5);
            CH1series->append(5, 4.5);
            CH1series->append(7, 1);
            CH1series->append(11, 2);
            tpChart->addSeries(CH1series);
            tpChart->setAnimationOptions(QChart::AllAnimations);
            tpChart->legend()->hide();
            tpChart->createDefaultAxes();
            isEnabledCH1series = true;
        }
    }
    if(pt == ui->btnCH2)
    {
        CH2series = new QSplineSeries;
        CH2series->append(0, 1);
        CH2series->append(1, 2);
        CH2series->append(4, 6);
        CH2series->append(8, 4);
        CH2series->append(11, 3.5);
        CH2series->append(16, 3);
        tpChart->addSeries(CH2series);
        tpChart->setAnimationOptions(QChart::AllAnimations);
        tpChart->legend()->hide();
        tpChart->createDefaultAxes();
    }
    if(pt == ui->btnCH3)
    {
        CH3series = new QSplineSeries;
        CH3series->append(0, 3);
        CH3series->append(1, 4);
        CH3series->append(2, 6);
        CH3series->append(3, 5);
        CH3series->append(8, 9);
        CH3series->append(15, 10);
        tpChart->addSeries(CH3series);
        tpChart->setAnimationOptions(QChart::AllAnimations);
        tpChart->legend()->hide();
        tpChart->createDefaultAxes();
    }
    if(pt == ui->btnCH4)
    {
        CH4series = new QSplineSeries;
        CH4series->append(0, 6.5);
        CH4series->append(5, 3);
        CH4series->append(8, 7);
        CH4series->append(7, 8);
        CH4series->append(13, 9);
        CH4series->append(14, 11);
        tpChart->addSeries(CH4series);
        tpChart->setAnimationOptions(QChart::AllAnimations);
        tpChart->legend()->hide();
        tpChart->createDefaultAxes();
    }
}

void MainWindow::on_changeBtn_clicked()
{
    QPushButton *pt = qobject_cast <QPushButton*>(sender());
    if(!pt) return;
    if(pt->objectName() == "btnC0" )//第1個按鈕點選觸發
    {
        ui->tabWidget->setCurrentIndex(0);
        QIcon button_icowhite("images/whiteIco.png");
        pt->setMinimumSize(16,16);
        pt->setMaximumSize(16,16);
        pt->setIcon(button_icowhite);
        pt->setIconSize(QSize(16,16));
    }
    if(pt->objectName() == "btnC1" )//第2個按鈕點選觸發
    {
        ui->tabWidget->setCurrentIndex(1);
        QIcon button_icowhite("images/whiteIco.png");
        pt->setMinimumSize(16,16);
        pt->setMaximumSize(16,16);
        pt->setIcon(button_icowhite);
        pt->setIconSize(QSize(16,16));
    }
    if(pt->objectName() == "btnC2" )//第3個按鈕點選觸發
    {
        ui->tabWidget->setCurrentIndex(2);
        QIcon button_icowhite("images/whiteIco.png");
        pt->setMinimumSize(16,16);
        pt->setMaximumSize(16,16);
        pt->setIcon(button_icowhite);
        pt->setIconSize(QSize(16,16));
    }
}
main.cpp
#include "mainwindow.h"
#include <QApplication>
#include <QTranslator>
#include <QFile>
#include <QMessageBox>
#include <tptabwidget.h>

#include <QtCharts>
using namespace QtCharts;

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTranslator qtTranslator;
    qtTranslator.load("tpsystem.qm");   //載入國際化語言
    a.installTranslator(&qtTranslator);
    //loading skin from qss file
    QFile qssFile("images/default.qss");
    if(!qssFile.open(QFile::ReadOnly))
    {
        QMessageBox::warning(NULL,"error","skin loading error!");
        return 0;
    }
    QString qss = qssFile.readAll();
    a.setStyleSheet(qss);
    qssFile.close();


    MainWindow *w = new MainWindow;
//    QTextCodec::setCodecForLocale(QTextCodec::codecForName("GB2312"));
//    QSplashScreen *splash = new QSplashScreen;
//    splash->setPixmap(QPixmap("images/loading.png"));
//    //splash->setWindowOpacity(0.9);
//    splash->show();
//    Qt::Alignment topRight = Qt::AlignHCenter | Qt::AlignBottom;
//    splash->showMessage(QObject::tr("正在啟動主介面..."),topRight, Qt::black);
//    splash->showMessage(QObject::tr("正在載入資料庫模組..."),topRight, Qt::black);
//    splash->showMessage(QObject::tr("正在載入..."),topRight, Qt::black);
//    QDateTime n2=QDateTime::currentDateTime();
//    QDateTime now;
//    do{
//        now=QDateTime::currentDateTime();
//    }while (n2.secsTo(now)<=5);//5為需要延時的秒數
//    splash->finish(w);

    // w->setObjectName("MainWindow");
    w->setFixedHeight(800);
    w->setFixedWidth(1400);

//    w->setWindowOpacity(1);
    w->setWindowFlags(Qt::FramelessWindowHint);
    w->setAttribute(Qt::WA_StyleSheet);
    w->move((QApplication::desktop()->width() - w->width())/2,(QApplication::desktop()->height() - w->height())/2);
    w->show();
    return a.exec();
}

QT個人學習資源網站:  https://www.qijiabo.cn  歡迎大家一起學習交流!

原始碼下載:

http://download.csdn.net/detail/zuoyuexian/9768445

相關推薦

QT 扁平介面風格定義TabWidget控制元件

直接上圖先看效果: 核心程式碼: mainwindow.h #ifndef MAINWINDOW_H #define MAINWINDOW_H #include <QtCharts> QT_CHARTS_USE_NAMESPACE #include <

Qt--串列埠接收資料定義碼流

串列埠通訊,傳送的資料沒有打包成固定碼流,所有需要對接收的資料加以判斷。 解決串列埠接收不完整的方法有3種: 一:判斷接收的資料,是不是自己定義的字元格式。 二:判斷接收的資料包大小,是不是自己定義的資料包的大小。 三:以多執行緒的方式,執行緒一直接收,資料獨立處理,此方法

Android 定義RatingBar控制元件顯示不全問題

最近專案要用到 自定義RatingBar控制元件 但是自定義好了樣式發現,星星只顯示一半,於是在網上找各種解決方法。 最後竟然是直接把資源圖片,移動到較高解析度的資料夾裡面。 我的解決做法如下,如果有更好的方法,請留言告知。 一,先寫一個drawable,設定好backg

定義RatingBar控制元件實現可定義星星(或專案所需圖片)的寬高告別使用warp_content導致控制元件大小不可控

之前做過的一款app中涉及到RatingBar控制元件,基本上來說都會要求用圖片來替代, 即使同樣是星星(可能是覺得系統自帶的比較醜吧,不過我覺得還好啊)。 當時就覺得很難去做適配,UI給的圖片沒法去控制寬高,只能使用warp_content來做, 可是這樣會導

Android UI開源元件庫BottomView 第三方定義UI控制元件

這裡分享一個Android的非常經典實用而且簡單方便的第三方UI控制元件庫:BottomView(小米的米UI也用到了這個) 實現功能: 可以在底部彈出的View裡自定義佈局; 可以自定義是否可以觸控外部消失; 可以自定義事件; 可以自定義外圍背景是否透明; 可以自定義動

vue定義form控制元件解決vue+layui組合時checkbutton和radiobutton事件被覆蓋問題

vue+layui組合時checkbutton和radiobutton事件會被layui覆蓋,導致資料無法繫結,需要自定義form表單控制元件,如下: VRadio.vue <template&

QT 定義混合控制元件——基於View/Model/Delegate的QTableView/QTreewidget/Combobox實現

QT自定義控制元件,檢視本文章需要具備一定的View/Model基礎知識(沒有也可以看)。本文實現了在一個QTreeWidget中插入一個QTableView,然後再在QTableView的每一個item中插入一個QCombobox,當然知道了方法你可以在任意item中插入任

定義WPF控制元件封裝成DLL

開啟VS2015 1.新建專案 在選單欄——檔案——新建——專案——選擇 C#  類庫專案(ClassLibrary)——確定 2.新增必要引用 在解決方案管理器裡,“引用”上右鍵——新增引用——程式集(框架)——新增對System.Xaml的引用,注意在net frame

QT】Qtcreator的設計模式中將控制元件提升為定義控制元件

測試環境 在工程中新增自定義的控制元件 如:MyWidget 進入設計模式,右鍵需要提升的控制元件(該控制元件的父類必須和自定義控制元件的父類相同,否則不能提升),選擇“提升為…”

H5+百度地圖定義定位控制元件、呼叫H5+定位介面

由於百度地圖的定位控制元件是呼叫內建的定位介面,想要呼叫H5+的定位介面就不行,自己改造一下就好了 /** * Author 嶽曉 * * 自定義定位控制元件,呼叫H5+內建定位API */ (function(BMap){ var control =

在Winform介面使用定義使用者控制元件及TabelPanel和StackPanel佈局控制元件

在很多時候,我們做一些非常規化的介面的時候,往往需要建立一些使用者控制元件,在其中繪製好一些基礎的介面塊,作為後續重複使用的一個單元,使用者控制元件同時也可以封裝處理一些簡單的邏輯。在開發Winform各種型別專案,我都時不時需要定製一些特殊的使用者控制元件,以方便在介面模組中反覆使用。我們一般是在自定義的使

WinForm中使用定義Tooltip控制元件

private ToolTip tooltipCtr; 建構函式中: 隱藏預設的Tooltip:this.ShowCellToolTips = false; this.tooltipCtr = new ToolTip(); 設定停留時間(還有許多其他時間設定):thi

定義控制元件 實現一個繞圓圈的箭頭

自定義的類 import android.content.Context; import android.content.res.TypedArray; import android.graphics.Canvas; import android.graphics.Color; import

Android UI-定義日曆控制元件

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

定義titilbar控制元件

自定義titilbar控制元件 自定義佈局 <?xml version="1.0" encoding="utf-8"?> <ImageView android:id="@+id/imageView1" android:layout_width=

android開發:定義組合控制元件

內容介紹 本文記錄,自定義組合控制元件,為了可以程式碼複用,減少程式碼量 配置控制元件屬性檔案 開啟res/values/目錄下的arss.xml檔案,新增下面屬性程式碼,如果沒有建立arrs.xml檔案。 <?xml version="1.0" enc

android定義開關控制元件-SlideSwitch

分享一下我老師大神的人工智慧教程!零基礎,通俗易懂!http://blog.csdn.net/jiangjunshow 也歡迎大家轉載本篇文章。分享知識,造福人民,實現我們中華民族偉大復興!        

android 多功能定義畫板控制元件(用於解決特定需求)

在專案中需要做一個可以自定義軌跡,但始終只有一條線,並且支援撤銷(撤銷單位為MotionEvent的down事件到up事件),還要支援動畫預覽等功能,最重要的是能夠按照間隔畫素來獲取所有點的座標,用於專案的其他功能。 整體的思路 1.專案中的應用場景需要畫板是一個圓形的,這個好實現用canv

(轉)C# 定義使用者控制元件

C# 自定義使用者控制元件   轉:https://blog.csdn.net/xiongxuanwen/article/details/2605109 本例是製作一個簡單的自定義控制元件,然後用一個簡單的測試程式,對於初學者來說,本例子比較簡單,只能起到拋石引玉的效

定義View控制元件

xml裡面的 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="