QT初学之聊天工具的搭建项目笔记

  1. UI图形界面
    Ui:图形界面的一个类
    头文件中:
    private:
    Ui::ChatPage *ui; //类的私有属性,表明对象无法进行修改。
    .cpp文件中
    ui(new Ui::login)
    {
    ui->setupUi(this);//分配 ui 相应内存空间,该对象指向对应login类下的ui界面
    }

  2. 首个图形界面都main中创建。

  3. 显示某一类对应的图形界面
    ChatPage *chatPage; //对应类ChatPage的对象
    chatPage = new ChatPage();//申请内存
    chatPage->setAttribute(Qt::WA_DeleteOnClose); //关闭界面时自动释放内存
    chatPage->show();//调用方法show显示界面
    chatPage->close();//关闭界面

  4. 设置label控件显示图片或文本:
    #include “QPixmap” //头文件
    QString *headPath = new QString("//图片文件路径"); //QT中字符对象保存路径
    QPixmap *headPix = new QPixmap(*headPath); //用图片对象来保存该字符对象
    *headPix = headPix->scaled(ui->headLabel->size()); //调用图片类中scaled行为调整图片大小
    ui->headLabel->setPixmap(*headPix); //label控件显示图片

  5. "设置Button控件显示图片"
    #include “QPixmap” //头文件
    QString *addPath = new QString("//图片文件路径");
    QPixmap *addPix = new QPixmap(*addPath);
    *addPix = addPix->scaled(ui->addButton->size());
    ui->addButton->setIcon(QIcon(*addPix));//设置按钮的图标,跟label方式不同

  6. "设置Button控件显示文本"
    QString msg;
    ui->addButton->setText(msg);//控件显示文本

  7. 设置按钮信号与槽:
    在ui设计界面中将对应按钮控件设置槽函数,并在槽函数中指定相应的处理行为
    头文件中
    private slots: void on_addButton_clicked();//指定槽函数
    .cpp文件中定义槽函数
    void ChatPage::on_addButton_clicked()
    {
    //处理行为
    }

  8. 文本输入框添加提示文本:setPlaceholderText(提示字符串);

  9. explicit关键字:
    一般只将有单个参数的构造函数声明,不希望编译器对参数进行自动类型转换(又称编译器隐式转换)

  10. switch(){case…}语句内不能声明变量

  11. QT中字符对象的转换:
    QString str = “xxxxx” 或者控件中的文本 QString str = ui->控件->text();
    //调用字符对象中toStdString().c_str()方法转换为C中的Char * 字符串指针。
    方式1:”const char *c = str.toStdString().c_str();//不靠谱
    方式2:QByteArray ba = str.toLatin1(); const char *c= ba.data();

  12. MD5加密
    #include “QCryptographicHash” //头文件
    QString passward = ui->控件->text(); //获取控件中的文本存储到字符串对象
    //MD5加密,QByteArray为字符数组,将字符串对象转为字符数组
    QByteArray ba = passward.toLatin1();//toLatin1转字符数组
    ba = QCryptographicHash::hash(ba, QCryptographicHash::Md5);//对字符数组进行加密转换,返回新的字符数组
    passward.clear();
    passward.append(ba.toHex()); //由于ba为字符数组,需用tohex转为字符串对象
    const char *p = passward.toStdString().c_str();//字符数组转换为QT的字符串对象,在转为char *字符串

  13. UDP:客户端socket编程
    在类的私有属性中声明: QUdpSocket *socket;//对象无法修改
    构造函数中申请内存:socket = new QUdpSocket();
    //端口号绑定:socket->bind(11111);//QT4.6.2以下客户端必须显示bind端口号才能连接服务器
    //连接服务器:connect(socket, SIGNAL( readyRead(), this, SLOT( readDataHandler() ));
    //接收服务器数据
    SLOT( readDataHandler() ) 为绑定当前socket套接字接口,若收到数据则会调用对应槽函数readDataHandler()进行处理。
    socket->readDatagram(接收buf, 大小);
    //向服务器发送数据:
    QHostAddress *address = new QHostAddress(QString(DENGLU_SERVER_IP));//将字符串 ip 转为QT中IP对应的QHostAddress对象
    //其中网络字节序在QT中内部进行转换了,可以直接写数据报到对应服务器端口。
    socket->writeDatagram((const char *)&denglu, sizeof(denglu), *address, DENGLU_SERVER_PROT);

  14. UDP:服务器socket编程
    在虚拟机下搭建各服务的服务器

  15. 打印字符对象(调试用)
    qDebug() << 字符对象;

  16. 在QTreeWidget控件添加条目并显示图标和文本信息
    QTreeWidgetItem *item = new QTreeWidgetItem(ui->QTreeWidget控件);
    item->setIcon(0, QIcon(“图片路径”));
    item->setText(0, 文本信息);

  17. A与B跨ui图形界面相互操作
    在A中声明一个指针,该属性用于保存B中对应的空间
    在B中将B中ui对应的空间指针赋给A的指针,在A的文件中遍可以对B控件进行操作

  18. QT中设置utf-8编码格式
    QTextCodec *codec = QTextCodec::codecForName(“UTF-8”);
    QTextCodec::setCodecForLocale(codec);

  19. 对象扩展方法
    在对应public中声明 function();
    在定义function中引用类已具备的函数功能基础上再进行附加操作。

  20. 网络编程中,会出现QT画面按钮无反应,属于网络延迟等问题。

  21. 聊天中设置接受数据与发送数据字体颜色,通过样式表无法解决,应用HTML语句
    QString msg;
    msg.clear();
    msg.append(QString(""));
    msg.append(QString(聊天正文));
    msg.append(QString("
    "));
    ui->chartTextEdit->append(QString(msg));//在控件中显示

  22. QString().toLatin1()不支持中文,ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,可使用toLocal8Bit(),unicode编码

  23. 控件边框设置linewidth、控件按钮显示设置QPushButton、时间显示LCD Number控件以及设置显示位数digitCount(能够显示整数、浮点、字符串)。

  24. 定时器与时间类
    头文件
    #include
    #include
    添加属性及行为
    QTimer *timer;
    void timerHandler();
    timer = new QTimer();
    connect(timer, SIGNAL(timeout()), this, SLOT(timerHandler()));
    timer->start(1000);//毫秒级
    void ChatPage::timerHandler()
    {
    //获取当前日期时间
    QDateTime dataTime = QDateTime::currentDateTime();
    QString t = dataTime.toString(QString(“yy-MM-dd hh:mm:ss”));
    ui->lcdNumber->display(t);
    }

  25. 单击/双击识别
    设置槽函数,通过控件所拥有的方法判断
    isChecked()//单击
    isdoubleClicked()//双击

  26. 非系统指定或当前目录时,对库文件和头文件的声明,在pro工程中
    #添加头文件的位置
    #INCLUDEPATH += /usr/include/
    #添加库的位置
    #LIBS += -L/usr/lib -lsqlite3

  27. 记住密码
    通过控件判断是否记住密码,数据库对账户密码进行记录,若第一次则插入否则更新。记住密码数据表保存于客户端中,由客户端调用;实时监测控件文本信息:定义信号槽函数textChanged(); 账户框信息发生变动则发生信号,查询数据库,若该用户在记录密码表中有对应信息,则填充到密码框对应控件中,若不匹配则清空密码框。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值