精华内容
下载资源
问答
  • Qt快速上手必备手册

    2018-02-28 15:14:46
    为了使更多的Qt初学者能尽快入门Qt,也为了QtQt Creator的快速普及,我们花费大量精力写出了这一系列教程。虽然教程的知识可能很浅显,虽然教程的语言可能不规范,但是它却被数十万网友所认可。我们会将这一系列...
  • QT快速上手_笔记一

    2020-07-27 15:09:56
    比如QT里的QLabel和QLineEdit都是继承的QWidget类。实现了更多个细化的功能。继承有公有,私有保护的继承方式 容器 对象 友元 this指针 this 指针记录对象的内存地址,比如一个类内部有一个this,这个类的实例对象中...

    1.需要补习的C++知识

    类,派生,父类子类

    StackDlg::StackDlg(QWidget *parent)
        : QDialog(parent)
    
    对应语法:
    
            派生类::派生类构造函数(总参数列表):基类构造函数(参数列表)  //基类构造函数的参数列表是实参。
    {
    派生类中的数据成员初始化;
    
    } 
    

    构造函数&析构函数

    构造函数在对象实例化时被系统自动调用,仅且调用一次。定义类时,如果没有定义构造函数和析构函数,编译器会自动生成一个构造函数和析构函数,只是内部为空。
    构造函数的名称与类的名称是完全相同,无任何范返回类型(void 也不行)。构造函数可用于为某些成员变量设置初始值。构造函数也可以带有参数
    析构函数的名称与类的名称是完全相同的,只是在前面加了个波浪号(~)作为前缀,目的是释放资源。
    写法如下

    #include <iostream>
    using namespace std;
    class Demo
    {
        public:
            Demo(); //构造函数
            ~Demo(); // 析构函数
    };
    Demo::Demo()
    {
        cout << "构造函数" << endl;
    }
    Demo::~Demo() 
    {
        cout << "析构函数"<<endl;
    }
    

    继承

    继承目的就是站在基础类上扩展更多的功能。比如QT里的QLabel和QLineEdit都是继承的QWidget类。实现了更多个细化的功能。继承有公有,私有保护的继承方式

    容器

    对象

    友元

    this指针

    this 指针记录对象的内存地址,比如一个类内部有一个this,这个类的实例对象中,this就是指向这个对象。这也是为什么只有类的成员函数才能有this这个玩意了,其实和python的self有着相同之处。

    虚函数 纯虚函数 多态

    new

    new 出来的对象都是匿名,没有名字,然后需要一个指针来指向它,再借助指针访问其成员变量。对象指针后可通过->来指向成员变量和成员函数

    堆和栈

    堆,英文是 heap,在内存管理的语境下,指的是动态分配内存的区域。这个堆跟数据结构里的堆不是一回事。这里的内存,被分配之后需要手工释放,否则,就会造成内存泄漏。C++ 标准里一个相关概念是自由存储区,英文是 free store,特指使用 newdelete 来分配和释放内存的区域。一般而言,这是堆的一个子集:

    • newdelete 操作的区域是 free store
    • mallocfree 操作的区域是 heap

    newdelete 通常底层使用 mallocfree 来实现,所以 free store 也是 heap。鉴于对其区分的实际意义并不大,在本专栏里,除非另有特殊说明,我会只使用堆这一术语。
    栈,英文是 stack,在内存管理的语境下,指的是函数调用过程中产生的本地变量和调用数据的区域。这个栈和数据结构里的栈高度相似,都满足“后进先出”(last-in-first-out 或 LIFO)。
    实例对象的时候,使用New实例的都是在堆里,使用 className objName的是在栈区实例化

    重载

    重载就是同名函数,但是参数列表不一样。然后调用的时候会根据参数来选择最合适的函数

    重载分为函数重载运算重载

    展开全文
  • QT快速上手_笔记二

    2020-07-27 15:10:56
    2.2 Qt 之 QStackedWidget(多页面切换) setCurrentIndex 为共有槽函数,设置索引index所在的页面为当前页面 一般情况,常用的两种方式: 根据currentWidget()来判断当前页面,然后通过setCurrentWidget()来设置需要...

    2.1 UI

    2.1.1 三个基类

    这三者一般都是顶层窗口部件(没有父窗口)。

    • widget右上角是缩小放大和退出,是很多简单应用窗口的顶层窗口。
    • mainwindow可以设置的是带有菜单和工具栏的顶层窗口,什么是菜单工具栏呢?你可以打开你的word文档看看,左上角有文件,开始,插入等等的是菜单栏,有一些图标则是工具栏。
    • dialog右上角是问号和关闭,它主要用来和用户进行简单交互,比如你安装一个软件会让你点下一步下一步继续安装的,很多是dialog。

    2.1.2 ui 指针可以访问可视化设计的界面组件

    2.1.3 layout

    • 对于存在Layout(布局)方式的Widget(窗口),setGeometry()函数只能设置(x,y),在设置宽高上不起作用,需改用setFixedSize()函数;
    • 先定义控件的最小size,再放进layout里。button->setMinimumSize(200,100); hLayout1->addWidget(button);

    2.2 Qt 之 QStackedWidget(多页面切换)

    setCurrentIndex 为共有槽函数,设置索引index所在的页面为当前页面
    一般情况,常用的两种方式:
    根据currentWidget()来判断当前页面,然后通过setCurrentWidget()来设置需要显示的页面。
    根据currentIndex()来判断当前页面索引,然后通过setCurrentIndex()来设置需要显示的页面

    2.3 qt布局不随窗口变化

    只需要点空白处,然后给对象指定一个布局,水平或者垂直即可

    2.4 QAbstractItemView类

    QAbstractItemView类提供项目视图类的基本功能。
    QAbstractItemView类是一个基类,它为每个标准视图,使用QAbstractItemModel。QAbstractItemView是一个抽象类并且本身不能被实例化。它和模型通过信号和槽机制为互操作提供了一个标准接口,使子类来保持最新的与他们的模型的变化。该类提供了键盘和鼠标导航,视图滚动,编辑项目和选择的标准支持

    2.5 构造函数头部1

    Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget)
    

    其意义是:执行父类 QWidget 的构造函数,创建一个 Ui::Widget 类的对象 ui。这个 ui 就是 Widget 的 private 部分定义的指针变量 ui。

    2.6 多线程

    2.6.1 QThread

    方法1步骤:

    • a1 新建一个类MyThread,基类为QThread。
    • a2 重写类MyThread的虚函数void run();,即新建一个函数protected void run(),然后对其进行定义。
    • a3 在需要用到多线程的地方,实例MyThread,然后调用函数yThread::start()后,则开启一条线程,自动运行函数run()。
    • a4 当停止线程时,调用MyThread::wait()函数,等待线程结束,并且回收线程资源。

    注:调用后会执行run()函数,但在run()函数执行前会发射信号started()
    方法2步骤(moveToThread):

    • a1 新建一个QObject的派生类Myclass
    • a2 搞定signal和slot
    • a3 实例一个QThread thread,实例一个Myclass myclass
    • a4 myclass.moveToThread(&thread)
    • a5 connect
    • a6 thread.start()

    2.6.2 concurrent

    2.7 TextEdit区别

    • QLineEdit是单行文本输入,一般用于用户名、密码等少量文本交互地方。
    • QTextEdit用于多行文本,也可以显示HTML格式文本。QTextEdit多用于显示
    • QPlainTextEdit与QTextEdit很像,但它多用于需要与文本进行处理的地方,而QTextEdit多用于显示,可以说,QPlainTextEdit对于plain text处理能力比TextEdit强。(比如文本编辑器就用Qplain Text Edit)

    2.8processEvents函数

    主要是将正在处理的事件的控制权还给Qt,通俗点来说就是,正在干的事情太耗时间了,加了processEvents函数后,会把这个耗时间的东西踢出来,自己一个去慢慢耗

    2.9 原子操作

    "原子操作(atomic operation)是不需要synchronized

    2.10 哈希表

    2.11 阻塞非阻塞 异步同步

    阻塞得到结果此线程前不能去做别的事调用结果返回前线程的状态
    非阻塞得到结果前可以去干别的事
    同步得到的结果方式是主动等待的消息通知机制
    异步得到结果的方式是被动通知(回调)的

    2.12 mutex互斥锁

    QMutex  mutex;
    QWaitCondition  newdataAvailable;
     ···
    newdataAvailable.wait(&mutex);//  <<---本句意思
    

    其实是解锁mutex,newdataAvailable进入等待,阻塞唤醒条件,等到唤醒之后重新锁定mutex,然后退出阻塞,再执行之后的代码

    2.13 信号量

    一个互斥量只能被锁定一次,但是信号量可以多次使用
    QSemaphore

    2.14 信号与槽

    2.14.1

    connect的第五个参数有几个枚举类型

    • AutoConnection 自动连接
      发出信号的线程。。。
    • DirectConnection 直连
      可以理解为该信号的槽函数就在emit发射信号的时候一起调用了,所以是和信号发射这个线程同一个线程
    • QueuedConnection 队列
      槽函数在接收对象的生存线程里,和发射信号的线程并没有关系
      比如有多个信号发射,不想每个信号发射完就执行相关的槽,而是等所有信号全部发射完在执行所有的槽函数,就可以用队列连接,这个时候就要等到进入事件循环里面才会开始执行槽。

    2.14.2 不同类间的连接

    不同类之间信号与槽的对应,需要三个步骤:
    1)在类A里定义发射信号,使用emit()方法,发射信号A_signal();

    2)在类B里定义槽函数B_slot();

    3)在主函数main()里,使用类A、B分别实例化两个对象a、b。

    然后使用connect(a, QtCore.SIGNAL(‘A_signal()’), b.B_slot)

    2.15 事件循环

    • 事件循环一般用exec()函数开启。QApplicaion::exec()、QMessageBox::exec()都是事件循环。其中前者又被称为主事件循环。
    • 事件循环首先是一个无限“循环”,程序在exec()里面无限循环,能让跟在exec()后面的代码得不到运行机会,直至程序从exec()跳出。从exec()跳出时,事件循环即被终止。QEventLoop::quit()能够终止事件循环。
    • 其次,之所以被称为“事件”循环,是因为它能接收事件,并处理之。当事件太多而不能马上处理完的时候,待处理事件被放在一个“队列”里,称为“事件循环队列”。当事件循环处理完一个事件后,就从“事件循环队列”中取出下一个事件处理之。当事件循环队列为空的时候,它和一个啥事也不做的永真循环有点类似,但是和永真循环不同的是,事件循环不会大量占用CPU资源。
    • 事件循环的本质就是以队列的方式再次分配线程时间片

    2.16 TCP通信

    网络监听:网络监听是一种监视网络状态、数据流程以及网络上信息传输的管理工具,它可以将网络界面设定成监听模式,并且可以截获网络上所传输的信息,不过只能应用于连接同一网段的主机
    socket:套接字Socket=(IP地址:端口号),通信时其中一个网络应用程序将要传输的一段信息写入它所在主机的 Socket中,该 Socket通过与网络接口卡(NIC)相连的传输介质将这段信息送到另外一台主机的 Socket中,使对方能够接收到这段信息。 Socket是由IP地址和端口结合的,提供向应用层进程传送数据包的机制

    展开全文
  • Qt快速上手(三):编程示例

    千次阅读 2018-07-17 19:50:05
    10. setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);  11. //WindowStaysOnTopHint设置窗口再最上端,FramelessWindowHint设置无边窗口  12. this->...

    实现几个窗口间的交互+一个软键盘

     

    创建一个项目,基类选择QWidget,类名用Widget。创建完成后进入widget.ui界面。

    点击主页面,找到右下角的minimumSize大小和geometry里面的大小,都设置800x600。

    从左侧栏拖出一个Label控件和四个PushButton控件,Label控件设置窗口最小值和geometry的大小都为300x100,

    PushButton控件都设置为200x50。右键Label控件,选择“改变样式表”,在窗口中输入font: 57 36pt "Ubuntu";Label文本更改为“Qt编程示例”,按钮的文本改为”Mykeyboard”、”To Dialog”、”Result”、”Quit”如图所示

    从左侧栏拖出一个Vertical Layout,把四个按钮放进去,然后在右下角的vertical layout属性设置修改为如图所示

     

    从左侧栏拖出两个Horizontal Spacer放在左右两边,然后把两个个Horizontal Spacer 和 Label 以及刚才的Vertical Layout框全部选中,点击主页面上面的      这个按钮。右下角的layoutSpacing设置为50,完成后如图

     

    再从左侧拖入两个Vertical Spacer放在上下两边,然后选中两个Vertical Spacer和中间这个Horizontal Spacer大框,点击上面的垂直布局按钮。最后,找块主页面的空白地方,再次点击上面的垂直布局或者水平布局(这步不可少)。完成后如下图

     

    为使中文不显示乱码,可以在main.cpp中加入<QTextCodec>头文件,和代码QTextCodec::setCodecForTr(QTextCodec::codecForName("UTF-8"));

    按前面说过的方法添加资源文件,在widget.cpp中使用如下代码给widget加入图片背景

     

    1.QPixmap pixmap(":/img5.png");  
    2.QPalette palette = this->palette();  
    3.palette.setBrush(QPalette::Background,QBrush(pixmap.scaled(QApplication::desktop()->size())));  
    4.this->setPalette(palette);  

     

    第三行用到了desktop的函数要引入<QDesktopWidget>头文件。

    运行

     

    在刚才的项目中添加新文件,选择Qt设计师界面类,界面模板选择Dialog without Buttons,类名用Dialog,拖入一个Label,然后按照前面的方法进行格式设置(窗口大小,布局,字体等),完成后如下图

     

     

    按照前面的代码在dialog.cpp中也加入一个图片背景。

    在widget.h中加入#include "dialog.h"和一个成员Dialog *mydialog,在widget.cpp的构造函数中加入mydialog = new Dialog(this) ;代码

    然后进入widget.ui中,右键To Dialog按钮,选择转到槽,选择clicked(),确定后在跳转的函数体中加入mydialog->show();

    此时我们运行程序,点击To Dialog按钮就能出现Dialog的窗口了。

     

    继续在widget.ui中,右键Quit按钮,转到槽,选择clicked(),在函数体添加close();

    此时运行程序,点击Quit按钮就能关闭窗口了。

     

    软键盘的实现

    继续在刚才的项目中添加新文件,选择Qt设计师界面类,界面模板选择Dialog without Buttons,类名用Mykeyboard。

    软键盘就是供鼠标点击使用的键盘,整体思想就是信号与槽实现按下某个键时(鼠标按下某个按钮),文本输入框上显示出当前按下的键。

    当按下确定键时,将文本显示在Result窗口中。

     

    mykeyboard.h中的代码

    1.#ifndef MYKEYBOARD_H  
    2.#define MYKEYBOARD_H  
    3.  
    4.#include <QDialog>  
    5.#include <QToolButton>  
    6.#include <QLineEdit>  
    7.  
    8.namespace Ui {  
    9.class Mykeyboard;  
    10.}  
    11.  
    12.class Mykeyboard : public QDialog  
    13.{  
    14.    Q_OBJECT  
    15.  
    16.public:  
    17.    explicit Mykeyboard(QWidget *parent = 0);  
    18.    ~Mykeyboard();  
    19.    friend class Widget ;  
    20.  
    21.private:  
    22.    Ui::Mykeyboard *ui;  
    23.    QToolButton *SoftKey[40] ;//所有的软键盘按钮  
    24.    QLineEdit *Line ;//文本输入框  
    25.    QString CurString ;//按下确定后保存再CurString里  
    26.  
    27.private slots:  
    28.    void Init() ;  
    29.    void Click1() ;  
    30.    void Click2() ;  
    31.    void Click3() ;  
    32.    void Click4() ;  
    33.    void Click5() ;  
    34.    void Click6() ;  
    35.    void Click7() ;  
    36.    void Click8() ;  
    37.    void Click9() ;  
    38.    void Click0() ;  
    39.    void ClickQ() ;  
    40.    void ClickW() ;  
    41.    void ClickE() ;  
    42.    void ClickR() ;  
    43.    void ClickT() ;  
    44.    void ClickY() ;  
    45.    void ClickU() ;  
    46.    void ClickI() ;  
    47.    void ClickO() ;  
    48.    void ClickP() ;  
    49.    void ClickA() ;  
    50.    void ClickS() ;  
    51.    void ClickD() ;  
    52.    void ClickF() ;  
    53.    void ClickG() ;  
    54.    void ClickH() ;  
    55.    void ClickJ() ;  
    56.    void ClickK() ;  
    57.    void ClickL() ;  
    58.    void ClickBack() ;  
    59.    void ClickClose() ;  
    60.    void ClickZ() ;  
    61.    void ClickX() ;  
    62.    void ClickC() ;  
    63.    void ClickV() ;  
    64.    void ClickB() ;  
    65.    void ClickN() ;  
    66.    void ClickM() ;  
    67.    void ClickPoint() ;  
    68.    void ClickEnter() ;  
    69.};  
    70.  
    #endif // MYKEYBOARD_H

     

     Mykeyboard.cpp中的代码

    1.#include "mykeyboard.h"  
    2.#include "ui_mykeyboard.h"  
    3.#include <QDesktopWidget>  
    4.  
    5.Mykeyboard::Mykeyboard(QWidget *parent) :  
    6.    QDialog(parent),  
    7.    ui(new Ui::Mykeyboard)  
    8.{  
    9.    ui->setupUi(this);  
    10.    setWindowFlags(this->windowFlags() | Qt::WindowStaysOnTopHint | Qt::FramelessWindowHint);  
    11.    //WindowStaysOnTopHint设置窗口再最上端,FramelessWindowHint设置无边窗口  
    12.    this->setFixedSize(QApplication::desktop()->width()/2,QApplication::desktop()->height()/2);//设置键盘的窗口大小  
    13.    QString Toolbuttonformat = "QToolButton{background-color:rgba(242,141,102,255);\  
    14.                            color:rgba(50,25,25,255);\  
    15.                            border:2px groove rgb(242,141,102);border-radius:20px;padding:2px 2px;\  
    16.                            background-color: qconicalgradient(cx:0.5, cy:0.522909, angle:179.9, stop:0.494318 rgba(242,141,102,255), \  
    17.                            stop:0.5 rgba(242,141,102,255));}\  
    18.                            QToolButton:pressed{background-color:rgba(200,200,200,255);}";//把待会儿要用的窗口样式用字符串保存  
    19.  
    20.    Line = new QLineEdit(this) ;  
    21.    QFont fontalnum("Microsoft YaHei",this->width()/30,50);  
    22.    QFont fontfun("Microsoft YaHei",this->width()/35,50);  
    23.    for(int i = 0 ; i < 40 ; ++i)  
    24.        SoftKey[i] = new QToolButton(this) ;  
    25.    char tmp[2] = {0} ;  
    26.    char Alnum1[30] = "1234567890QWERTYUIOPASDFGHJKL";  
    27.    char Alnum2[8] = "ZXCVBNM" ;  
    28.    for(int i = 0 ; i < 29 ; ++i )  
    29.    {  
    30.        tmp[0] = Alnum1[i] ;  
    31.        SoftKey[i]->setText(tmp) ;//设置文本  
    32.        SoftKey[i]->setFont(fontalnum);//设置字体样式  
    33.    }  
    34.    int j = 0 ;  
    35.    for(int i = 31; i < 38 && Alnum2[j] != '\0' ; ++i,++j )  
    36.    {  
    37.        tmp[0] = Alnum2[j] ;  
    38.        SoftKey[i]->setText(tmp);  
    39.        SoftKey[i]->setFont(fontalnum);  
    40.    }  
    41.  
    42.    for(int i = 0 ; i < 40 ; ++i)  
    43.        SoftKey[i]->setStyleSheet(Toolbuttonformat);//设置窗口样式  
    44.  
    45.    Line->setFixedSize(this->width()/1.2,this->height()/4);  
    46.    Line->setStyleSheet("background-color:rgba(247,192,193,255);");  
    47.    Line->setFont(fontalnum) ;  
    48.  
    49.    for(int i = 0 ; i < 40 ; ++i)  
    50.        SoftKey[i]->resize(this->width()/10,this->height()/6);  
    51.  
    52.    Line->move((this->width()-Line->width())/2,(this->height()-4*SoftKey[0]->height()-Line->height())/2);  
    53.  
    54.    int k = 0 ;  
    55.    for( int i = 0 ; i < 4 ; ++i)  
    56.    {  
    57.        for( j = 0 ; j < 10 ; ++j)  
    58.        {  
    59.            SoftKey[k++]->move(j*SoftKey[i]->width(),(i+2)*SoftKey[i]->height());  
    60.        }  
    61.    }  
    62.      
    63.    SoftKey[29]->setIcon(QIcon(":/Backspace.png"));//给按钮对象添加图标  
    64.    SoftKey[29]->setToolButtonStyle(Qt::ToolButtonIconOnly);//设置按钮只有图标没有文本  
    65.    SoftKey[29]->setIconSize(QSize(SoftKey[29]->width()/2,SoftKey[29]->height()/2));  
    66.    SoftKey[30]->setText(QObject::tr("关闭"));  
    67.    SoftKey[30]->setFont(fontfun);  
    68.    SoftKey[38]->setText(QObject::tr("."));  
    69.    SoftKey[38]->setFont(fontalnum);  
    70.    SoftKey[39]->setText(QObject::tr("确定"));  
    71.    SoftKey[39]->setFont(fontfun);  
    72.    Init();  
    73.}  
    74.  
    75.void Mykeyboard::Init()  
    76.{  
    77.    connect(SoftKey[0],SIGNAL(clicked(bool)),this,SLOT(Click1())) ;  
    78.    connect(SoftKey[1],SIGNAL(clicked(bool)),this,SLOT(Click2())) ;  
    79.    connect(SoftKey[2],SIGNAL(clicked(bool)),this,SLOT(Click3())) ;  
    80.    connect(SoftKey[3],SIGNAL(clicked(bool)),this,SLOT(Click4())) ;  
    81.    connect(SoftKey[4],SIGNAL(clicked(bool)),this,SLOT(Click5())) ;  
    82.    connect(SoftKey[5],SIGNAL(clicked(bool)),this,SLOT(Click6())) ;  
    83.    connect(SoftKey[6],SIGNAL(clicked(bool)),this,SLOT(Click7())) ;  
    84.    connect(SoftKey[7],SIGNAL(clicked(bool)),this,SLOT(Click8())) ;  
    85.    connect(SoftKey[8],SIGNAL(clicked(bool)),this,SLOT(Click9())) ;  
    86.    connect(SoftKey[9],SIGNAL(clicked(bool)),this,SLOT(Click0())) ;  
    87.    connect(SoftKey[10],SIGNAL(clicked(bool)),this,SLOT(ClickQ())) ;  
    88.    connect(SoftKey[11],SIGNAL(clicked(bool)),this,SLOT(ClickW())) ;  
    89.    connect(SoftKey[12],SIGNAL(clicked(bool)),this,SLOT(ClickE())) ;  
    90.    connect(SoftKey[13],SIGNAL(clicked(bool)),this,SLOT(ClickR())) ;  
    91.    connect(SoftKey[14],SIGNAL(clicked(bool)),this,SLOT(ClickT())) ;  
    92.    connect(SoftKey[15],SIGNAL(clicked(bool)),this,SLOT(ClickY())) ;  
    93.    connect(SoftKey[16],SIGNAL(clicked(bool)),this,SLOT(ClickU())) ;  
    94.    connect(SoftKey[17],SIGNAL(clicked(bool)),this,SLOT(ClickI())) ;  
    95.    connect(SoftKey[18],SIGNAL(clicked(bool)),this,SLOT(ClickO())) ;  
    96.    connect(SoftKey[19],SIGNAL(clicked(bool)),this,SLOT(ClickP())) ;  
    97.    connect(SoftKey[20],SIGNAL(clicked(bool)),this,SLOT(ClickA())) ;  
    98.    connect(SoftKey[21],SIGNAL(clicked(bool)),this,SLOT(ClickS())) ;  
    99.    connect(SoftKey[22],SIGNAL(clicked(bool)),this,SLOT(ClickD())) ;  
    100.    connect(SoftKey[23],SIGNAL(clicked(bool)),this,SLOT(ClickF())) ;  
    101.    connect(SoftKey[24],SIGNAL(clicked(bool)),this,SLOT(ClickG())) ;  
    102.    connect(SoftKey[25],SIGNAL(clicked(bool)),this,SLOT(ClickH())) ;  
    103.    connect(SoftKey[26],SIGNAL(clicked(bool)),this,SLOT(ClickJ())) ;  
    104.    connect(SoftKey[27],SIGNAL(clicked(bool)),this,SLOT(ClickK())) ;  
    105.    connect(SoftKey[28],SIGNAL(clicked(bool)),this,SLOT(ClickL())) ;  
    106.    connect(SoftKey[29],SIGNAL(clicked(bool)),this,SLOT(ClickBack())) ;  
    107.    connect(SoftKey[30],SIGNAL(clicked(bool)),this,SLOT(ClickClose())) ;  
    108.    connect(SoftKey[31],SIGNAL(clicked(bool)),this,SLOT(ClickZ())) ;  
    109.    connect(SoftKey[32],SIGNAL(clicked(bool)),this,SLOT(ClickX())) ;  
    110.    connect(SoftKey[33],SIGNAL(clicked(bool)),this,SLOT(ClickC())) ;  
    111.    connect(SoftKey[34],SIGNAL(clicked(bool)),this,SLOT(ClickV())) ;  
    112.    connect(SoftKey[35],SIGNAL(clicked(bool)),this,SLOT(ClickB())) ;  
    113.    connect(SoftKey[36],SIGNAL(clicked(bool)),this,SLOT(ClickN())) ;  
    114.    connect(SoftKey[37],SIGNAL(clicked(bool)),this,SLOT(ClickM())) ;  
    115.    connect(SoftKey[38],SIGNAL(clicked(bool)),this,SLOT(ClickPoint())) ;  
    116.    connect(SoftKey[39],SIGNAL(clicked(bool)),this,SLOT(ClickEnter())) ;  
    117.}  
    118.
    119.void Mykeyboard::Click1()  
    120.{  
    121.    Line->setText(Line->text()+"1");  
    122.}  
    123.void Mykeyboard::Click2()  
    124.{  
    125.    Line->setText(Line->text()+"2");  
    126.}  
    127.void Mykeyboard::Click3()  
    128.{  
    129.    Line->setText(Line->text()+"3");  
    130.}  
    131.void Mykeyboard::Click4()  
    132.{  
    133.    Line->setText(Line->text()+"4");  
    134.}  
    135.void Mykeyboard::Click5()  
    136.{  
    137.    Line->setText(Line->text()+"5");  
    138.}  
    139.void Mykeyboard::Click6()  
    140.{  
    141.    Line->setText(Line->text()+"6");  
    142.}  
    143.void Mykeyboard::Click7()  
    144.{  
    145.    Line->setText(Line->text()+"7");  
    146.}  
    147.void Mykeyboard::Click8()  
    148.{  
    149.    Line->setText(Line->text()+"8");  
    150.}  
    151.void Mykeyboard::Click9()  
    152.{  
    153.    Line->setText(Line->text()+"9");  
    154.}  
    155.void Mykeyboard::Click0()  
    156.{  
    157.    Line->setText(Line->text()+"0");  
    158.}  
    159.void Mykeyboard::ClickQ()  
    160.{  
    161.    Line->setText(Line->text()+"Q");  
    162.}  
    163.void Mykeyboard::ClickW()  
    164.{  
    165.    Line->setText(Line->text()+"W");  
    166.}  
    167.void Mykeyboard::ClickE()  
    168.{  
    169.    Line->setText(Line->text()+"E");  
    170.}  
    171.void Mykeyboard::ClickR()  
    172.{  
    173.    Line->setText(Line->text()+"R");  
    174.}  
    175.void Mykeyboard::ClickT()  
    176.{  
    177.    Line->setText(Line->text()+"T");  
    178.}  
    179.void Mykeyboard::ClickY()  
    180.{  
    181.    Line->setText(Line->text()+"Y");  
    182.}  
    183.void Mykeyboard::ClickU()  
    184.{  
    185.    Line->setText(Line->text()+"U");  
    186.}  
    187.void Mykeyboard::ClickI()  
    188.{  
    189.    Line->setText(Line->text()+"I");  
    190.}  
    191.void Mykeyboard::ClickO()  
    192.{  
    193.    Line->setText(Line->text()+"O");  
    194.}  
    195.void Mykeyboard::ClickP()  
    196.{  
    197.    Line->setText(Line->text()+"P");  
    198.}  
    199.void Mykeyboard::ClickA()  
    200.{  
    201.    Line->setText(Line->text()+"A");  
    202.}  
    203.void Mykeyboard::ClickS()  
    204.{  
    205.    Line->setText(Line->text()+"S");  
    206.}  
    207.void Mykeyboard::ClickD()  
    208.{  
    209.    Line->setText(Line->text()+"D");  
    210.}  
    211.void Mykeyboard::ClickF()  
    212.{  
    213.    Line->setText(Line->text()+"F");  
    214.}  
    215.void Mykeyboard::ClickG()  
    216.{  
    217.    Line->setText(Line->text()+"G");  
    218.}  
    219.void Mykeyboard::ClickH()  
    220.{  
    221.    Line->setText(Line->text()+"H");  
    222.}  
    223.void Mykeyboard::ClickJ()  
    224.{  
    225.    Line->setText(Line->text()+"J");  
    226.}  
    227.void Mykeyboard::ClickK()  
    228.{  
    229.    Line->setText(Line->text()+"K");  
    230.}  
    231.void Mykeyboard::ClickL()  
    232.{  
    233.    Line->setText(Line->text()+"L");  
    234.}  
    235.void Mykeyboard::ClickBack()  
    236.{  
    237.    QString s = Line->text();  
    238.    int len = s.length();  
    239.    QString s2 = s.remove(len-1,1);  
    240.    Line->setText(s2);  
    241.}  
    242.void Mykeyboard::ClickClose()  
    243.{  
    244.    Line->setText("");  
    245.    this->close();  
    246.}  
    247.void Mykeyboard::ClickZ()  
    248.{  
    249.    Line->setText(Line->text()+"Z");  
    250.}  
    251.void Mykeyboard::ClickX()  
    252.{  
    253.    Line->setText(Line->text()+"X");  
    254.}  
    255.void Mykeyboard::ClickC()  
    256.{  
    257.    Line->setText(Line->text()+"C");  
    258.}  
    259.void Mykeyboard::ClickV()  
    260.{  
    261.    Line->setText(Line->text()+"V");  
    262.}  
    263.void Mykeyboard::ClickB()  
    264.{  
    265.    Line->setText(Line->text()+"B");  
    266.}  
    267.void Mykeyboard::ClickN()  
    268.{  
    269.    Line->setText(Line->text()+"N");  
    270.}  
    271.void Mykeyboard::ClickM()  
    272.{  
    273.    Line->setText(Line->text()+"M");  
    274.}  
    275.void Mykeyboard::ClickPoint()  
    276.{  
    277.    Line->setText(Line->text()+".");  
    278.}  
    279.  
    280.void Mykeyboard::ClickEnter()  
    281.{  
    282.    CurString = Line->text() ;  
    283.    Line->setText("");  
    284.    this->close();  
    285.}  
    286.  
    287.Mykeyboard::~Mykeyboard()  
    288.{  
    289.    delete ui;  
    290.    for(int i = 0 ; i < 40 ; ++i)  
    291.        delete SoftKey[i] ;  
    292.  
    293.    delete Line ;  
    } 

     

    通样继续在刚才的项目中添加新文件,选择Qt设计师界面类,界面模板选择Dialog without Buttons,类名用Result。

    在result.h中加上友元friend class Widget。

    在result.ui中拖入一个Label,去掉里面的text内容其他的设置参考前面的ui界面,如下图

     

     

    在widget.h中添加

    #include "mykeyboard.h"

    #include "result.h"

     

    成员添加    

    Mykeyboard *mkb ;

    Result *curresult ;

    进入widget.ui界面,右键Mykeyboard,转到槽,选择clicked(),在跳转的函数体中加入mkb->exec();右键Result,转到槽,选择clicked(),在跳转的函数体中加入    curresult->ui->label->setText(tr("The Result:%1").arg(mkb->CurString));

    curresult->show();

     

     

    至此,程序完成。运行程序,点击Mykeyboard,点击软键盘输入......

     

    点击确定,回到主页后点击Result按钮,发现刚才的输入显示在窗口中

    展开全文
  • 项目建立完成后,向项目中添加新文件,模板选择Qt中的“Qt设计师界面类”,界面模板选择“Dialog without Buttons”,类名选择MyDialog。完成后首先在mydialog.h中添加一个信号   信号只用声明,不需要也...

    信号与槽可以实现两个对象之间的通信。例如:如果点击了关闭按钮,我们希望窗口调用close()函数退出。

    信号与槽简单来说就是,一个事件发生会发出一个信号,收到这个信号后,会调用槽函数。下面看一个简单例子。

     

    1.#include <mainwindow.h>  
    2.#include <QApplication>  
    3.#include <QPushButton>  
    4.#include <QDesktopWidget>  
    5.  
    6.int main(int argc, char *argv[])  
    7.{  
    8.    QApplication a(argc, argv);  
    9.    QWidget *widget = new QWidget;  
    10.    QPushButton *button = new QPushButton("Quit",widget) ;  
    11.    widget->resize(300,150);  
    12.    button->move((widget->width()-button->width())/2,(widget->height()-button->height())/2);  
    13.    button->setStyleSheet("background-color:rgba(242,141,102,255);");  
    14.  
    15.    QObject::connect(button,SIGNAL(clicked(bool)),widget,SLOT(close()));//信号与槽  
    16.  
    17.    widget->show();  
    18.    int rec = a.exec() ;  
    19.    delete widget ;  
    20.    return rec ;  
    21.}  

     

    通过15行的QObject::connect()函数,当我们按下按钮button的时候,就会关闭widget窗口了。

     

    它的函数原型如下

    bool QObject::connect(const QObject * sender ,

    const char * signal,

    const QObject * receiver ,

    const char * method , Qt::ConnectionTypetype=Qt::AutoConnection)

     

    第一个参数是发送信号的对象,第二个参数是发送的信号,第三个参数是接受信号的对象,第四个参数是槽函数。

    对于信号与槽,必须使用SIGNAL()和SLOT()宏,它们可以将其参数转化为const char *类型。conncet函数的返回值为bool类型,当关联成功时返回true。

     

     

    注意:

    信号与槽的参数只能有类型,不能有变量。

    基本原则要求信号的参数类型和槽的参数类型一致。信号的参数个数可以多于槽,但不能反过来。

    一个信号可以关联多个槽

    多个信号可以关联一个槽

    一个信号可以关联另一个信号

    信号没有返回值,只能是void类型

     

     

    自定义信号与槽

    简单实现一个程序:在一个窗口中创建一个对话框,在这个对话框中可以输入数值,当单击“确定”按钮时关闭对话框并将对话框的数值通过信号发送出去,在另一个窗口中接收信号并显示该数值。

     

     

    新建项目,基类选择QWidget,类名选择Widget不变。项目建立完成后,向项目中添加新文件,模板选择Qt中的“Qt设计师界面类”,界面模板选择“Dialog without Buttons”,类名选择MyDialog。完成后首先在mydialog.h中添加一个信号

     

    信号只用声明,不需要也不能对它进行实现。声明信号用singals关键字,signals前不能加private、public、protect限定符。

     

    在widget.h中加入自定义的槽

    声明槽函数用slots关键字,slots前可以加private、public、protect限定符。

     

     

     

    在mydialog.ui对应的界面中拖取一个PushButton 和一个Spinbox,控件名改为button和spinbox,button的text设置为“确定”。

    右键确定按钮,选择“转到槽”,出现下图,选择clicked()。

     

    点击OK。在出现的槽函数中加入如下代码

    1.void MyDialog::on_button_clicked()  
    2.{  
    3.    int value = ui->spinbox->value() ;  
    4.    emit ValueReturn(value) ;//发送信号用emit关键字  
    5.    close();  
    6.}  

    打开widget.ui界面,向界面上拖取一个Label控件,大小可调。然后往widget.cpp中加入 “mydialog.h”头文件,再往构造函数中加入如下代码

    1.MyDialog *dialog = new MyDialog(this) ;  
    2.QObject::connect(dialog,SIGNAL(ValueReturn(int)),this,SLOT(ShowValue(int)));  
    dialog->show(); 

     

    在widget.cpp定义槽函数ShowValue(int)

    1.void Widget::ShowValue(int value)  
    2.{  
    3.    ui->label->setText(trUtf8("获取的值是:%1").arg(value));  
    4.}  

     

     运行,在微调框中输入50。

    点击确定。

     

     

     

     

    展开全文
  • 布局管理器 QHBoxLayout:在水平方向排列窗口部件,从左到右; QVBoxLayout:在垂直方向排列窗口部件,从上到下;...setAttribute(Qt::WA_TranslucentBackground);//设置透明      
  • Qt单元测试框架快速上手

    千次阅读 2019-06-26 21:23:54
    本文介绍Qt的单元测试框架是什么,有什么用和怎么快速使用它。
  • 从头开始创建新的Qt Quick项目时,可以使用以下选项: Qt Quick应用程序-空创建一... Qt快速应用程序-Scroll使用ScrollView类型来实现可滚动列表视图(需要Qt 5.9或更高版本). Qt快速应用程序-堆栈使用StackView...
  • Qt4和Qdevelop快速上手

    2009-07-23 22:26:47
    教你用最快的速度上手Qt4以及编译工具Qdevelop
  • 可配合我的csdn博客使用。注释能写的我都写了。没有冗余代码。博客看:https://blog.csdn.net/sparkleyn/article/details/102832119
  • 学习qt的笔记,供需要快速上手的人参考
  • 随着QT SDK 5.3.0发布的Qt Creator3.1.1,qrc文件不能图形化显示和编辑了,只能用鼠标右键点击qrc文件,在弹出的快捷菜单中选择相应的操作。 程序运行,按快捷键“Ctrl+R” QT中是有调试界面的,按下“F5"进入调试...
  • (本质上就是后面cpp文件中加了几个qt相关的.h的引用) 在vs中的设置如下 2.首先动动小手新建俩文件:doccreate.cpp和头文件doccreate.h (代码资源会放在文章后面) 先给doccreate.h的代码。 之所以要先给...
  • 1 什么是QML 通俗的讲,QML是一种编程语言,用来开发界面用的. QML书写格式类似于JSON的语法,并支持将...每个QML文件都由两部分组成:导入部分和对象声明部分.QtQuick导入中提供了用户界面最常用的类型和功能. ...
  • Qt 之高级网络操作(HTTP/FTP 快速上手

    万次阅读 多人点赞 2016-09-14 17:03:58
    简述Qt Network 模块中提供了一些高级别的类,例如:QNetworkRequest、QNetworkReply 和 QNetworkAccessManager,使用常见的协议执行网络操作。简述 HTTP 消息结构 支持的协议 请求 传递 URL 参数 代理 更加复杂的 ...
  • QT快速入门

    2018-05-09 11:32:10
    QT快速入门教程,内容讲解十分详细,很适合初学者学习使用,上手容易
  • rect.color = Qt.rgba(Math.random(), Math.random(), Math.random(), 1); } } } 简单的介绍下qml信号,会具体一章来讲qml的信号和槽,并且会有详细的示例代码。还有c++与qml的信号传递与一些好用的技巧分享。...
  • QtCreator  UI和线程简易说明 一、创建UI文件: 1创建并初始化子窗口部件 2.把子窗口部件放到布局中 3.设置Tab键顺序 4.建立信号-槽之间的连接 5.实现对话框中的自定义槽 保存为gotocell.ui Qt中的内建的...
  • 大学数据结构课设 要求有人机交互图形界面,本人只学过C语言,如何快速入门C++和QT? 在此麻烦各位帮助解答一下啦。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,906
精华内容 1,162
关键字:

qt快速上手