qt小笔记

自己备忘的常见的qt小知识点

知识点

文件判断是否存在、可读、可写、可编辑

头文件:<io.h>

函数原型:int _access(const char *pathname, int mode);

参数:pathname 为文件路径或目录路径 mode 为访问权限(在不同系统中可能用不能的宏定义重新定义)

返回值:如果文件具有指定的访问权限,则函数返回0;如果文件不存在或者不能访问指定的权限,则返回-1.

备注:当pathname为文件时,_access函数判断文件是否存在,并判断文件是否可以用mode值指定的模式进行访问。当pathname为目录时,_access只判断指定目录是否存在,在Windows NT和Windows 2000中,所有的目录都只有读写权限。

mode的值和含义如下所示:

00——只检查文件是否存在

02——写权限

04——读权限

06——读写权限

#include <io.h>
#include <stdio.h>
#include <stdlib.h>
 
int main ( )
{
     if ( ( _access ( “IsExist.txt” , 0 ) ) != - 1 )
     {
         printf ( “File IsExist.txt exists.n” ) ;
 
         if ( ( _access ( “IsExist.txt” , 2 ) ) != - 1 )
             printf ( “File IsExist.txt does not have write permission.\n” ) ;
     }
 
     return 0 ;
}

QString转成char

1、方式1:QString ->QByteArray->char*

QString str = "hello";
char * ch =  str.toLatin1().data();
//都是QString转QByteArray的方法,Latin1代表ASCII,Local8Bit代表unicode

//或者

char * ch =  str.toLocal8Bit().data();

2、方式2:QStirng---->String —>char*

QString str = "hello";
char * ch =  str.toStdString().c_str();

接上面 c_str和.data()区别

c_str()和data():生成一个const char*指针,指向一个临时数组。

c_str()函数返回一个指向正规C字符串的指针,内容与string串相同。

C++中c_str()主要用法就是为了与C语言兼容,在C语言中没有string类型,故必须通过string的对象的成员函数c_str()把string对象转换成C中的字符串样式。

c_str()以char*形式传回string内含字符串。

char c[20];

string s = "1234";

strcpy(c,s.c_str());

//这样才不会出错,c_str返回的是一个临时指针,不能对其进行操作。

1.拼接

QString s1 = "hello ";
QString s2 = "world";
s1 += s2;
s1.append(" farsight");

2.格式化

s1.sprintf("%s %d","哈哈",100);
s1 = QString("%1 was born in %2").arg("小明").arg(1900);

3.数字转字符串

QString s = QString().setNum(16);

文版框输出数字转字符串函数QString::number(a,10,2);

 ui->lineEdit_5->setText(QString::number(a[0],10,2));

这个文章进行了详细介绍

4.判断字符串是否为空

QString s ;
s.isEmpty()

示例:

	if(!s.isEmpty())
   {
       s.append('0');
       ui->label_choose->setText(s);
   }

5.格式化

将"哈哈" 100 输出;
char buf[100];

sprintf(buf,"%s %d",“哈哈”,100);

//替换 1替换成第一个arg中的参数 2替换第二个arg中的参数
s1 = QString("%1 was born in %2").arg(“小明”).arg(1900);

6.数字转字符串

QString s = QString().setNum(16);
QString s1 = QString("%1").arg(16);

7.移出空白字符

  QString s5 = "   hello       good      farsight    ";
        //移出两端空白字符
           s5 = s5.trimmed();
          qDebug()<<s5;
        //移出两端空白字符,使用单个空格代替字符串中间的空白字符
            s5 = s5.simplified();
            qDebug()<<s5;

8.字符串转换

toInt() toDouble() toFloat() toLong() toLongLong()

 QString s6 = "123";
     bool ok;
    int hex =  s6.toInt(&ok,16);//转换成十六进制
    if(ok)//转换是否成功  转换成功 返回值为true
    {
        qDebug()<<hex;
    }
int dec = s6.toInt(&ok);//参数2位默认10进制
qDebug()<<dec;   

9.比较 > < >= <= ==

 QString s7 = "hello";
    QString s8 = "helo";
    if(s7 > s8)
        qDebug()<<"s7>s8";
    else
        qDebug()<<"not";

10.nsert()//字符串加入

在这里插入图片描述

11.prepend() 在原字符串开头插入另一个字符串

wordhello
wordhello

12.引用外部资源extern

extern int DataSize;//引用了main函数中定义的DataSize
t1.cpp中:

#include “t1.h” //如果你的不是当前路径,自己弄好路径

int myData; //只在一个文件件中这样做一次,后面别的文件想用时,只包头文件就可以了

// int myData =0; //可以定义可以赋值,可以不赋值


t2.cpp中:

#include “t1.h” //如果你的不是当前路,自己弄好路径,这个不用说吧

//注意在t1.cpp中已经定义了,后面使用的文件就不要定义myData,直接拿来用即可

//假如你的t2.cpp中有一个方法需要用到myData,这个方法就int getMyData();于是可以这样
在这里插入图片描述

[原文链接](https://blog.csdn.net/Soar_dream/article/details/101025153)

13.互斥锁

互斥锁 QMutex类和QMutexLocker类 作用:解决由于覆盖,导致的结果不正确
目的:保护一个对象,同一时间只有一个线程可以访问它。
当多个线程访问共享内存时,应使用锁讲对共享变量的操作代码包裹,易保证同步访问共享变量;
c++中引起线程安全的共享资源有两种:全局变量和静态变量。
在这里插入图片描述

void consummer::run()
{
    for(int i = 0 ; i < DataSize; i++)
    {
        //加锁
        mutex.lock();
        buffer--;
        qDebug()<<"consummer:"<<buffer;
        //解锁
        mutex.unlock();

    }
}
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    consummer con;
    producer pro;
    con.start();
    pro.start();

    //线程进入等待模式,
    con.wait();
    pro.wait();

14.replace() 用指定的字符串替换原字符串中的某些字符

在这里插入图片描述
s1.replace(“e”,s2);这样竟然也行?

ui界面的设置:
ui->lineEdit_psw->setMaxLength(6);//密码长度6位
ui->lineEdit_psw->setEchoMode(QLineEdit::Password);//密码不可见

15.文件存取

 void MainWindow::on_pushButton_clicked()
{
    //指定创建的目录 wd 是要创建的文件夹名字
    QString path = "d:/wd/";
    //创建目录 包含头文件 #include <QDir>
    QDir dir(path);
    if(!dir.exists())//如果目录不存在的话,创建目录路径dirPath		//bool exists()如果文件名存在,返回true;否则返回false。
    {
        dir.mkpath(path);//mkpath(const QString &dirPath) 函数将创建该目录所需的所有父目录。如果成功返回true;否则返回false。
    }

    //列取文件目录下的文件名称 1.放到QStringList中
                        //   2.注意:遍历要从2开始,前两项为. ..

    QStringList  fileList = dir.entryList();//1.返回的是当前目录下所有的文件名;2.entryList()返回目录中所有文件和目录的名称列表,
    for(int i = 2; i<fileList.size(); i++)
    {
        //文件名添加到listwight中显示 addItem()
        ui->listWidget->addItem(fileList.at(i));//列表中的每一项是fileList.at(i)
    }
    qDebug()<<fileList.at(0)<<"  "<<fileList.at(1);


}

16.qt鼠标定位以及定时器

键盘按下事件

#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //开启鼠标的实时跟踪
    setMouseTracking(true);
    ui->centralWidget->setMouseTracking(true);
    timerCount1 = 0;
    timerCount2 = 0;
}
MainWindow::~MainWindow()
{
    delete ui;
}
//键盘按下事件
void MainWindow::keyPressEvent(QKeyEvent *e)
{
    QString head;
    if(e->modifiers() == Qt::NoModifier)//没有修饰键
    {

    }else if(e->modifiers() == Qt::ControlModifier)// 按下修饰符 ctrl
    {
        head+="Ctrl +";
    }else if(e->modifiers() == Qt::ShiftModifier)// 按下修饰符 shift
    {
        head+="shift +";
    }else if(e->modifiers() == Qt::AltModifier)// 按下修饰符 Alt
    {
        head+="alt +";
    }

    //通过函数e->key()的返回值 判断是对应哪个按键
    switch (e->key()) {
    case Qt::Key_A:
        ui->label_key->setText(head+"A");
        break;
    case Qt::Key_Up:
         ui->label_key->setText(head+"up");
        break;
    default:
        //转换 成字符
        ui->label_key->setText(QString().setNum(e->key()));
        break;
    }
}

鼠标按下事件

//鼠标按下事件
void MainWindow::mousePressEvent(QMouseEvent *e)
{   //获取x坐标
    int x = e->x();
    //获取y坐标
    int y = e->y();
    //判断点击的是鼠标的哪个按键 e->button()的返回值
   QString position = QString("x: %1 y: %2").arg(x).arg(y);//x,y左边拼接成字符串
    switch (e->button()) {//函数的返回值为点下的是哪个按键
    case Qt::LeftButton://鼠标左键
        //label中显示:按下鼠标左键 + postion
        ui->label_mousepress->setText("按下左键"+position);
        break;
     case Qt::RightButton://鼠标右键
         //label中显示:按下鼠标右键 + postion
        ui->label_mousepress->setText("按下右键"+position);
        break;
     case Qt::MidButton://中键
         //label中显示:按下鼠标中键 + postion
        ui->label_mousepress->setText("按下中键"+position);
        break;
    default:
        break;
    }
}
鼠标按下换图标
void MainWindow::mousePressEvent(QMouseEvent *even)
{
    if(even->button()==Qt::LeftButton)
    {
        QCursor cursor;
         cursor.setShape(Qt::PointingHandCursor);//设置光标形状
         QApplication::setOverrideCursor(cursor);//使鼠标暂时改变形状

    }
    else if(even->button()==Qt::RightButton)
    {
        QCursor corcle(QPixmap("../mymouseevent/logo.png"));//../C基础补习/QT/heads/head25.jpg"
        QApplication::setOverrideCursor(corcle);
    }
}

鼠标移动事件

//鼠标移动事件
void MainWindow::mouseMoveEvent(QMouseEvent *e)
{
    QString position = QString("移动 x: %1  y: %2").arg(e->x()).arg(e->y());
    ui->label_mousemove->setText(position);
}
鼠标按住进行页面移动
void Widget::mouseMoveEvent(QMouseEvent *event) // 鼠标移动事件
{
    if(event->buttons() & Qt::LeftButton){      // 这里必须使用buttons()
        QPoint temp;
        temp = event->globalPos() - offset;
        move(temp);// 使用鼠标指针当前的位置减去差值,就得到了窗口应该移动的位置
    }
}

鼠标双击事件

//鼠标双击事件
void MainWindow::mouseDoubleClickEvent(QMouseEvent *e)
{    //获取x坐标
    int x = e->x();
    //获取y坐标
    int y = e->y();
    //判断点击的是鼠标的哪个按键 e->button()的返回值
    QString position = QString("x: %1 y: %2").arg(x).arg(y);//x,y左边拼接成字符串
    switch (e->button()) {//函数的返回值为点下的是哪个按键
    case Qt::LeftButton://鼠标左键
        //label中显示:鼠标双击左键 + postion
        ui->label_mousedouble->setText("双击左键"+position);
        break;
     case Qt::RightButton://鼠标右键
         //label中显示:鼠标双击右键 + postion
        ui->label_mousedouble->setText("双击右键"+position);
        break;
     case Qt::MidButton://中键
         //label中显示:按下鼠标双击中键 + postion
        ui->label_mousedouble->setText("双击中键"+position);
        break;
    default:
        break;
    }
}
鼠标双击进行
void Widget::mouseDoubleClickEvent(QMouseEvent *event) // 鼠标双击事件
{
    if(event->button() == Qt::LeftButton){             // 如果是鼠标左键按下
        if(windowState() != Qt::WindowFullScreen)      // 如果现在不是全屏
            setWindowState(Qt::WindowFullScreen);      // 将窗口设置为全屏
        else setWindowState(Qt::WindowNoState);        // 否则恢复以前的大小
    }
}

鼠标抬起事件

//鼠标抬起事件
void    MainWindow::mouseReleaseEvent(QMouseEvent *e)
{
    //获取x坐标
    int x = e->x();
    //获取y坐标
    int y = e->y();
    //判断点击的是鼠标的哪个按键 e->button()的返回值

    QString position = QString("x: %1 y: %2").arg(x).arg(y);//x,y左边拼接成字符串
    switch (e->button()) {//函数的返回值为点下的是哪个按键
    case Qt::LeftButton://鼠标左键

        //label中显示:鼠标抬起左键 + postion
        ui->label_mouserelease->setText("抬起左键"+position);
        break;
     case Qt::RightButton://鼠标右键
         //label中显示:鼠标抬起右键 + postion
        ui->label_mouserelease->setText("抬起右键"+position);
        break;
     case Qt::MidButton://中键
         //label中显示:按下抬起双击中键 + postion
        ui->label_mouserelease->setText("抬起中键"+position);
        break;
    default:
        break;
    }
}
鼠标抬起恢复原本指针
void Widget::mouseReleaseEvent(QMouseEvent *event) // 鼠标释放事件
{
    //Q_UNUSED(event);
    QApplication::restoreOverrideCursor();         // 恢复鼠标指针形状
}

鼠标滚轮事件

void Widget::wheelEvent(QWheelEvent *event)
{
if(event->delta()>0){
	ui->textEdit->zoomIn();
	}
	else{
	ui->textEdit->zooOut();
	}
}

定时器事件

Qt中进行定时器#include<QTime>

QTimer* my_time=new QTimer()//创建定时器
connect(my_time,SIGNAL(timeout()),this,SLOT(MyFunction()));//定时器绑定槽函数
my_time->start(200);//进行定时器输入200ms为停顿
//定时器事件
void MainWindow::timerEvent(QTimerEvent *e)
{
    if(e->timerId() == timerId1) //一秒的定时器        
    {
        timerCount1++;
        ui->progressBar->setValue(timerCount1);
        ui->label_timer1->setNum(timerCount1);
    }else if(e->timerId() == timerId2)
    {
        timerCount2++;
        ui->label_timer2->setNum(timerCount2);
    }
}
//开启定时器
void MainWindow::on_pushButton_start_clicked()
{
    //id 用来标识  是哪个定时器
   timerId1 = startTimer(1000);
   timerId2 = startTimer(2000);
}
//关闭定时器
void MainWindow::on_pushButton_stop_clicked()
{
    //参数:定时器的id
    killTimer(timerId1);
    //进度条显示0  清空label
    ui->progressBar->setValue(0);
    ui->label_timer1->clear();
    killTimer(timerId2);
    ui->label_timer2->clear();
}
//头文件
public:
    //重写四个函数,鼠标的四种情况 包含头文件#include <QMouseEvent>
    //鼠标按下
    void mousePressEvent(QMouseEvent *e);
    //鼠标抬起 释放
    void mouseReleaseEvent(QMouseEvent *e);
    //鼠标移动
    void mouseMoveEvent(QMouseEvent *e);
    //鼠标双击
    void mouseDoubleClickEvent(QMouseEvent *e);

    //键盘事件  #include <QKeyEvent> 重写方法
    void keyPressEvent(QKeyEvent *e);

    //重写方法
    void timerEvent(QTimerEvent *e);

    int timerId1;
    int timerId2;

    int timerCount1;
    int timerCount2;


private slots:
    void on_pushButton_start_clicked();

    void on_pushButton_stop_clicked();

17.模态窗口setModal

//测试模态窗口
void MainWindow::on_pushButton_clicked()
{
    //显示我的dialog 包含头文件
    //里面参数 指定父类,如果父类消亡时,自动消亡子孩子
    //默认状态:非模态状态
    MyDialog *md  = new MyDialog(this);
    //模态对话框:即在没有关闭之前,不能再与同一个应用程序的其它窗口进行交互,比如新建项目时弹出的对话框。
    //设置模态状态 参数:true设置 模态 false 非模态
   md->setModal(true);
   md->setWindowModality(Qt::WindowModal);
/*
   非模态对话框:可以在同一程序中与他交互,如查找替换对话框,默认的对话框为非模态。
    //设置成非模态状态
    md->setModal(false);
    md->setWindowOpacity(Qt::NonModal);*/
    //显示窗口
    md->show();
    
//Qt::NonModal:非模态窗口
//Qt::WindowModal:模态窗口 对应于父窗口,及祖父窗口,和相关的兄弟窗口



}

18.文件选择对话框、颜色选择对话框、字体选择对话框

文件选择对话框

  • QString fileName = QFileDialog::getOpenFileName(this, tr(“Open File”), “/home”, tr(“Images (*.png *.xpm *.jpg)”));
  QString selectFilter;
   QString fileName = QFileDialog::getOpenFileName(
                this,//指定父类 指定父组件
                "选择文件对话框测试",//对话框的标题
                "/",//当前目录下
                "C++ files(*.cpp);;C files(*.c);;Head files(*.h)",//过滤器
               //过滤器名称+(),括号里是文件的过滤规则,如*.c,多过滤器之间用;;隔开,默认是无过滤
                &selectFilter//选择的是哪个过滤器
                );
   //但行输入框 显示选择后的文件路径名
   ui->lineEdit_filename->setText(fileName);
    qDebug()<<selectFilter;

颜色选择对话框

QColor color =  QColorDialog::getColor(Qt::blue,//默认颜色
                           this,//指定父类
                           "标准颜色对话框"//对话框的标题
                );
    if(color.isValid())//颜色是否有效  isValid//检查对象是否已经实例化
    {
        //设置图形为盒状
        ui->label_color->setFrameShape(QFrame::Box);
        //自动填充背景
        ui->label_color->setAutoFillBackground(true);
        //设置调色板为获取到的颜色
        ui->label_color->setPalette(QPalette(color));
    }

字体选择对话框

void MainWindow::on_pushButton_font_clicked()
{
    bool ok;
    QFont f("宋体");
   QFont font = QFontDialog::getFont(
                &ok,
                f,
                this,
                "标准字体选择对话框"
                );
   ui->lineEdit_font->setText("测试文本");
   ui->lineEdit_font->setFont(font);
}

19.消息框

疑问消息框question

在这里插入图片描述

void MyDialog::on_pushButton_question_clicked()
{
    int ques =  QMessageBox::question(
                this,
                "question消息框",//标题
                "是否退出消息对话框",//内容
                QMessageBox::Ok|QMessageBox::Cancel,//界面显示的按钮
                QMessageBox::Ok//默认选中的,焦点在哪个按钮上
                );
    switch (ques) {
    case QMessageBox::Ok:
        ui->label->setText("question 对话框  ok");

        break;
    case QMessageBox::Cancel:

        ui->label->setText("question 对话框 cancle");
        break;
    default:
        break;
    }
infomation对话框information

在这里插入图片描述

void MyDialog::on_pushButton_infomation_clicked()
{
    int choose = QMessageBox::information(
                    this,
                    "Infomation消息框",
                    "欢迎来到InfomationMsg测试",
                    QMessageBox::Ok,
                    QMessageBox::NoButton);//默认选中的,焦点在哪个按钮上
    //QMessageBox::NoButton  此时messageBox会自动选择合适的默认值
    if(choose == QMessageBox::Ok)
        ui->label->setText("infomation对话框  ok");
}
"Critical消息框"critical

在这里插入图片描述

void MyDialog::on_criticalMsg_clicked()
{
    ui->label->setText("Critical Message Box");
    int choose  = QMessageBox::critical(
                this,
                "Critical消息框",
                "这是一个Critical消息框测试",
                QMessageBox::Cancel|QMessageBox::Ok,
                QMessageBox::NoButton//默认选中的,焦点在哪个按钮上
                );
}
警告消息框warning

在这里插入图片描述
v

oid MyDialog::on_warningMsg_clicked()
{
    ui->label->setText("Warning Message Box");
    int choose = QMessageBox::warning(
                this,
                "Warning消息框",
                "您的文档尚未保存,是否要保存",
                QMessageBox::Save|QMessageBox::Discard|QMessageBox::Cancel,
                QMessageBox::Save);

    switch(choose)
    {
    case QMessageBox::Save:
        ui->label->setText("Warning/save");
        break;
    case QMessageBox::Discard:
        ui->label->setText("Warning/discard");
        break;
    case QMessageBox::Cancel:
        ui->label->setText("Warning/Cancel");
        break;
    }
}
自定义消息框

在这里插入图片描述

void MyDialog::on_customMsg_clicked()
{
    ui->label->setText("Custom Message Box");
    //创建消息框对象
    QMessageBox customMsg;//*************************
    //向消息框中添加按钮 addButton()方法
    QPushButton* pyes = customMsg.addButton("yes",QMessageBox::ActionRole);
    QPushButton* pno = customMsg.addButton("no",QMessageBox::ActionRole);
    QPushButton* pcancel = customMsg.addButton(QMessageBox::Cancel);
    //消息框的上方 标题
    customMsg.setWindowTitle("Custom消息框");
    //消息框的提示内容文本
    customMsg.setText("这是我们自定义的消息框!");
    //添加前方的图片图标
    customMsg.setIconPixmap(QPixmap(":/head23.jpg"));
    //消息框执行
    //exec();  QDialog()中的一个函数,消息循环会在这个函数里面更新,等用户点击按钮后,调用exec()函数,执行
    customMsg.exec();//模态窗口

    /*
     *  static在函数结束时不会被回收的
        static QMessageBox mb;
        mb.show();

    //也能显示对话框,引起内存泄漏
        QMessageBox* qb = new QMessageBox;
        qb->show();
     * */



    //判断点击了消息框中的哪个按钮

    if(customMsg.clickedButton() == pyes)
    {
        ui->label->setText("Custom/yes");
    }
    else if(customMsg.clickedButton() == pno)
    {
        ui->label->setText("Custom/no");
    }
    else if(customMsg.clickedButton() == pcancel)
    {
        ui->label->setText("Custom/cancel");
    }
}
关于qt消息框aboutQt

在这里插入图片描述

void MyDialog::on_aboutQTMsg_clicked()
{
    ui->label->setText("AboutQt Message Box");
    QMessageBox::aboutQt(this,"终于完事了!!");
}
关于消息框about

在这里插入图片描述

void MyDialog::on_aboutMsg_clicked()
{
    ui->label->setText("About Message Box");
    QMessageBox::about(this,"About消息框","看到这里你还好么?");

}

输入对话框getText;getInt;getDouble
void MyWidget::on_pushButton_4_clicked()
{
    bool ok;
    // 获取字符串
    QString string = QInputDialog::getText(this, tr("输入字符串对话框"),
                                           tr("请输入用户名:"), QLineEdit::Normal,tr("admin"), &ok);
    if(ok) qDebug() << "string:" << string;
    // 获取整数
    int value1 = QInputDialog::getInt(this, tr("输入整数对话框"),
                                      tr("请输入-1000到1000之间的数值"), 100, -1000, 1000, 10, &ok);
    if(ok) qDebug() << "value1:" << value1;
    // 获取浮点数
    double value2 = QInputDialog::getDouble(this, tr("输入浮点数对话框"),
                                            tr("请输入-1000到1000之间的数值"), 0.00, -1000, 1000, 2, &ok);
    if(ok) qDebug() << "value2:" << value2;
    QStringList items;
    items << tr("条目1") << tr("条目2");
    // 获取条目
    QString item = QInputDialog::getItem(this, tr("输入条目对话框"),
                                         tr("请选择或输入一个条目"), items, 0, true, &ok);
    if(ok) qDebug() << "item:" << item;
}
向导对话框
void MyWidget::on_pushButton_8_clicked()
{
    QWizard wizard(this);
    wizard.setWindowTitle(tr("向导对话框"));
    wizard.addPage(createPage1());     // 添加向导页面
    wizard.addPage(createPage2());
    wizard.addPage(createPage3());
    wizard.exec();
}

QWizardPage * MyWidget::createPage1()  // 向导页面1
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("介绍"));
    return page;
}
QWizardPage * MyWidget::createPage2()  // 向导页面2
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("用户选择信息"));
    return page;
}
QWizardPage * MyWidget::createPage3()  // 向导页面3
{
    QWizardPage *page = new QWizardPage;
    page->setTitle(tr("结束"));
    return page;
}

进度对话框
void MyWidget::on_pushButton_6_clicked()
{
    QProgressDialog dialog(tr("文件复制进度"), tr("取消"), 0, 50000, this);
    dialog.setWindowTitle(tr("进度对话框"));     // 设置窗口标题
    dialog.setWindowModality(Qt::WindowModal);  // 将对话框设置为模态
    dialog.show();
    for(int i=0; i<50000; i++) {                // 演示复制进度
        dialog.setValue(i);                     // 设置进度条的当前值
        QCoreApplication::processEvents();      // 避免界面冻结
        if(dialog.wasCanceled()) break;         // 按下取消按钮则中断
    }
    dialog.setValue(50000);    // 这样才能显示100%,因为for循环中少加了一个数
    qDebug() << tr("复制结束!");
}

20.文本框的选择toPlainText();toHtml();text();currentText()

QPlainTextEdit 多行简单文本框用toPlainText();

QTextEdit富文本框,简单文本用 toPlainText(),富文本用toHtml().

QLineEdit(行编辑时) 时用text().

currentText()保存组合框当前文本 

|setValue() 给函数赋值
|value()isChecked() 点击选择


void MainWindow::on_pushButton_combo_clicked()
{
    //ui->comboBox->currentText() 获取选中的那条文本内容
    ui->label_combo->setText(ui->comboBox->currentText());//currentText()保存组合框当前文本
    ui->label_com2->setText(ui->comboBox->currentText().append("aaaaaaaaa"));
}
//radiobutton 单选按钮
void MainWindow::on_pushButton_radiobutton_clicked()
{
    //获取按钮上的文本 ui->checkBox->text()

    if(ui->radioButton->isChecked())
    {
        ui->label_radio->setText("falm");
    }else  if(ui->radioButton_2->isChecked())
        ui->label_radio->setText("man");

}

在这里插入图片描述

21.控件样式动态更改

 ui->frame->setFrameShape(QFrame::Box);
    ui->frame->setFrameShadow(QFrame::Sunken);
    // 以上两个函数可以使用setFrameStyle(QFrame::Box | QFrame::Sunken)代替
    ui->frame->setLineWidth(5);
    ui->frame->setMidLineWidth(10);

在这里插入图片描述frame控件
frame控件

22.字体更改

   QFont font;
    font.setFamily("华文行楷");
    font.setPointSize(20);
    font.setBold(true);
    font.setItalic(true);
    ui->label->setFont(font);//setFont更改字体、颜色

    QString string = tr("标题太长,需要进行省略!");
    QString str = ui->label->fontMetrics().elidedText(string, Qt::ElideRight, 180);
    ui->label->setText(str);

23.label中添加动画以及图片

动态添加label
 QLabel *label = new QLabel(this);
    label->setText(tr("hello Qt!"));
    label->move(100,50);//label 所在位置
ui->label->setPixmap(QPixmap("D:/qtwenjian/src/03/3-8/logo.png"));

QMovie *movie = new QMovie("D:/qtwenjian/src/03/3-8/donghua.gif");
ui->label->setMovie(movie);                  // 在标签中添加动画
 movie->start();
按键进行隐藏窗口
void MyWidget::on_pushButton_toggled(bool checked)
{
    ui->textEdit->setVisible(checked);  // 设置文本编辑器的显示和隐藏
    if(checked) ui->pushButton->setText(tr("隐藏可扩展窗口"));
    else ui->pushButton->setText(tr("显示可扩展窗口"));
}

24.lcdNumber显示系统时间

头文件定义

#include <QDateTime>
    QTimer *pTimer;
     QDateTime dateTime;
MyWidget::MyWidget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::MyWidget)
{
    ui->setupUi(this);

   pTimer =new QTimer();
     connect(pTimer, SIGNAL(timeout()), this, SLOT(showtime()));  //用一个定时信号来更改时间
     pTimer->start(500);

}
void MyWidget::showtime()
{
    dateTime=QDateTime::currentDateTime();//获取当地时间
       ui->lcdNumber->resize(100,50);//设置大小
       ui->lcdNumber->setDigitCount(8);
       QString timestr = dateTime.toString("hh:mm:ss"); //设置时间格式
       ui->lcdNumber->display(timestr);
}
lcdNumber位移
Widget::Widget(QWidget *parent) :
    QWidget(parent),
    ui(new Ui::Widget)
{
    ui->setupUi(this);

    id1 = startTimer(1000);                  // 开启一个1秒定时器,返回其ID
    id2 = startTimer(1500);
    id3 = startTimer(2200);

    QTimer *timer = new QTimer(this);           // 创建一个新的定时器
    // 关联定时器的溢出信号到槽上
    connect(timer, &QTimer::timeout, this, &Widget::timerUpdate);
    timer->start(1000);                         // 设置溢出时间为1秒,并启动定时器

    qsrand(QTime(0, 0, 0).secsTo(QTime::currentTime()));

    QTimer::singleShot(10000, this, &Widget::close);
}

Widget::~Widget()
{
    delete ui;
}


void Widget::timerEvent(QTimerEvent *event)
{
    if (event->timerId() == id1) {       // 判断是哪个定时器
        qDebug() << "timer1";
    }
    else if (event->timerId() == id2) {
        qDebug() << "timer2";
    }
    else {
        qDebug() << "timer3";
    }
}

void Widget::timerUpdate()                  // 定时器溢出处理
{
    QTime time = QTime::currentTime();      // 获取当前时间
    QString text = time.toString("hh:mm");  // 转换为字符串
    if((time.second() % 2) == 0) text[2]=' '; // 每隔一秒就将“:”显示为空格
    ui->lcdNumber->display(text);

    int rand = qrand() % 200;            // 产生300以内的正整数
    ui->lcdNumber->move(rand, rand);

}

25.菜单栏设置

QMenu *editMenu = ui->menuBar->addMenu(tr("编辑(&E)")); // 添加编辑菜单
    QAction *action_Open = editMenu->addAction(             // 添加打开菜单
                                                        QIcon("此处添加图标地址"),  tr("打开文件(&O)"));
    action_Open->setShortcut(QKeySequence("Ctrl+O"));       // 设置快捷键
    ui->mainToolBar->addAction(action_Open);                // 在工具栏中添加动作

    QActionGroup *group = new QActionGroup(this);           // 建立动作组
    QAction *action_L = group->addAction(tr("左对齐(&L)")); // 向动作组中添加动作
    action_L->setCheckable(true);                  // 设置动作checkable属性为true
    QAction *action_R = group->addAction(tr("右对齐(&R)"));
    action_R->setCheckable(true);
    QAction *action_C = group->addAction(tr("居中(&C)"));
    action_C->setCheckable(true);
    action_L->setChecked(true);                    // 最后指定action_L为选中状态
    editMenu->addSeparator();                      // 向菜单中添加间隔器
    editMenu->addAction(action_L);                 // 向菜单中添加动作
    editMenu->addAction(action_R);
    editMenu->addAction(action_C);

    QToolButton *toolBtn = new QToolButton(this);        // 创建QToolButton
    toolBtn->setText(tr("颜色"));
    QMenu *colorMenu = new QMenu(this);                  // 创建一个菜单
    colorMenu->addAction(tr("红色"));
    colorMenu->addAction(tr("绿色"));
    toolBtn->setMenu(colorMenu);                         // 添加菜单
    toolBtn->setPopupMode(QToolButton::MenuButtonPopup); // 设置弹出模式
    ui->mainToolBar->addWidget(toolBtn);                 // 向工具栏添加QToolButton按钮

    QSpinBox *spinBox = new QSpinBox(this);             // 创建QSpinBox
    ui->mainToolBar->addWidget(spinBox);                // 向工具栏添加QSpinBox部件

    // 显示临时消息,显示2000毫秒即2秒
    ui->statusBar->showMessage(tr("欢迎使用多文档编辑器"), 2000);
    // 创建标签,设置标签样式并显示信息,然后将其以永久部件的形式添加到状态栏
    QLabel *permanent = new QLabel(this);
    permanent->setFrameStyle(QFrame::Box | QFrame::Sunken);
    permanent->setText("www.qter.org");
    ui->statusBar->addPermanentWidget(permanent);

}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::on_action_New_triggered()//咋转到槽函数的啊

{
    // 新建文本编辑器部件
    QTextEdit *edit = new QTextEdit(this);
    // 使用QMdiArea类的addSubWindow()函数创建子窗口,以文本编辑器为中心部件
    QMdiSubWindow *child = ui->mdiArea->addSubWindow(edit);
    child->setWindowTitle(tr("多文档编辑器子窗口"));
    child->show();

}

void MainWindow::on_action_Dock_triggered()
{
    ui->dockWidget->show();
}

26.文本处理

富文本框处理TextEdit

富文本是可以支持多格式输入:字体颜色、表格、图片等。
头文件#include

QTextDocument *document = ui->textEdit->document();   // 获取文档对象
    QTextFrame *rootFrame = document->rootFrame();        // 获取根框架
    QTextFrameFormat format;                              // 创建框架格式
    format.setBorderBrush(Qt::red);                       // 边界颜色
    format.setBorder(3);                                  // 边界宽度
    rootFrame->setFrameFormat(format);                    // 框架使用格式

在这里插入图片描述

QTextFrameFormat frameFormat;
    frameFormat.setBackground(Qt::lightGray);                  // 设置背景颜色
    frameFormat.setMargin(10);                                 // 设置边距
    frameFormat.setPadding(5);                                 // 设置填衬
    frameFormat.setBorder(2);
    frameFormat.setBorderStyle(QTextFrameFormat::BorderStyle_Dotted); // 设置边框样式
    QTextCursor cursor = ui->textEdit->textCursor();                  // 获取光标
    cursor.insertFrame(frameFormat);                                  // 在光标处插入框架
   QAction *action_textFrame = new QAction(tr("框架"), this);
    connect(action_textFrame, &QAction::triggered, this, &MainWindow::showTextFrame);
    ui->mainToolBar->addAction(action_textFrame);      // 在工具栏添加动作

    QAction *action_textBlock = new QAction(tr("文本块"), this);
    connect(action_textBlock, &QAction::triggered, this, &MainWindow::showTextBlock);
//    ui->mainToolBar->addAction(action_textBlock);

    QAction *action_font = new QAction(tr("字体"), this);
    action_font->setCheckable(true);                   // 设置动作可以被选中
    connect(action_font, &QAction::toggled, this, &MainWindow::setTextFont);
//    ui->mainToolBar->addAction(action_font);
}   


void MainWindow::showTextFrame()                    // 遍历框架
{
    QTextDocument *document = ui->textEdit->document();
    QTextFrame *frame = document->rootFrame();
    QTextFrame::iterator it;                          // 建立QTextFrame类的迭代器
    for (it = frame->begin(); !(it.atEnd()); ++it) {
        QTextFrame *childFrame = it.currentFrame();  // 获取当前框架的指针
        QTextBlock childBlock = it.currentBlock();   // 获取当前文本块
        if (childFrame)
            qDebug() << "frame";
        else if (childBlock.isValid())
            qDebug() << "block:" << childBlock.text();
    }
}

void MainWindow::showTextBlock()          // 遍历文本块
{
    QTextDocument *document = ui->textEdit->document();
    QTextBlock block = document->firstBlock();         // 获取文档的第一个文本块
    for (int i = 0; i < document->blockCount(); i++) {
        qDebug() << tr("文本块%1,文本块首行行号为:%2,长度为:%3,内容为:")
                    .arg(i).arg(block.firstLineNumber()).arg(block.length())
                 << block.text();
        block = block.next();                         // 获取下一个文本块
    }
}

void MainWindow::setTextFont(bool checked)         // 设置字体格式
{
    if(checked){                                   // 如果处于选中状态
        QTextCursor cursor = ui->textEdit->textCursor();
        QTextBlockFormat blockFormat;              // 文本块格式
        blockFormat.setAlignment(Qt::AlignCenter); // 水平居中
        cursor.insertBlock(blockFormat);           // 使用文本块格式
        QTextCharFormat charFormat;              // 字符格式
        charFormat.setBackground(Qt::lightGray);   // 背景色
        charFormat.setForeground(Qt::blue);          // 字体颜色
        // 使用宋体,12号,加粗,倾斜
        charFormat.setFont(QFont(tr("宋体"), 12, QFont::Bold, true));
        charFormat.setFontUnderline(true);         // 使用下划线
        cursor.setCharFormat(charFormat);          // 使用字符格式
        cursor.insertText(tr("测试字体"));         // 插入文本
    }
    else{/*恢复默认的字体格式*/}        // 如果处于非选中状态,可以进行其他操作
}

使用拖放来打开文本

#include <QDragEnterEvent>
#include <QUrl>
#include <QFile>
#include <QTextStream>
#include <QMimeData>
void MainWindow::dragEnterEvent(QDragEnterEvent *event) // 拖动进入事件
{
    if(event->mimeData()->hasUrls())                     // 数据中是否包含URL
        event->acceptProposedAction();                  // 如果是则接收动作//查找路径
    else event->ignore();                                        // 否则忽略该事件
}
void MainWindow::dropEvent(QDropEvent *event)           // 放下事件
{
    const QMimeData *mimeData = event->mimeData();      // 获取MIME数据
    if(mimeData->hasUrls()){                            // 如果数据中包含URL
        QList<QUrl> urlList = mimeData->urls();         // 获取URL列表
        // 将其中第一个URL表示为本地文件路径
        QString fileName = urlList.at(0).toLocalFile();//toLocalFile();转换为本地文件路径
        if(!fileName.isEmpty()){                        // 如果文件路径不为空
            QFile file(fileName);     // 建立QFile对象并且以只读方式打开该文件
            if(!file.open(QIODevice::ReadOnly)) return;
            QTextStream in(&file);                      // 建立文本流对象
            ui->textEdit->setText(in.readAll());  // 将文件中所有内容读入编辑器
        }
    }
}

设置图片拖拽

 setAcceptDrops(true);                      // 设置窗口部件可以接收拖入
    QLabel *label = new QLabel(this);          // 创建标签
    QPixmap pix("../imagedragdrop/logo.png");
    label->setPixmap(pix);                     // 添加图片
    label->resize(pix.size());                 // 设置标签大小为图片的大小
    label->move(100,100);
    label->setAttribute(Qt::WA_DeleteOnClose); // 当窗口关闭时销毁图片

void MainWindow::mousePressEvent(QMouseEvent *event)   //鼠标按下事件
{
    // 第一步:获取图片
    // 将鼠标指针所在位置的部件强制转换为QLabel类型
    QLabel *child = static_cast<QLabel*>(childAt(event->pos()));
    if(!child->inherits("QLabel")) return; // 如果部件不是QLabel则直接返回
    QPixmap pixmap = *child->pixmap();     // 获取QLabel中的图片

    // 第二步:自定义MIME类型
    QByteArray itemData;                                     // 创建字节数组
    QDataStream dataStream(&itemData, QIODevice::WriteOnly); // 创建数据流
    // 将图片信息,位置信息输入到字节数组中
    dataStream << pixmap << QPoint(event->pos() - child->pos());

    // 第三步:将数据放入QMimeData中
    QMimeData *mimeData = new QMimeData;  // 创建QMimeData用来存放要移动的数据
    // 将字节数组放入QMimeData中,这里的MIME类型是我们自己定义的
    mimeData->setData("myimage/png", itemData);

    // 第四步:将QMimeData数据放入QDrag中
    QDrag *drag = new QDrag(this);      // 创建QDrag,它用来移动数据
    drag->setMimeData(mimeData);
    drag->setPixmap(pixmap);//在移动过程中显示图片,若不设置则默认显示一个小矩形
    drag->setHotSpot(event->pos() - child->pos()); // 拖动时鼠标指针的位置不变

    // 第五步:给原图片添加阴影
    QPixmap tempPixmap = pixmap; // 使原图片添加阴影
    QPainter painter;            // 创建QPainter,用来绘制QPixmap
    painter.begin(&tempPixmap);
    // 在图片的外接矩形中添加一层透明的淡黑色形成阴影效果
    painter.fillRect(pixmap.rect(), QColor(127, 127, 127, 127));
    painter.end();
    child->setPixmap(tempPixmap); // 在移动图片过程中,让原图片添加一层黑色阴影

    // 第六步:执行拖放操作
    if (drag->exec(Qt::CopyAction | Qt::MoveAction, Qt::CopyAction)
            == Qt::MoveAction)  // 设置拖放可以是移动和复制操作,默认是复制操作
        child->close();         // 如果是移动操作,那么拖放完成后关闭原标签
    else {
        child->show();            // 如果是复制操作,那么拖放完成后显示标签
        child->setPixmap(pixmap); // 显示原图片,不再使用阴影
    }
}

void MainWindow::dragEnterEvent(QDragEnterEvent *event) // 拖动进入事件
{
      // 如果有我们定义的MIME类型数据,则进行移动操作
     if (event->mimeData()->hasFormat("myimage/png")) {
             event->setDropAction(Qt::MoveAction);
             event->accept();
     } else {
         event->ignore();
     }
}
void MainWindow::dragMoveEvent(QDragMoveEvent *event)   // 拖动事件
{
     if (event->mimeData()->hasFormat("myimage/png")) {
             event->setDropAction(Qt::MoveAction);
             event->accept();
     } else {
         event->ignore();
     }
}

void MainWindow::dropEvent(QDropEvent *event) // 放下事件
{
    if (event->mimeData()->hasFormat("myimage/png")) {
         QByteArray itemData = event->mimeData()->data("myimage/png");
         QDataStream dataStream(&itemData, QIODevice::ReadOnly);
         QPixmap pixmap;
         QPoint offset;
         // 使用数据流将字节数组中的数据读入到QPixmap和QPoint变量中
         dataStream >> pixmap >> offset;
         // 新建标签,为其添加图片,并根据图片大小设置标签的大小
         QLabel *newLabel = new QLabel(this);
         newLabel->setPixmap(pixmap);
         newLabel->resize(pixmap.size());
   // 让图片移动到放下的位置,不设置的话,图片会默认显示在(0,0)点即窗口左上角
         newLabel->move(event->pos() - offset);
         newLabel->show();
         newLabel->setAttribute(Qt::WA_DeleteOnClose);
         event->setDropAction(Qt::MoveAction);
         event->accept();
     } else {
         event->ignore();
     }
}

设置打印转换格式pdf

void MainWindow::doPrint()                    // 打印
{
    QPrinter printer;                           // 创建打印机对象
    QPrintDialog dlg(&printer, this);  // 创建打印对话框
    // 如果编辑器中有选中区域,则打印选中区域
    if (ui->textEdit->textCursor().hasSelection())
        dlg.addEnabledOption(QAbstractPrintDialog::PrintSelection);
    if (dlg.exec() == QDialog::Accepted) {    // 如果在对话框中按下了打印按钮
        ui->textEdit->print(&printer);           // 则执行打印操作
    }
}

void MainWindow::doPrintPreview()                       // 打印预览
{
    QPrinter printer;
    QPrintPreviewDialog preview(&printer, this);     // 创建打印预览对话框
    // 当要生成预览页面时,发射paintRequested()信号
    connect(&preview, &QPrintPreviewDialog::paintRequested,
            this, &MainWindow::printPreview);
    preview.exec();
}

在这里插入图片描述
生成pdf格式

void MainWindow::createPdf()                // 生成PDF文件
{
    QString fileName = QFileDialog::getSaveFileName(this, tr("导出PDF文件"),
                                                    QString(), "*.pdf");
    if (!fileName.isEmpty()) {
        if (QFileInfo(fileName).suffix().isEmpty())
            fileName.append(".pdf");        // 如果文件后缀为空,则默认使用.pdf
        QPrinter printer;
        printer.setOutputFormat(QPrinter::PdfFormat);    // 指定输出格式为pdf
        printer.setOutputFileName(fileName);
        ui->textEdit->print(&printer);
    }
}

27正则表达式

主要用来限制对话框的输入键盘限制

#define  NM_REG_AIRPORT "^(?:200000|1\\d\\d\\d\\d\\d|[1-9]\\d\\d\\d\\d|[1-9]\\d\\d\\d|[1-9]\\d\\d)$"
宏:?代表禁止输入±,最大数字200000,或者1开头,后面最多5位,此后同理,1-9开头,此后最多4为。
QRegExp AIRport(NM_REG_AIRPORT);
QValidator *validatorAIRport = new QRegExpValidator(AIRport);
ui.lineEdit->setValidator(validatorAIRport);
ui.lineEdit->setToolTip(QString::fromLocal8Bit("输入完别忘了点确定"));
控件提示框
ui.lineEdit->setToolTip(QString::fromLocal8Bit("别瞎输入:0-200000之间,多了也不好使,输入完别忘了点确定"));
//第一个控件设置名字,

28定时器

defaulttime是我想定义的初始值。
后面界面输入数值,进行点击跳转到别的槽函数进行数字更改

此处我写于构造函数
my_time = new QTimer(this);		//定时器
	my_time->start(defaulttime);					//定时器3000ms
	connect(my_time, SIGNAL(timeout()), this, SLOT(refresh()));	//绑定槽函数

	void NcReadPerformanceWnd::okButton()//定时器刷新
{
	num = ui.lineEdit->text();
	defaulttime = num.toInt();
	my_time->setInterval(defaulttime);//刷新定时器周期
}

29comBox 添加信息及其美化

ui.comboBox->setEditable(true);//设置combobox可编辑
		ui.comboBox->setCurrentText(list.at(0).toString());	//设置combox初始写入数据,list.at(0)

QComboBox *ComBox=new QComboBox(this);
    ComBox->setGeometry(0,0,209,45);
    ComBox->addItem(tr("1小时"));
    ComBox->addItem(tr("2小时"));
    ComBox->addItem(tr("3小时"));
    ComBox->addItem(tr("4小时"));
    ComBox->setStyleSheet("QComboBox{"//基本样式
                                "border-image:url(:/Sys/output-box.png);"
                                "font:黑体;"
                                "font-size:20px;"
                                "color:rgb(255,255,255);"
                                "background-color:transparent;"
                                "width:209px;"
                                "height:45px;"
                            "}"
                            "QComboBox::down-arrow{"//下拉三角样式
                                "image:url(:/Sys/btn_pulldown.png);"
                                "background-color:transparent;"
                                "width:36px;"
 
                                "height:22px;"
                                "right:2px;"
                            "}"
 
                            "QComboBox QAbstractItemView {"//Box内条目
                                "outline:0px;" //去掉虚线
                             "}"
 
                            "QComboBox::drop-down {"
                                "subcontrol-origin: padding;"
                                "subcontrol-position: top right;"
                                "width: 36px;"
                             "}"
                            );

在这里插入图片描述
https://blog.csdn.net/qq_41673920/article/details/93495716

30button删除tableWidget中某一行

void NcStateTable::deleteWidgetLine()
{

	
	QPushButton *btn = (QPushButton *)sender();//bun发送信号
	int x = btn->mapToParent(QPoint(0, 0)).x();//将子小部件坐标转化为父部件坐标x
	int y = btn->mapToParent(QPoint(0, 0)).y();
	QModelIndex index = tablewidget->indexAt(QPoint(x, y));//返回表项坐标的索引位置。
	int row = index.row();
	tablewidget->removeRow(row);

}

页面删除deleteLater

当在窗口上.children可以返回当前窗口所有子类对象列表
deletelater 可以删除窗口子类对象 ,我觉得和dilete相比最大区别delete是直接删除,deletelater是发一个信号,当信号主窗口接收时删除

//m_pSetValueWnd new出来的窗口
	QObjectList objectList = m_pSetValueWnd.children();//children 返回子对象的列表
	for (int i=0; i<objectList.size(); i++)
	{
		objectList[i]->deleteLater();//好像是delete安全形式 // deleteLater并没有将对象立即销毁,而是向主消息循环发送了一个event,下一次主消息循环收到这个event之后才会销毁对象
	}

extern

NcSymbolTable* Box;

NcSymbolTable::NcSymbolTable(QWidget *parent) 
	: NRFWidget(parent)
{
	Box = this;
extern NcSymbolTable* Box;

writeDatagram通信发送函数

//writeDatagram方法传入4个参数,分别是数据,数据大小,接收端ip,接收端端口
//如果传输成功,该方法返回传输数据的大小(字节),如果失败返回-1

tablewidget用法

ui.ForecastStrike->insertRow(ui.ForecastStrike->rowCount());//添加新一行

ui.tableWidget->item(count, 0)->setText(QString("%1").arg(line))
	//ui.tableWidget->setHorizontalHeaderLabels(horHeaderStr);							//设置表头内容

	//ui.tableWidget->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);		//让页面平铺
	ui.tableWidget->verticalHeader()->setVisible(false);   //隐藏列表头  
tablewidget加按钮

QTableWidgetItem * item = new QTableWidgetItem();
			item->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
			ui.tableWidget->setItem(columnsNum, 0, item);
			QCheckBox* CBox = new QCheckBox();
			m_mapTableCheckbox.insert(columnsNum, CBox);
			CBox->setObjectName("TableCheckBox");
			ui.tableWidget->setCellWidget(columnsNum, 0, CBox);
			PBuManagers = new QPushButton(QString::fromLocal8Bit("确认审核"));
			QTableWidgetItem * itemmm = new QTableWidgetItem();
			ui.tableWidget->setItem(columnsNum, 12, itemmm);
			ui.tableWidget->setCellWidget(columnsNum, 12, PBuManagers);
			connect(PBuManagers, SIGNAL(clicked()), this, SLOT(slotsAuditInformation()));//点击进去审核函数
for (it = orcList.begin(), count = 0, line = 1; it != orcList.end(); it++, count++, line++)
{
	emit SignalAdd(count);//添加一行绑定控件
	int i = 0;
	ui.tableWidget->setItem(count, 0, new QTableWidgetItem());//setItem添加一个单元格
	ui.tableWidget->item(count, 0)->setText(QString("%1").arg(line));
	ui.tableWidget->item(count, 0)->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
	for (int j = 0; j < orcList.at(0).size(); j++)
	{
		ui.tableWidget->setItem(count, j + 1, new QTableWidgetItem());//setItem添加一个单元格
		if (j == 10)
		{
			ui.tableWidget->item(count, j + 1)->setBackground(QColor(orcList.at(count).at(j).toInt()));//笔刷颜色
			ui.tableWidget->item(count, j + 1)->setData(Qt::UserRole, orcList.at(count).at(j).toInt());//颜色默认值
		}
		else if (j == 9 || j == 8)
		{
			QString strText = (orcList.at(count).at(j).toInt() == 1) ? QString::fromLocal8Bit("是") : QString::fromLocal8Bit("否");//查看是否是1,
			ui.tableWidget->item(count, j + 1)->setText(strText);
		}
		else
		{
			ui.tableWidget->item(count, j + 1)->setText(orcList.at(count).at(j).toString());
		}
		
	}
}	

二 页面美化设置

 // 获取pushButton的调色板
    QPalette palette1 = ui->pushButton->palette();
    // 设置按钮文本颜色为红色
    palette1.setColor(QPalette::ButtonText, Qt::red);
    // 设置按钮背景色为绿色
    palette1.setColor(QPalette::Button, Qt::green);
    // pushButton使用修改后的调色板
    ui->pushButton->setPalette(palette1);
    // 设置spinBox不可用
    ui->spinBox->setDisabled(true);
    QPalette palette2 = ui->spinBox->palette();
    // 设置spinBox不可用时的背景颜色为蓝色
    palette2.setColor(QPalette::Disabled,QPalette::Base,Qt::blue);
    ui->spinBox->setPalette(palette2);

1. 伪状态(鼠标放在页面上的状态)

在这里插入图片描述

2.屏蔽窗口

 QPixmap pix;
    // 加载图片
    pix.load(":/image/yafeilinux.png");
    // 设置窗口大小为图片大小
    resize(pix.size());
    // 为窗口设置遮罩
    setMask(pix.mask());

3.页面透明度

//    // 设置窗口的不透明度为0.5
    setWindowOpacity(0.5);

窗口部件提升

在这里插入图片描述
Qt学习:将ui界面中的默认控件提升为自定义类
https://blog.csdn.net/wzj0808/article/details/96102352

更改list中.at特定位置中的值 [ ]

[][]相当于at,at属于const,不可修改值

QVariant temp = QVariant(QString::fromLocal8Bit("是"));
			orcList[z][t] = temp;//[][]相当于at,at属于const,不可修改值,这个不同,但这个不会提醒报错
定时器周期

关键点在于我后面虽然对初始值进行了传值处理,但是不好使。我只能刷新定时器周期,才可以正常运行

.其他未整理

//3.关联两个对象 connect 四个参数:1. 发送信号的对象 2. 发送的信号 3. 接受者所在的位置 4.对应处理的槽函数

connect(ui->btn_1,SIGNAL(clicked()),this,SLOT(btn_showHello_slot()));

字符串转换
toint
//setItem添加一个单元格
//toLocal8Bit把字符串转换成字节数组
push_back//结尾添加
push_front//头添加
setValue() //给函数赋值
value() //值

main函数创建页面

QWidget widget;
    widget.resize(400, 300);       // 设置窗口大小
    widget.move(200, 100);         // 设置窗口位置
    widget.show();

常用插件函数

setItem(1,num)//可以对数据进行添加,用了combox里,但是是在原本有数据情况下,
没有数据用
addItem(name)

常用MIME类型数据处理函数

在这里插入图片描述

settoolTep函数

鼠标悬停显示气泡内容
用法

三 qt小程序

1.读取xml

void NcMissileComputing::readXml(char* fileName)
{
	QFile fp(QString::fromLocal8Bit(fileName));
	QXmlStreamReader reader;
	if (!fp.open(QFile::ReadOnly))
	{
		NRFGuiUtil::ShowPromptMessage(NULL, "警告!", QString::fromLocal8Bit("%1文件打开失败").arg(fileName));
	}
	reader.setDevice(&fp);
	while (!reader.atEnd())
	{
		if (reader.name() == QString::fromLocal8Bit("LocationGunTruckX"))//炮车x
		{
			dPosX = reader.readElementText().toDouble();
		}
		else if (reader.name() == QString::fromLocal8Bit("LocationGunTruckY"))//跑车y
		{
			dPosY = reader.readElementText().toDouble();
		}
		reader.readNext();
}
  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
很抱歉,我没有找到关于"Qtcreate"的相关信息。请问您是指"Qt Creator"吗?Qt Creator是一个集成开发环境(IDE),用于开发Qt应用程序。它支持多种平台,包括iOS、Android和WinRT。通过Qt Creator,您可以编写和调试代码,并使用Qt的字符串类,如QString和QByteArray,来处理字符串。QString是Qt最常用的字符串类,而QByteArray适用于处理以'\0'结尾的传统字符串。QByteArray可以处理多字节编码的字符串,如UTF-8、GBK和Big5。在使用QByteArray时,程序员需要确定所使用的字符串编码格式。此外,QByteArray还使用了隐式共享机制来提高运行效率。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Qt Create 笔记 (一) 1.QString 2.QByteArray](https://blog.csdn.net/linbounconstraint/article/details/51497782)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] - *2* [Game Programming Using QT(PACKT,2016)](https://download.csdn.net/download/vanridin/9431499)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_1"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值