QT基础操作

扫码查看

子窗口关闭父窗口打开

son.h:

    //重写关闭事件//以便点下叉号也能正常显示父窗口
    void closeEvent(QCloseEvent *);
signals:
    void ExitWin();//退出信号

son.cpp

void input_window::closeEvent(QCloseEvent *)//重写关闭事件以发送信号
{
     emit ExitWin();//发送信号打开父窗口
}
void input_window::on_pushButton_2_clicked()//退出按钮
{
    this->hide();
    emit ExitWin();
}

father.cpp

void op_adim::on_input_clicked()//触发子窗口打开得按钮连接的槽函数
{
    this->hide();
    input_win=new input_window;
    input_win->show();
    connect(input_win,SIGNAL(ExitWin()),this,SLOT(show()));//捕捉子窗口退出的信号并与父窗口显示函数连接
}

控件定时消失

void  Adim::hidelable() //控制提示字样定时消失
{
    QTimer::singleShot(3000, ui->lable, SLOT(hide())); //3秒
}

QLable显示图片

首先添加资源文件,方法不再赘述

QPixmap pixmap(":/new/prefix1/image/adim.png");
ui->label->setScaledContents(true);//显示图片自适应lable大小
ui->label->setPixmap(pixmap);
ui->label->show();

//设置背景图片
QPixmap pixmap2 = QPixmap(":/new/prefix1/image/back2.png").scaled(this->size());
QPalette palette2(this->palette());
palette2.setBrush(QPalette::Background, QBrush(pixmap2));
this->setPalette(palette2);

常用字体格式

QFont input_font ( "Microsoft YaHei",16,65); //依次为字体(微软雅黑),大小,加粗(权重是75)
font.setFamily("宋体"); //设置文字字体
font.setPixelSize(50);//设置文字大小为50像素
font.setItalic(true);//斜体
font.setPointSize(12);//设置文字大小
QPalette pa;//设置颜色
pa.setColor(QPalette::WindowText,Qt::blue);//蓝色
ui->title->setPalette(pa);
ui->title->setFont(font);
ui->title->setAlignment(Qt::AlignCenter);//居中对齐

逐行读取文件

QFile file("users.txt");
    if (!file.open(QFile::ReadOnly ))
            qDebug() << "open file failed";
    else
    {
        QTextStream in(&file);
        QString line = in.readLine();
        while (!line.isNull())
        {
            //一些操作
            line = in.readLine();
        }
        file.close();
    }

逐行读取文件并重新写入

QFile file("users.txt");
        if (!file.open(QFile::ReadOnly ))  qDebug() << "open file failed";
        else
        {
            QTextStream out(&file);
            QString strAll=out.readAll();//读出文件所有内容
            int line = nump[tmp];
            file.close();

            //重新打开文件写入
            if(file.open(QIODevice::WriteOnly|QIODevice::Text))
            {
                QTextStream in(&file);
                QStringList   strList=strAll.split("\r\n");//将字符串逐行分隔到字符串列表中//win10系统下换行符为\r\n!!!
                for(int i=0;i<strList.count();i++)
                {
                    if(i==line)//如果是需要修改的那一行
                    {
                        //一些操作
                    }
                    else
                        in<<strList.at(i)<<'\n';
                }
                file.close();
                ui->lable->setText(QString::fromLocal8Bit("录入成功"));
            }
        }
    }

窗口传递信息

当前窗口向op_win发送一串字符:

connect(this,SIGNAL(sendStr(QString)),op_win,SLOT(getStr(QString)));
emit sendStr(str);

另存为文件

void op_adim::on_view_clicked()//保存文件按钮连接槽函数
{
    QString fileName = QFileDialog::getSaveFileName(this,tr("Open Config"),"", tr("txt(*.txt)"));//默认txt格式
    if (!fileName.isNull())//选择保存
    {
        qDebug()<<fileName; //fileName是文件绝对路径与名称
        QFile file_out(fileName);
        file_out.open(QIODevice::WriteOnly|QIODevice::Text);
        //向文件里写点东西
        file_out.close();
    }
}

设置列表

//设置列表内的内容
    ui->list->setItem(1, 0, new QTableWidgetItem(QString::number(water)));
    ui->list->setItem(1, 1, new QTableWidgetItem(QString::number(volt)));
    ui->list->setItem(1, 2, new QTableWidgetItem(QString::number(air)));
    ui->list->setEditTriggers(QAbstractItemView::NoEditTriggers); //表格不可修改

绘制扇形图

QPainter painter(this);
//绘制未缴费圆饼图
//因为QPainter中扇形绘制参数为整型,所以先进行一波强制转换。。。
double d1=360.0* 16.0 * water / sum,d2=360.0* 16.0 *volt / sum,d3=(360.0 * 16.0 * air / sum);
QString r1 = QString::number(d1), r2 = QString::number(d2), r3 = QString::number(d3);
r1=r1.section('.',0,0);r2=r2.section('.',0,0);r3=r3.section('.',0,0);
int rr1 = r1.toInt(), rr2 = r2.toInt(), rr3 = r3.toInt();
qDebug()<<rr1<<" "<<rr2<<" "<<rr3;
//Qt中每一个窗口都有自己的一个坐标系,默认窗口左上角为坐标原点(0,0),然后水平向右依次增大(X轴),垂直向下依次增大(Y轴)
painter.setBrush(Qt::red);
painter.setPen(Qt::NoPen);
painter.drawPie(100, 300, 200, 200, 0, rr1);
painter.setBrush(Qt::blue);
painter.drawPie(100, 300, 200, 200, rr1, rr2);
painter.setBrush(Qt::yellow);
painter.drawPie(100, 300, 200, 200, 360 * 16 - rr3, rr3);
QWidget::paintEvent(e);

绘制矩形

painter.setPen(QPen(QColor(0, 160, 230), 2)); // 设置画笔颜色、宽度
painter.setBrush(Qt::yellow);                 // 设置画刷颜色
painter.drawRect(440, 400, 10, 10);
ui->c->setText(QString::fromLocal8Bit("煤气费"));
//ui->c->setGeometry(460, 500, 30, 10);

绘制艺术字

painter.setPen(QColor(0, 160, 230));//设置画笔颜色
// 设置字体:微软雅黑、点大小50、斜体
QFont font;
font.setFamily("Microsoft YaHei");
font.setPointSize(20);
font.setItalic(true);
painter.setFont(font);
// 绘制文本
//画布顶点坐标,长宽,格式为剧中
painter.drawText(50, 250, 350, 250, Qt::AlignCenter,QString::fromLocal8Bit("无债一身轻!\n请继续保持~\nε=( o`ω′)ノ"));

文本框格式控制

    //密码为6位,由大小写字母和数字
    QRegExp regx("[a-zA-Z0-9]{1,6}");
    QValidator * validator= new QRegExpValidator(regx, ui->key1);
    ui->key1->setValidator(validator);

按钮设置下拉菜单

//设置下拉菜单文本
    //中文乱码问题,默认情况下,QT的编辑器是GB2312编码,QString是UTF-8编码,这时就会乱码,需要把编码转为QString支持的编码
    //如 QString::fromLocal8Bit("管理员");
    QString str= QString::fromLocal8Bit("管理员");
    QString str2= QString::fromLocal8Bit("用户");

    //设置下拉菜单
    QMenu * menu = new QMenu();
    menu->addAction(str,this,SLOT(doPrint() ) );//信号与槽函数连接
    menu->addAction(str2,this,SLOT(doPrint() ) );
    ui->mytool->setMenu(menu);
    ui->mytool->setPopupMode(QToolButton::InstantPopup);//设置点击触发菜单展开

编码问题

选择GB2312

12-21 02:07
查看更多