QT - Cpp 操作集合

 

#include <QDebug>
#define cout qDebug() << "["<< __FILE__ << ":"<< __LINE__ << "]"

stream >> str >> a;
cout<< str.toUtf8().data() <<a;

 

一 、设置窗口属性

二 、 按钮的创建

三 、信号与槽

四 、菜单栏、工具栏、状态栏、铆接控件、中心控件、资源文件

五 、对话框

六 、标签

七 、行编辑

八、定时器

九 、鼠标事件、滚轮事件、键盘事件、窗口改变事件、进入离开事件

十二、TCP/IP通信

十三 、UDP通信过程

十四、事件过滤器


一 、设置窗口属性

#include "widget.h"

Widget::Widget(QWidget *parent)  //窗口大小
    : QWidget(parent)
{
    this->setWindowTitle("hello qt"); //设置窗口的标题
    this->resize(1400,864); //设置窗口的大小 可拉伸
    this->setFixedSize(1400,864); //设置串口大小 不可拉伸
}


Widget::~Widget()
{

}

 

二 、 按钮的创建

创建按钮对象

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget> //所有控件的基类 就是一个窗口
#include<QPushButton>


class Widget : public QWidget //Widget类继承了QWidget类
{
    Q_OBJECT //信号处理工具

public:
    Widget(QWidget *parent = 0); //构造函数
    ~Widget();
    
    QPushButton *button_none;
 

public slots:      //自定义槽函数


protected:

};

#endif // WIDGET_H

设置按钮属性

  //如果不给按钮指定父对象 那么按钮和窗口单独显示
  //若按钮有指定父对象,只要父对象显示 按钮也会显示    
//QPushButton button;
    button_none = new QPushButton;  //不释放会导致内存泄漏
  //button = new QPushButton("登录"this) //构造函数时 指定父对象及设置文本

    button_none->show();
    button_none->setParent(this); //指定按钮的父类是窗口
    button_none->resize(100,70); //设置按钮的大小
    button_none->move(300,200); //设置在窗口中的位置
    button_none->setText("登录"); //设置按钮的文本

三 、信号与槽

1)系统自带的信号与槽

    button_close = new QPushButton;
    connect(button_close,&QPushButton::clicked,this,&QWidget::close); //设置点击按钮

connect(信号发出对象,发出的信号,接收信号的对象,接收对象的槽函数)

2)自定义槽

class Widget: public QWidget
{
    Q_OBJECT

public:
    AddressWidget(QWidget *parent = 0);
    void readFromFile(const QString &fileName);

public slots:
    void showAddEntryDialog();
    void addEntry(QString name, QString address);

signals:
    void selectionChanged (const QItemSelection &selected);

private:
    void setupTabs();

};
void widget::showAddEntryDialog(){

    setupTabs();

}

3)自定义信号

class NewAddressTab : public QWidget
{
    Q_OBJECT

public:
    NewAddressTab(QWidget *parent = 0);

signals:
    void showdata(int a);

public slots:
    void emitsignal();

private:
    QLabel *descriptionLabel;
    QPushButton *addButton;
    QVBoxLayout *mainLayout;

};
void QWidget::emitsignal(){

    emit showdata(10);

}

 

4)lambda表示

    lambda应用
    int a=3,b=10
    connect(button,&QPushButton::clicked,this,[a,b](){   //槽函数的lambda表示
    connect(button,&QPushButton::clicked,this,[=](){     //将所有局部变量以值传递的形式传递,但是不可改变a的值
    connect(button,&QPushButton::clicked,this,[=]()mutable{   //可以改变a的值,但仅限于函数内部 外部值未改变
    connect(button,&QPushButton::clicked,this,[&a]()mutable{  //引用形式,改变函数内部与外部的值
    connect(button,&QPushButton::clicked,this,[&]()mutable{
        qDebug()<<a;
        qDebug()<<b;
    });

四 、菜单栏、工具栏、状态栏、铆接控件、中心控件、资源文件

1)菜单栏、工具栏、状态栏

#include "mainwindow.h"
#include<QMenuBar>
#include<QMenu>
#include<QAction>
#include<QToolBar>
#include<QStatusBar>
#include<QLabel>
#include<QTextEdit>
#include<QDockWidget>

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
{

    this->resize(600,400);

    QMenuBar *menubar1 = this->menuBar();  //取出菜单栏
    QMenu * filemenu =  menubar1 -> addMenu("文件");  //向菜单栏上 添加菜单
    QMenu * fileedit =  menubar1 -> addMenu("编辑");
    QAction *openaction = filemenu->addAction("打开");  //向菜单添加菜单项
    filemenu->addSeparator(); //添加分割线
    QAction *saveaction = filemenu->addAction("保存");
 
    QToolBar *toolbar = this->addToolBar(""); //获取工具栏
    toolbar->addAction(openaction); //向工具栏中 添加工具(添加菜单项) 工具栏是菜单项的快捷方式
    toolbar->addAction(saveaction);
    QStatusBar *status = this->statusBar();    //取出状态栏
    status->addWidget(new QLabel("状态"));

}

MainWindow::~MainWindow()
{

}

4)铆接控件、中心控件

    QDockWidget *dockwidget = new QDockWidget("这是一个铆接部件",this);
    this->addDockWidget(Qt::TopDockWidgetArea,dockwidget); //讲浮动窗口添加到mainwindow
    
    //核心部件(中心部件)
    
    QTextEdit *edit = new QTextEdit("文本编辑器",this);
    this->setCentralWidget(edit);

6)资源文件

五 、对话框

1)标准对话框

    button_infor = new QPushButton;
    button_infor->setText("消息"); //设置按钮的文本

    connect(button_infor,&QPushButton::clicked,this,[&]()
    {

        //QMessageBox::about(this,"消息对话框","显示内容");  //不引用无法指定父对象

        int ret = QMessageBox::question(this,"标题","你需要吗",QMessageBox::Open|QMessageBox::Save);
        if(ret == QMessageBox::Open)
        {
            qDebug()<<"open";
        }


    });

2)模态对话框

 

3)飞模态对话框

 

六 、标签

行编辑超链接、图片、动态图

    QLabel_1 = new QLabel(this);
    QLabel_1->resize(200,100);
    QLabel_1->move(10,300);
  //QLabel_1->setText("标签_1");
    QLabel_1->setText("<a href=\"http://www.baidu.com\">标签:百度一下</a>");//标签超链接
    QLabel_1->setOpenExternalLinks(true);

    QLabel_pic = new QLabel(this); //设置标签的图片
    QLabel_pic->resize(100,100);
    QLabel_pic->move(10,50);
    QLabel_pic->setPixmap(QPixmap(":/new/prefix1/Tencent.jpg"));
    QLabel_pic->setScaledContents(true);  //设置图片自适应大小
  //QLabel_2->setPixmap(QPixmap("qrc:/new/prefix1/Tencent.jpg"));

    QLabel_gif = new QLabel(this); //设置标签的动态图
    QLabel_gif->resize(100,100);
    QLabel_gif->move(20,200);
    QLabel_gif->setText("标签_333");
  //QMovie *gifmove = new QMovie("qrc:/new/prefix1/Tencent.jpg"); //动态图地址
  //QLabel_gif->setMovie(gifmove);
  //QLabel_gif->setScaledContents(true);  //设置图片自适应大小
  //gifmove->start();

 

七 、行编辑

行编辑:内容、显示模式、位置

    lineEdit_2 = new QLineEdit(this);
    lineEdit_2->setObjectName(QStringLiteral("lineEdit_2"));
    lineEdit_2->setGeometry(QRect(210, 170, 120, 71));
    lineEdit_2->setText("哈哈qwe");
    qDebug()<<lineEdit_2->text();
    //设置行编辑的显示模式

   //lineEdit_2->setEchoMode(QLineEdit::Password);  //显示为密码模式
    lineEdit_2->setEchoMode(QLineEdit::PasswordEchoOnEdit);  //显示为密码模式
    lineEdit_2->setTextMargins(100,0,0,0);//设置输入文本在行编辑中的位置

 

八、定时器

Pro文件操作

    button_time->setText("超时"); //设置按钮的文本
    connect(button_time,&QPushButton::clicked,this,&Widget::time); //点击按键开始计时
    
    void Widget::time()
    {

        qDebug()<<"自定义槽函数";
        time_event = new QTimer;
        time_event->start(1000);
        connect(time_event,&QTimer::timeout,this,[](){
        qDebug()<<"00000";
        qDebug()<<"超时事件";
        });
    }

 

 

九 、鼠标事件、滚轮事件、键盘事件、窗口改变事件、进入离开事件

    void mousePressEvent(QMouseEvent *event); //鼠标点击事件
    void mouseMoveEvent(QMouseEvent *event); //鼠标移动事件
    void wheelEvent(QWheelEvent *event);  //鼠标滚轮事件
    void keyPressEvent(QKeyEvent *event);

    void resizeEvent(QResizeEvent *event);

    void enterEvent(QEvent *event);  //鼠标进入事件
    void paintEvent(QPaintEvent *event);
void Widget::mousePressEvent(QMouseEvent *event)
{

        qDebug()<<"鼠标点击"<<event->x()<<event->y();
        i=event->x();
        j=event->y();
        //刷新绘图
        this->update();

    if(event->button()==Qt::LeftButton)
    {

        qDebug()<<"点击左键";
    }
    else if(event->button()==Qt::RightButton)
        {
                qDebug()<<"点击右键";
    }

}

void Widget::mouseMoveEvent(QMouseEvent *event)  //鼠标点击状态下移动事件
{

    qDebug()<<"鼠标点击状态下移动"<<event->x()<<event->y();

}


void Widget::wheelEvent(QWheelEvent *event)  //滚轮事件判定
{

    if(event->orientation()==Qt::Vertical) //如果方向是垂直
    {
        //QPoint point=e->angleDelta();
       // QString str = QString("滚轮垂直华东(%1,%2)");
       //.arg(point.x()).arg(point.y());

        qDebug()<<"滚轮事件"<<event->x()<<event->y();
  }

}


void Widget::keyPressEvent(QKeyEvent *event)
{

    qDebug()<<event->key();
    if(event->modifiers()==Qt::ShiftModifier)
    {
        qDebug()<<"按下shift";

    }

}

 

十、绘制图形

 

 

十一 、自定义事件(滑动条)

 

十二、TCP/IP通信

1)服务器

Pro文件添加网络属性

QT       += core gui network

定义行编辑模式

    /********************************************************
            获取行编辑内容 QLineEdit
    *********************************************************/
    lineEdit_recv_area = new QLineEdit(this);
    lineEdit_recv_area->setObjectName(QStringLiteral("lineEdit_2"));
    lineEdit_recv_area->setGeometry(QRect(70, 35, 400, 70));
    lineEdit_recv_area->setText("recv-接收端");
    lineEdit_recv_area->setReadOnly(true);  // 只读模式

    lineEdit_send_area = new QLineEdit(this);
    lineEdit_send_area->setObjectName(QStringLiteral("lineEdit_2"));
    lineEdit_send_area->setGeometry(QRect(70, 130, 400, 70));
    lineEdit_send_area->setText("emit-发射端");

建立链接

    tcp_server=NULL;    //服务器
    tcp_socket=NULL;    //客户端

     tcp_server = new QTcpServer(this);  //监听套接字 指定父对象,让其自动回收空间
     tcp_socket = new QTcpSocket(this);  //通信套接字

     tcp_server->listen(QHostAddress::Any,8888);  //监听完毕
     connect(tcp_server,QTcpServer::newConnection,[=](){

         tcp_socket = tcp_server->nextPendingConnection();  //取出对方主动连接的发出的套接字
         QString ip = tcp_socket->peerAddress().toString();  //获取对方的IP和窗口
         qint16 port = tcp_socket->peerPort();
         QString temp = QString("[%1:%2]:当前连接成功").arg(ip).arg(port);
         lineEdit_send_area->setText(temp);
     });

发送内容

     connect(button_send,&QPushButton::clicked,this,[=](){

        if(NULL == tcp_socket)
        {

            return;
        }

        QString str = lineEdit_send_area->text(); //获取编辑区内容
        tcp_socket->write(str.toUtf8().data()); //给对方发送数据,使用套接字是tcpsocket
        qDebug()<<str; //将获取的字符 转换为字符串模式

        connect(tcp_socket,&QTcpSocket::readyRead,[=](){
            
            QByteArray array = tcp_socket->readAll(); //从通信套接字中取出内容
            lineEdit_recv_area->setText(array);

        });

     });

断开链接

     connect(button_close,&QPushButton::clicked,this,[=](){  //主动与客户端断开连接

         if(NULL == tcp_socket)
         {

             return;
         }

        tcp_socket->disconnectFromHost();
        tcp_socket->close();
        tcp_socket=NULL;
     });

 

2)客户端

行编辑+文本编辑区

获取IP和端口 建立链接

 

 

 

 

十三 、UDP通信过程

UDP = 写信 ,TCP = 打电话

十四 、文件操作

1)读文件

 

2)写文件

 

3)获取文件信息

 

十五 、TCP文件传输

先发head定时20ms,在定时器的槽函数中发送文件,避免连包的情况

十六、多线程操作

QT4.7版本线程处理方式

 

十七、复选框

十八、单选按钮

十九、列表控件

二十、表格控件

 

二十一、事件过滤器

1.创建事件过滤器

virtual bool QObject::eventFilter(QObject *watched,QEvent *event)  //建立事件过滤器

如果watch对象已安装事件过滤器,则调用该函数 并进行事件过滤
为mainwindow创建事件过滤器,过滤某个组件上的事件。首先判断属于哪个组件,然后判断这个事件的类型。

bool MainWindow::eventFilter(QObject  *obj, QEvent *event)
{
    if (obj == textEdit) {
        if (event->type() == QEvent::KeyPress) {
            QKeyEvent *keyEvent = static_cast<QKeyEvent*->(event);
            qDebug() << "Ate key press" <<  keyEvent->key();
            return true;
        } 
        else {
            return false;
        }
    }
    
    else {
        // pass the event on  to the parent class
        return  QMainWindow::eventFilter(obj, event);
    }
}

2.安装事件过滤器

安装事件过滤器 ,过滤器的组件 优先调用过滤器函数 然后调用事件函数
void QObject::installEventFilter(QObject *filterObj)

二十二、布局

1、List列表

(1) List列表 - listwidget.h

#ifndef LISTWIDGET_H
#define LISTWIDGET_H
#include  <QtGui>
class ListWidget : public QWidget
{
public:
    ListWidget();
private:
    QLabel *label;
    QListWidget *list;
};
#endif // LISTWIDGET_H

(2) List列表 -  listwidget.cpp

#include "listwidget.h"
ListWidget::ListWidget()
{
    label= new QLabel;
    label->setFixedWidth(70);
    list= new QListWidget;

    list->addItem(new QListWidgetItem(QIcon(":/images/line.PNG"),tr("Line"))); //添加的对象是QListWidgetItem的指针
    list->addItem(new QListWidgetItem(QIcon(":/images/rect.PNG"),tr("Rectangle"))); //item的图标 文字说明
    list->addItem(new QListWidgetItem(QIcon(":/images/oval.PNG"),tr("Oval")));
    list->addItem(new QListWidgetItem(QIcon(":/images/tri.PNG"),tr("Triangle")));
    
    QHBoxLayout *layout = new QHBoxLayout;
    layout->addWidget(label);
    layout->addWidget(list);
    setLayout(layout);
    
    connect(list,SIGNAL(currentTextChanged(QString)),label,SLOT(setText(QString)));
}

(3) List列表 -  main.cpp

#include  <QtGui>
#include "listwidget.h"
int main(int argc, char  *argv[])
{
    QApplication a(argc, argv);
    
    ListWidget lw; //建立一个ListWidget类
    lw.resize(400, 200);
    lw.show();
    
    return a.exec();
}

 

 

2、tree树形

(1) tree树形 - treewidget.h

#ifndef TREEWIDGET_H
#define TREEWIDGET_H
#include  <QtGui>
class TreeWidget : public QWidget
{
public:
    TreeWidget();
private:
    QTreeWidget *tree;
};
#endif  // TREEWIDGET_H

 

(2)tree树形 - treewidget.cpp

#include  "treewidget.h"
TreeWidget::TreeWidget()
{
    tree = new QTreeWidget(this);
    tree->setColumnCount(1);  //设定栏数
    //QTreeWidgetItem::QTreeWidgetItem(QTreeWidget *parent,constQStringList &strings,int type = Type);
    //item属于的树 ,item显示的文字 ,item的类型

    QTreeWidgetItem *root = new QTreeWidgetItem(tree,QStringList(QString("Root")));
    QTreeWidgetItem *leaf = new QTreeWidgetItem(root,QStringList(QString("Leaf 1")));
    root->addChild(leaf);
    QTreeWidgetItem *leaf2 = new QTreeWidgetItem(root,QStringList(QString("Leaf 1")));
    leaf2->setCheckState(0, Qt::Checked);
    root->addChild(leaf2);
    QList<QTreeWidgetItem *> rootList;
    rootList << root;
    tree->insertTopLevelItems(0, rootList);
}

#include  "listwidget.h"
TreeWidget::TreeWidget()
{
    tree = new QTreeWidget(this);
    tree->setColumnCount(2); //设定栏数
    QStringList headers;
    headers << "Name" << "Number";
    
    tree->setHeaderLabels(headers);
    QStringList rootTextList;
    rootTextList << "Root" << "0";
    
    
    QTreeWidgetItem *root = new QTreeWidgetItem(tree,rootTextList);
    QStringList  leafTextList;
    leafTextList << "Leaf 1" << "1";
    QTreeWidgetItem *leaf = new QTreeWidgetItem(root,leafTextList);
    root->addChild(leaf);
    
    QStringList leaf2TextList;
    leaf2TextList << "Leaf 2" << "2";
    QTreeWidgetItem *leaf2 = new QTreeWidgetItem(root,leaf2TextList);
    leaf2->setCheckState(0, Qt::Checked);
    root->addChild(leaf2);
    QList<QTreeWidgetItem *> rootList;
    rootList << root;
    tree->insertTopLevelItems(0, rootList);
}

 

(3)

 

 

3、table表格

(1)  tablewidget.h

#ifndef TABLEWIDGET_H
#define  TABLEWIDGET_H
#include <QtGui>
class TableWidget : public QWidget
{
public:
    TableWidget();
private:
    QTableWidget *table;
};
#endif // TABLEWIDGET_H

 

 

(2)  tablewidget.cpp

#include "tablewidget.h"
TableWidget::TableWidget()
{
    table = new QTableWidget(this);
    table->setColumnCount(3); //设置列数
    table->setRowCount(5); //设置行数
    QStringList headers;
    headers << "Line Number" << "ID" << "Name" << "Age"<< "Sex";
    table->setHorizontalHeaderLabels(headers);
    table->setItem(0, 0, new QTableWidgetItem(QString("1"))); //按坐标放置
    table->setItem(1, 0, new QTableWidgetItem(QString("2")));
    table->setItem(2, 0, new QTableWidgetItem(QString("3")));
    table->setItem(3, 0, new QTableWidgetItem(QString("4")));
    table->setItem(4, 0, new QTableWidgetItem(QString("5")));
    table->setItem(0, 1, new QTableWidgetItem(tr("20100112")));
}

 

(3)

 

 

 

 - - END - - 

 

 

 

 

 

 

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值