Qt는 제어판의 사용자 지정 컨트롤 영역을 작성, 47

I. 서론

많은 웹 페이지에서 당신은 종종 장치가 패널 또는도 드래그 할 수있는 모든 패널에 대한 정보의 일부 동등한 유형, 및 스마트 방문자 관리 플랫폼에 처음으로 컨트롤에 해당 볼 수 있습니다 이러한 식별 정보, 방문자 정보 패널, 패널 정보 인터뷰이 분류 프로그램에 상당 같은 패널 또한 장면의 제어의 사용은 매우뿐만 아니라 서브 것을 해당 타이틀 바에 문자 보였다 제공 당신은 점멸 경보 인터페이스를 확장하고, 제목을 설정할 수 있습니다.

기능 둘째, 실현

  • 1 : 모든 위젯의 서브 클래스 개체를 자동으로 생성 스크롤 막대를 지원합니다
  • 2 : 지원 자동 스트레치 자동 완성
  • 3 : 컨테이너의 모든 객체에 대한 포인터를 획득하기 위해 인터페이스를 제공
  • 4 : 설정할 수 있습니다 자동 스트레치 너비 높이 여부
  • 5 : 간격 및 여백 장치 패널 사이에 제공 될 수있다

셋째, 렌더링

넷째, 헤더 파일 코드

#ifndef PANELWIDGET_H
#define PANELWIDGET_H

/**
 * 面板容器控件 作者:feiyangqingyun(QQ:517216493) 2016-11-20
 * 1:支持所有widget子类对象,自动产生滚动条
 * 2:支持自动拉伸自动填充
 * 3:提供接口获取容器内的所有对象的指针
 * 4:可设置是否自动拉伸宽度高度
 * 5:可设置设备面板之间的间距和边距
 */

#include <QWidget>

class QScrollArea;
class QFrame;
class QVBoxLayout;
class QGridLayout;

#ifdef quc
#if (QT_VERSION < QT_VERSION_CHECK(5,7,0))
#include <QtDesigner/QDesignerExportWidget>
#else
#include <QtUiPlugin/QDesignerExportWidget>
#endif

class QDESIGNER_WIDGET_EXPORT PanelWidget : public QWidget
#else
class PanelWidget : public QWidget
#endif

{
    Q_OBJECT
    Q_PROPERTY(int margin READ getMargin WRITE setMargin)
    Q_PROPERTY(int space READ getSpace WRITE setSpace)
    Q_PROPERTY(bool autoWidth READ getAutoWidth WRITE setAutoWidth)
    Q_PROPERTY(bool autoHeight READ getAutoHeight WRITE setAutoHeight)

public:
    explicit PanelWidget(QWidget *parent = 0);

protected:
    void resizeEvent(QResizeEvent *);

private:
    QScrollArea *scrollArea;            //滚动区域
    QWidget *scrollAreaWidgetContents;  //滚动区域载体
    QFrame *frame;                      //放置设备的框架,自动变宽变高
    QVBoxLayout *verticalLayout;        //设备面板总布局
    QGridLayout *gridLayout;            //设备表格布局

    int margin;                         //边距
    int space;                          //设备之间的间隔
    bool autoWidth;                     //宽度自动拉伸
    bool autoHeight;                    //高度自动拉伸

    QList<QWidget *> widgets;           //设备面板对象集合
    int columnCount;                    //面板列数

public:
    QSize sizeHint()                const;
    QSize minimumSizeHint()         const;

    int getMargin()                 const;
    int getSpace()                  const;
    bool getAutoWidth()             const;
    bool getAutoHeight()            const;

    QList<QWidget *> getWidgets();
    int getColumnCount();

public Q_SLOTS:
    void setWidget(QList<QWidget *> widgets, int columnCount);
    void setMargin(int left, int top, int right, int bottom);
    void setMargin(int margin);
    void setSpace(int space);
    void setAutoWidth(bool autoWidth);
    void setAutoHeight(bool autoHeight);

};

#endif // PANELWIDGET_H

다섯째, 핵심 코드

void PanelWidget::setWidget(QList<QWidget *> widgets, int columnCount)
{
    this->widgets = widgets;
    this->columnCount = columnCount;

    int row = 0;
    int column = 0;
    int index = 0;

    //先把之前的所有移除并不可见
    foreach (QWidget *widget, widgets) {
        gridLayout->removeWidget(widget);
        widget->setVisible(false);
    }

    //重新添加到布局中并可见
    foreach (QWidget *widget, widgets) {
        gridLayout->addWidget(widget, row, column);
        widget->setVisible(true);

        column++;
        index++;
        if (index % columnCount == 0) {
            row++;
            column = 0;
        }
    }

    row++;

    //设置右边弹簧
    if (!autoWidth) {
        QSpacerItem *hSpacer = new QSpacerItem(1, 1, QSizePolicy::Expanding, QSizePolicy::Minimum);
        gridLayout->addItem(hSpacer, 0, gridLayout->columnCount());
    }

    //设置底边弹簧
    if (!autoHeight) {
        QSpacerItem *vSpacer = new QSpacerItem(1, 1, QSizePolicy::Minimum, QSizePolicy::Expanding);
        gridLayout->addItem(vSpacer, row, 0);
    }
}

void PanelWidget::setMargin(int left, int top, int right, int bottom)
{
    gridLayout->setContentsMargins(left, top, right, bottom);
}

void PanelWidget::setMargin(int margin)
{
    if (this->margin != margin) {
        setMargin(margin, margin, margin, margin);
    }
}

void PanelWidget::setSpace(int space)
{
    if (this->space != space) {
        gridLayout->setSpacing(space);
    }
}

void PanelWidget::setAutoWidth(bool autoWidth)
{
    if (this->autoWidth != autoWidth) {
        this->autoWidth = autoWidth;
    }
}

void PanelWidget::setAutoHeight(bool autoHeight)
{
    if (this->autoHeight != autoHeight) {
        this->autoHeight = autoHeight;
    }
}

여섯째, 제어 바와

  1. 150 개 이상의 정교한 제어가 대시 보드의 종류, 진행 막대의 진행을 덮는 공, 나침반, 그래프, 저울, 온도계, 탐색 바, 탐색 바, flatui 등등 셀렉터 음력 및 슬라이드 버튼을 강조. 제어 통합의 수보다 Qwt 훨씬 더.
  2. 각 클래스는 별도의 제어 제로 결합 각 제어 파일 프로젝트 소스 코드 형태로 이하에 통합 된 개별적인 제어를 용이하게하는 다른 파일 독립적 부호 량을 달성하기 위해, 헤더 파일로 독립적 일 수있다. qwt 높은 결합 된 컨트롤 클래스를, 연동, 모든 코드를 포함해야합니다 컨트롤 중 하나를 사용하고 싶습니다.
  3. 모든 순수한 Qt를,는 QWidget + QPainter를가립니다 어떤 Qt는 버전 Qt4.6 Qt5.12 등와 Mingw, MSVC, GCC 컴파일러에 대한 지원을 지원하기 위해 쓰기와 같은 왜곡하지 않는 윈도우 + 리눅스 + 맥 + 임베디드 리눅스로 모든 운영 시스템을 지원 직접 Qt는 창조주, 내장 된 컨트롤에 통합 및이를 사용할 수 있고, 효과의 대부분은 한 여러 속성이 설정되므로 매우 편리 할 수 ​​있습니다.
  4. 각 컨트롤에 대응하는 제어를 포함하는 별도의 소스 DEMO 편리한 참조를 갖는다. 또한 모든 컨트롤 데모의 통합 사용을 제공합니다.
  5. 각 컨트롤에 대한 소스 코드는 중국 주석을 자세히 사용자 지정 컨트롤을 작성하는 배우기 쉽고, 통합 된 설계 사양에 따라 준비가되어있다.
  6. 각 컨트롤의 기본 색상 및 데모 해당 색상이 매우 아름답습니다.
  7. 130 개 이상의 표시 제어 여섯 개 보이지 제어.
  8. 부분 제어 스타일 스타일 선택, 객관식 스타일 표시의 다양한 제공합니다.
  9. 모든 컨트롤 변경 뻗어 양식을 적응 적.
  10. 드래그 설계를 지원하는 통합 디자인 사용자 지정 특성은, WYSIWYG XML 형식으로 가져 오기 및 내보내기를 지원합니다.
  11. 데모와 함께 제공 ActiveX 컨트롤은 모든 컨트롤은 브라우저 IE에서 직접 실행할 수 있습니다.
  12. Fontawesome 통합 그래픽 글꼴 + 그래픽 글꼴의 수백 알리바바 iconfont 수집, 글꼴 재미 그래픽 제공합니다.
  13. 모든 컨트롤 마지막으로이 DLL을 동적 라이브러리 파일을 생성, 드래그에 사용하도록 설계 qtcreator에 직접 통합 할 수 있습니다.
  14. 그런 다음 사용자가 수요의 경우 이미 QML 버전, 후자는 PyQt는 버전을 고려할 것입니다.

세븐, SDK 다운로드

  • SDK 다운로드 링크 : https://pan.baidu.com/s/1A5Gd77kExm8Co5ckT51vvQ 추출 코드 : 877p
  • 다운로드 링크는 동적 라이브러리 파일의 다양한 버전에 포함 된 모든 컨트롤 파일, 데모의 사용, 사용자 지정 컨트롤 + 속성 디자이너 헤더.
  • 열기 플러그인 사용자 정의 동적 라이브러리 DLL을 사용 (영구 무료), 어떠한 제한없이 뒷문, 사용의 용이성.
  • qt5.12.3 msvc2017 32 + 64와 Mingw를 32 + 64을 포함하는 26 구할 버전 DLL.
  • 대한 통제를 강화하고 컨트롤을 개선하기 위해 수시로, 정기적으로 업데이트 SDK, 모든 제안을 환영하기 위해, 감사합니다!
  • 위젯 버전 (QQ : 517216493) QML 버전 (QQ : 373955953) 삼봉 낙타 (QQ : 278969898).
  • Qt의 고급 열이 거의 Taoge의 길을 알고 https://zhuanlan.zhihu.com/TaoQt
  • 에 오신 것을 환영합니다 관심 공공 마이크로 채널 번호] [효율적 프로그래머, 콘텐츠 C + +를 / 파이썬, 학습, 기술, 인기있는 기술, 경력 개발을 쓰고, 건조 제품의 많은, 많은 혜택을!
  • Qt를 소개 책 Qt5 프로그램 항목 ", Qt는 공식 고급 추천 도서"C ++ GUI QT4 프로그램 ""Qt는 창조주 빠른 시작 "의 Huo의 야 페이를 권장합니다."
  • 추천 프로그래머 자기 훈련과 평생 혜택을 계획 ​​책 시리즈 "프로그래머의 성장 과정을"프로그래머 거짓말 "", "슬픔 프로그래머"!

추천

출처www.cnblogs.com/feiyangqingyun/p/11330770.html