子窗口关闭父窗口打开
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