文档章节

Qt简单的控件运用及加载qml文件混合编程

蓝栩液枫
 蓝栩液枫
发布于 2017/05/20 09:19
字数 1156
阅读 59
收藏 0
点赞 0
评论 0

先看一下效果截图:

mytest.pro  //工程文件

QT       += core gui widgets qml

TARGET = menu_test
TEMPLATE = app


SOURCES += main.cpp\
        mainwindow.cpp

HEADERS  += mainwindow.h

RESOURCES += \
    images.qrc

OTHER_FILES +=

DISTFILES +=

mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QMessageBox>
#include <QFile>
#include <QString>
#include <QMenuBar>
#include <QAction>
#include <QMenu>
#include <QToolBar>
#include <QVBoxLayout>
#include <QTextEdit>
#include <QWidget>
#include <QFileDialog>
#include <QToolButton>
#include <QStatusBar>
#include <QLabel>
#include <QDateTime>
#include <QTimer>
#include <QPixmap>
#include <QGraphicsScene>
#include <QGraphicsView>
#include <QQmlApplicationEngine>
#include <QIODevice>
#include <iostream>
#include <QTextStream>
#include <QSpacerItem>
#include <QGridLayout>
#include <QHBoxLayout>
#include <QSignalMapper>
using namespace std;

class MainWindow : public QMainWindow
{
    Q_OBJECT

public slots:
    void openFile();
    void myTimeout();
    void loadQml();
    void saveTofile();

signals:

public:
    MainWindow(QWidget *parent = 0);
    ~MainWindow();
private slots:
    void slotColorClick(int i);

private:
    QTextEdit *txtTipComp;
    QVBoxLayout *mainLayout;
    QLabel *label;
    QLabel *lab_pixmap;
    QTimer *timer;
    QGraphicsView* pView;
    QQmlApplicationEngine engine;
    QStringList strlist;
    QSignalMapper signalMapper;
    QLabel *label_color;
};

#endif // MAINWINDOW_H

mainwindow.cpp

#include "mainwindow.h"

const static char *lcolor0 = "color:white; background-color:#000000";
const static char *lcolor1 = "color:black; background-color:#ff0000";
const static char *lcolor2 = "color:black; background-color:#00ff00";
const static char *lcolor3 = "color:black; background-color:#00ffff";
const static char *lcolor4 = "color:white; background-color:#0000ff";
const static char *lcolor5 = "color:black; background-color:#ff00ff";
const static char *lcolor6 = "color:black; background-color:#ecae47";
const static char *lcolor7 = "color:black; background-color:#ffff00";

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{
    this->resize(500,400);  //初始化窗口大小
   // this->setWindowFlags(Qt::FramelessWindowHint);  //设置不显示标题栏

    QMenu *file=new QMenu("File");

    QList<QAction*>actons;
    QAction *Open=new QAction("Open",NULL);
    Open->setShortcut(tr("Ctrl+O"));
    Open->setIcon(QIcon(":/new/prefix1/res/newCreate.png"));
    QAction *Close=new QAction("Close",NULL);
    actons<<Open<<Close;
    file->addActions(actons);

    file->addSeparator();

    QMenu *edit=new QMenu("Edit");
    QAction * Copy=edit->addAction("Copy");
    QAction * Paste=edit->addAction("Paste");
    QAction * Cut=edit->addAction("Cut");


    QMenu *help=new QMenu("Help");
    help->addAction("About...");

    QMenuBar *menuBar=this->menuBar();
    menuBar->addMenu(file); //menuBar()函数会创建一个菜单栏并返回此菜单菜的指针
    menuBar->addMenu(edit);
    menuBar->addMenu(help);

    QToolBar *toobar=addToolBar("toolbar"); //实例化一个工具栏
    toobar->setFixedHeight(30);
    toobar->addAction(Open);


    mainLayout=new QVBoxLayout;
    QWidget *centralWidget=new QWidget;
    setCentralWidget(centralWidget);
    centralWidget->setLayout(mainLayout);

    strlist<<QString(lcolor0)<<QString(lcolor1)<<QString(lcolor2)
              <<QString(lcolor3)<<QString(lcolor4)<<QString(lcolor5)
             <<QString(lcolor6)<<QString(lcolor7);

    QGridLayout *topLayout=new QGridLayout;

    label_color=new QLabel;
    label_color->setStyleSheet(strlist.at(0));
    label_color->setMinimumSize(63,60);
    topLayout->addWidget(label_color,0,0,2,2);
    for(int i=1;i<7;i++)
    {
        QToolButton *btn=new QToolButton;
        btn->setStyleSheet(strlist.at(i));
        if(i<=3)
        {topLayout->addWidget(btn,0,i+1);}
        else
        {topLayout->addWidget(btn,1,i-2);}

        connect(btn, SIGNAL(clicked()), &signalMapper, SLOT(map()));
        signalMapper.setMapping(btn, i);
    }
    topLayout->addItem(new QSpacerItem(1,1,QSizePolicy::Expanding,QSizePolicy::Minimum),0,5);

    mainLayout->addLayout(topLayout);
    txtTipComp = new QTextEdit(this);

    mainLayout->addWidget(txtTipComp);

    //centralWidget->setContentsMargins(0,0,0,-20);


    QStatusBar *statusbar=statusBar();
    label=new QLabel(statusbar);
    statusbar->setStyleSheet(QString("QStatusBar::item{border: 0px}"));
    statusbar->addPermanentWidget(label);



    lab_pixmap=new QLabel;
    lab_pixmap->setPixmap(QPixmap(":/new/prefix1/res/delete.png"));



    QGraphicsScene* pScene = new QGraphicsScene(this);
    pScene->addWidget(lab_pixmap);

    pView = new QGraphicsView(pScene, this);
    pView->setMaximumSize(45,45);

    pView->setFrameShape(QFrame::NoFrame);
    pView->setStyleSheet("background-color:transparent"); //设置背景透明
    statusbar->addWidget(pView);


    timer=new QTimer();
    timer->setInterval(200);
    timer->start();
    connect(timer, SIGNAL(timeout()), this,SLOT(myTimeout()));
    connect(file->addAction("Qml"), SIGNAL(triggered()), this, SLOT(loadQml()));
    connect(Open, SIGNAL(triggered()), this, SLOT(openFile()));
    connect(file->addAction("Save"),SIGNAL(triggered()),this,SLOT(saveTofile()));
    connect(&signalMapper, SIGNAL(mapped(int)), this, SLOT(slotColorClick(int)));
}

MainWindow::~MainWindow()
{

}

void MainWindow::slotColorClick(int i)
{
    label_color->setStyleSheet(strlist.at(i));
}

void MainWindow::openFile()
{
    QString filename = QFileDialog::getOpenFileName(this, tr("open the file"),"../", tr("Text files (*.txt);;Images (*.png *.xpm *.jpg);;XML files (*.xml)"));

    if (filename.isEmpty()) return;

    QFile file(filename);
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text))
    {
        cout<< "Open failed." << endl;
        return;
    }

    QTextStream txtInput(&file);
    QString lineStr;
    while(!txtInput.atEnd())
    {
        lineStr += txtInput.readLine()+"\n";

    }
    txtTipComp->setText(lineStr);
    txtTipComp->update();

    file.close();

}

void MainWindow::myTimeout()
{
    QDateTime time=QDateTime::currentDateTime();
    label->setText(time.toString("yyyy-MM-dd  hh:mm:ss  ddd"));
    pView->rotate(30);
    label->update();
    pView->update();
}

void MainWindow::loadQml()
{

    engine.load(QUrl(QStringLiteral("qrc:/main.qml")));

}

void MainWindow::saveTofile()
{
    QString string=txtTipComp->toPlainText();

    QString filename = QFileDialog::getSaveFileName(this, tr("open the file"),"../", tr("Text files (*.txt);;Images (*.png *.xpm *.jpg);;XML files (*.xml)"));

    if (filename.isEmpty()) return;

    QFile file(filename);
    if(!file.open(QIODevice::WriteOnly | QIODevice::Text))
    {
        cout << "Open failed." << endl;
        return;
    }

    QTextStream txtOutput(&file);
    txtOutput << string;
    file.close();
}

main.cpp

#include <QApplication>
#include "mainwindow.h"


int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    return a.exec();
}

main.qml

import QtQuick 2.4
import QtQuick.Window 2.2
import QtQuick.Controls 1.4
import Qt.labs.folderlistmodel 2.1
import QtQuick.Controls.Styles 1.4

Window {
    id:wnd1
    visible: true
    width: 500
    height: 400

    Rectangle{
        width: 50
        height: 40
        color: "red"
        x:40
        y:40
    }

    Loader{
        id:pageLoader
        x:200
    }

    function changePage() {
        pageLoader.source = "qrc:/color.qml"
        console.log("call changePage");
    }

    Button{
        text: "打开"
        x:100
        y:100
        width:100
        height:40
        style: ButtonStyle
        {
            label: Text
            {
                anchors.centerIn: parent
                horizontalAlignment: Text.AlignHCenter
                verticalAlignment: Text.AlignVCenter
                width:80
                text: control.text
                font.family:"楷体"
                font.pointSize: 10
            }
        }
        onClicked:changePage();
    }

    Item {
        id: name
        x:300
        y:300

        Rectangle{
            id:rect1
            width: 30
            height: 30
            color: "blue"
        }
        Rectangle{
            id:rect2
            width: rect1.width*2
            height: rect1.height
            color:"yellow"
            x:rect1.x+rect1.width
        }

    }

}

cell.qml

import QtQuick 2.0

Item {
    id: container
        property alias cellColor: rectangle.color
        signal clicked(color cellColor)

        width: 40; height: 25

        Rectangle {
            id: rectangle
            border.color: "white"
            anchors.fill: parent
        }

        MouseArea {
            anchors.fill: parent
            onClicked: container.clicked(container.cellColor)
        }
}

color.qml

import QtQuick.Window 2.2
import QtQuick.Controls 1.4
import Qt.labs.folderlistmodel 2.1
import QtQuick.Controls.Styles 1.4
import QtQuick 2.4

Window {   //如果不指定是window窗口,则此文件的内容会嵌入到加载器所在的位置
    id:wnd2
    visible: true
    width: 500
    height: 400
    Item {
        id: name
        Column{
            Row{
                id:row1
                Rectangle{id:rect1;height: 50;width: 50;color:"green"}
                Rectangle{id:rect2;height: 50;width: 50;color:"blue"}
            }
            Row{
                id:row2
                Rectangle{id:rect3;height: 50;width: 50;color:"red"}
                Rectangle{id:rect4;height: 50;width: 50;color:"yellow"}
            }


            Rectangle{
                id:page
                width:300;height:200
                color:"lightgray"
                Text{
                    id:helloText
                    text:"Hello world!"
                    y:30
                 anchors.horizontalCenter:page.horizontalCenter
                 font.pointSize:24;font.bold: true
                }
                Grid{
                    id:colorPicker
                    x:4;anchors.bottom:page.bottom;anchors.bottomMargin: 4
                    rows:2;columns: 3;spacing: 3
                    Cell {cellColor:"red";onClicked:helloText.color=cellColor}
                    Cell { cellColor: "red"; onClicked: helloText.color = cellColor }
                    Cell { cellColor: "green"; onClicked: helloText.color = cellColor }
                    Cell { cellColor: "blue"; onClicked: helloText.color = cellColor }
                    Cell { cellColor: "yellow"; onClicked: helloText.color = cellColor }
                    Cell { cellColor: "steelblue"; onClicked: helloText.color = cellColor }
                    Cell { cellColor: "black"; onClicked: helloText.color = cellColor }
                }
            }
        }
    }
}

 

© 著作权归作者所有

共有 人打赏支持
蓝栩液枫
粉丝 1
博文 27
码字总数 19968
作品 0
深圳
程序员
Qt for iOS,Qt 与Objective C混合编程

因为我写了一系列Qt的博文以及一本书《Qt on Android核心编程》,最近有好几个使用Qt的朋友问起 Qt for iOS 的事情,因为我在这方面的经验特别少,写不出系统的文章来,非常抱歉,不能给出令...

foruok ⋅ 2015/02/02 ⋅ 0

Qt Quick实现的疯狂算数游戏

使用 Qt Quick 写了个小游戏:疯狂算数。支持 Windows 和 Android 两个平台。 游戏简单,但牵涉到下面你的 Qt Quick 主题: 自己实现一个按钮 自适应分辨率 国际化 QML与C++混合编程 APK图标...

foruok ⋅ 2015/01/10 ⋅ 0

Qt Quick调试之显示代码行号

QML 文档可以使用 console 对象来打印日志信息,可默认是无法输出行号的。帮助文档中说需要设置 QMLCONSOLEEXTENDED 环境变量即可,测试了一下不管用。后来找到 qt.gitorious.org 上的一个文...

foruok ⋅ 2014/10/31 ⋅ 0

Qt Quick里的图形效果(Graphical Effects)

Qt Quick 提供了 Graphical Effects ,我在《Qt Quick核心编程》一书中限于篇幅没有介绍,这里补上吧。 Graphical Effects ,姑且叫作图形效果吧。它提供了 Blend 、 Color 等好几类效果,有...

foruok ⋅ 2015/01/14 ⋅ 0

Qt Quick之ListView下拉刷新数据

Qt Quick里的ListView,本身是Flickable的派生类,当你用鼠标拖曳或者手指触摸(触摸屏)时,会产生flickStarted和flickEnded两个信号,利用这两个信号,就可以实现下拉刷新数据,当然上拉刷...

foruok ⋅ 2014/09/04 ⋅ 0

Qt Quick 图像处理实例之美图秀秀(附源码下载)

在《Qt Quick 之 QML 与 C++ 混合编程详解》一文中我们讲解了 QML 与 C++ 混合编程的方方面面的内容,这次我们通过一个图像处理应用,再来看一下 QML 与 C++ 混合编程的威力,同时也为诸君揭...

foruok ⋅ 2014/07/16 ⋅ 0

Qt Quick实例之挖头像

Android手机有个挺好的功能,它允许你往桌面上放窗口小部件(widget),有一个叫相框的小部件,可以让你选择一张相片,截取一部分,放在相框里。我桌面上就放了几个相框,里面是我女儿的照片...

foruok ⋅ 2014/08/23 ⋅ 0

Qt Quick里的图形效果——混合(Blend)

Blend 元素用指定的模式混合两个 Item 。在我们使用 QPainter 绘图时,支持 Composition Modes ,Blend 干的事儿与此类似。 使用 Blend 需要: snippetid="579325" snippetfilename="blog20...

foruok ⋅ 2015/01/14 ⋅ 0

Qt Quick播放Gif动画

Qt Quick提供了一个类 AnimatedImage ,可以播放 Gif 动画,使用简单,这里是一个示例。 这里是用到的 Gif 图片: AnimatedImage AnimatedImage 提供了五个属性: currentFrame,指示当前正在...

foruok ⋅ 2014/12/02 ⋅ 0

Qt Quick里的图形效果——颜色(Color)

Qt Quick提供了通过改变一个 Item 的颜色来产生各种各样效果的元素。有下面几种: BrightnessContrast,调整亮度和对比度 ColorOverlay,在源 Item 上覆盖一层颜色 Colorize,设置源 Item 的...

foruok ⋅ 2015/01/19 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

JEPLUS主从功能配置之主从布局的设置——JEPLUS软件快速开发平台

JEPLUS主从功能配置之主从布局的设置 主从功能配置成功之后就需要根据业务需求来调整主从功能的数据显示方式,不同的主从数据的显示可以达到不同的主从数据显示效果,今天这篇笔记就讲解一下...

JEPLUS ⋅ 2分钟前 ⋅ 0

如何利用极光推送的新功能玩转世界杯营销

四年一次的世界杯已经于6月14日开赛!对于app的运营人员而言,这场远在俄罗斯的绿茵征战绝不仅仅牵动着球迷们的心,更拨动着众多互联网企业运营人员的神经。在这场营销大战中,push显然是app...

极光推送 ⋅ 6分钟前 ⋅ 0

Spring Cloud构建微服务架构-Hystrix依赖隔离

依赖隔离 “舱壁模式”对于熟悉Docker的读者一定不陌生,Docker通过“舱壁模式”实现进程的隔离,使得容器与容器之间不会互相影响。而Hystrix则使用该模式实现线程池的隔离,它会为每一个Hys...

itcloud ⋅ 8分钟前 ⋅ 0

SpringCloud 微服务 (八) 统一配置中心 Config Server&Client

壹 Spring Cloud Config 统一配置中心,方便维护配置文件,对一些公司对数据库密码等敏感的信息,对普通开发人员不公开,放在运维人员手上,对配置作一个隔离作用,另外项目线上的配置改动都要重新...

___大侠 ⋅ 12分钟前 ⋅ 0

echarts轮播地图并结合鼠标浮动点击

直接上代码 timeId=setInterval(function () { if(count<11){ myChart.dispatchAction({ type: 'downplay', ......

莫西摩西 ⋅ 15分钟前 ⋅ 0

基于 HTML5 的工业互联网 3D 可视化应用

工业企业中生产线处于高速运转,由工业设备所产生、采集和处理的数据量远大于企业中计算机和人工产生的数据,生产线的高速运转则对数据的实时性要求也更高。破解这些大数据就是企业在新一轮制...

xhload3d ⋅ 17分钟前 ⋅ 0

Nging启动与停止bat

start_nginx.bat @echo off  f:  cd F:\server\nginx-1.13.6  echo "nginx is starting on port 80"  start "" "nginx.exe"  exit   stop_nginx.bat @echo off::windows ......

Jay丶 ⋅ 19分钟前 ⋅ 0

SuRF: 一个优化的 Fast Succinct Tries

作者:唐刘 在前一篇文章中,我简单介绍了 Succinct Data Structure,这里我们继续介绍 SuRF。 Fast Succinct Tries SuRF 的核心数据结构就是 Fast Succinct Tries(FST),一种空间节省,支...

TiDB ⋅ 23分钟前 ⋅ 0

Kubernetes(六) - Secret和私有仓库认证

对一个公司来说安全也是最为重要的因为可能一旦出现安全问题可能这个公司就完了,所以对密码管理是一个长久不变的话题,Kubernetes对密码管理提供了Secret组件进行管理,最终映射成环境变量,文件...

喵了_个咪 ⋅ 25分钟前 ⋅ 0

DevOps的三大原则

DevOps的出现有其必然性。在软件开发生命周期中,遇到了两次瓶颈。第一次瓶颈是在需求阶段和开发阶段之间,针对不断变化的需求,对软件开发者提出了高要求,后来出现了敏捷方法论,强调适应需...

inidcard ⋅ 25分钟前 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部