(1)布局各个控件,并更改名称,应当注意的是当布局中的label占据较大位置影响整体布局的时候,考虑对layout进行垂直策略的fixed.
使用qDebug操作需要引用头文件**#include
设置好之后重新输如信息,将不会报错,但是会出现乱码的情况。
解决办法:
在cpp文件中加入#pragma execution_character_set(“utf-8”)
原文:https://blog.csdn.net/passer_by_hq/article/details/51283066
新弹出的确认框会的button名称是英文的,这里需要改成中文应该怎么操作:
查阅help文档,这里自己添加Button函数:
msgBox.addButton("确定",QMessageBox::AcceptRole); //自定义按键将默认的英文名称改为中文
msgBox.addButton("取消",QMessageBox::RejectRole);
自定义需要默认的按钮,加入函数,须引入头文件#incluce
QPushButton * oBtn = msgBox.addButton("确定",QMessageBox::AcceptRole); //自定义默认按键
以上的代码比较麻烦,可以使用QT自带QMessageBox的static public members 编写函数:this是继承父类
QString content = name + '\n' + id;
int ret = QMessageBox::information(this,"请确认信息",content,"确认","取消");
// 几个函数的区别在于图标的不同,warnig,critical等
QLineEdit->echoMode可以设置不同的输入格式;
->placeholderText书写提示字符;
->clearbuttonEnable 添加清除符号;
查看help手册Qline中 signals 可以编辑账号框的信息
QString content = name + '\n' + id;
if(name.length()<1 || id.length() < 10){
QMessageBox::critical(this,"错误","请输入完整信息","确定");
}else{
int ret = QMessageBox::question(this,"请确认信息",content,"确认","取消"); // 几个函数的区别在于图标的不同,warnig,critical等
}
4.1 用CTRL选中rbtn_fmale和rbtn_male,右击弹出
菜单,选择“指定到按钮组”->“新建按钮组”。
4.2.然后在Qt右上部分这个“对象 类”的表格里翻到最后,会找到“buttonGroup”,这就是刚刚新建的按钮组。
4.3.请选中buttonGroup,在QObject中修改objectName的值为"sexGroup"。
4.4.同样的方法,把“兴趣”中的四个复选框checkBox,checkBox_2,checkBox_3,checkBox_4加入到新建按钮组"insGroup"
4.5.把"insGroup"属性QButtonGroup中的"exclusive"后面的钩去掉,也就是使之处于没有被勾选的状态。这一步是为了让兴趣的四个选项能够被多选。exclusive是"排他"之意。
4.6.addstu.cpp开头可能还缺少一些对头文件的引用,增加:
#include
#include
#include
这里是2和3的代码实现
QString sex= this->ui->sexGroup->checkedButton()->text(); //性别
QList<QAbstractButton *> ins_list = this->ui->insGroup->buttons(); //兴趣
QString ins;
int i = 0;
for (i = 0; i<ins_list.length(); i++){
QAbstractButton * che = ins_list.at(i);
if(che->isChecked()){
ins += che->text() + ",";
}
}
QString age = this->ui->cbb_age->currentText(); //年龄
QString dev = this->ui->cbb_dep->currentText(); //院系
//窗口显示信息
QString content = name + '\n' + id +'\n' + sex + '\n' + dev + '\n' + ins;
首先在头文件public中再写一个函数:void clearUserInterface ;
//还原用户页面的状态
void addStu::clearUserInterface()
{
this->ui->le_name->clear();
this->ui->le_id->clear();
this->ui->rBtn_male->setChecked(true); //默认指向男性
this->ui->cbb_age->setCurrentIndex(0); //默认指向第一个元素
this->ui->cbb_dep->setCurrentIndex(0); //默认指向第一个元素
QList<QAbstractButton *> ins_list = this->ui->insGroup->buttons(); //兴趣列表
int i = 0;
for (i = 0;i < ins_list.length(); i++)
{
QAbstractButton * box = ins_list.at(i); //是容器
box->setChecked(false);
}
this->ui->le_name->setFocus();
}
同时在确认按键中也要调用该函数:
int ret = QMessageBox::question(this,"请确认信息",content,"确认","取消");
// 几个函数的区别在于图标的不同,warnig,critical等
if(ret ==0){
clearUserInterface(); //调用下面的用户清理函数
}
查看help手册Detailed Description,写入文件
1.首先包含三个头文件:
#include
#include
#include
6. 代码部分:
void addStu::writeToFile(QString cnt)
{
QFile file("stu.txt");
if(! file.open(QIODevice::Append | QIODevice::Text))
//读入信息Appendde是累加显示,不对前面的信息有影响
{
QMessageBox::critical(this,"错误","文件打开失败,信息没有保存!","确定"); //提示用户
return;
}
QTextStream out(&file);
out << cnt;
file.close();
}
QString cnt = name + " " + id + " " + sex + " " + dev + " " + ins + "\n"; //把所有读取的信息显示在一行存储
writeToFile(cnt);
.pro中新建QT设计师界面类选择MainWindow;
main函数中加入头文件,并默认优先打开mainwindow;
void MainWindow::on_actionaddStu_triggered()
{
static addStu a;
//a.exec(); //会阻塞程序,主窗口关不掉(模态视图)
a.show();
}
#ifndef QUERY_H
#define QUERY_H
#include
#include
#include
#include
namespace Ui {
class query;
}
class query : public QDialog
{
Q_OBJECT
public:
explicit query(QWidget *parent = 0);
~query();
int readFromFile();
private:
Ui::query *ui;
QList<QString> stu_lines;
};
#endif // QUERY_H
query.cpp
#include "query.h"
#include "ui_query.h"
#include
#include
query::query(QWidget *parent) :
QDialog(parent),
ui(new Ui::query)
{
ui->setupUi(this);
//在构造函数里调用了readFromFile文件,并返回值
if(readFromFile()==-1){
QMessageBox::critical(this,"错误","文件打开失败,请重试!");
this->close();
}
}
query::~query()
{
delete ui;
}
int query::readFromFile()
{
QFile file("stu.txt");
if (!file.open(QIODevice::ReadOnly | QIODevice::Text))
{
return -1;
}
QTextStream in(&file);
while(!in.atEnd()){
QString line = in.readLine();
stu_lines.append(line);
}
file.close();
return 0;
}
query.h
public:
explicit query(QWidget *parent = 0);
~query();
int readFromFile();
void doQuery(int index, QString cnt); //函数的查询
void disPlay(int row,QStringList subs);
query.cpp
void query::on_btn_search_clicked()
{
int index = this->ui->cbb_method->currentIndex();
QString cnt = this->ui->le_cnt->text();
doQuery(index,cnt); //调用查询函数
}
void query::doQuery(int index, QString cnt)
{
int row = 0; //显示第几行
for (int i = 0; i<stu_lines.length(); i++){
QString line = stu_lines.at(i);
line = line.trimmed();
QStringList subs = line.split(" "); //分割
switch (index) {
case 1:
if(cnt == subs.at(0)){
disPlay(row++,subs);
}
break;
case 2:
if(cnt == subs.at(1)){
disPlay(row++,subs);
}
break;
case 3:
if(cnt == subs.at(2)){
disPlay(row++,subs);
}
case 4:
if(cnt == subs.at(3)){
disPlay(row++,subs);
}
break;
case 5:
if(cnt == subs.at(4)){
disPlay(row++,subs);
}
break;
default:
break;
}
}
}
void query::disPlay(int row, QStringList subs)
{
int i = 0;
for(i = 0; i<5;i++){
this->model->setItem(row,i,new QStandardItem(subs.at(i)));
}
//合并兴趣单元格
QString ins;
for(i = 5; i<subs.length(); i++){
ins += subs.at(i)+",";
}
this->model->setItem(row,5,new QStandardItem(ins));
}