第一天醉生梦死般度过,感谢网上各种大佬的帮忙。
error: ‘class Widget’ has no member named ‘show’ w.show() undefined reference to `MainWindow::~MainWindow()' 刚开始我居然试图用mainwindow类强行些widget,真的是…… 解决方案:重开项目,类名随便,基类选择QWidget类 。
warning:QT_DEVICE_PIXEL_RATIO is deprecated. 查错的时候发现的警告,并不会影响什么。
QWidget::setLayout: Attempting to set QLayout “” on Widget “Widget”, which already has a layout. 这无疑搞疯我了,一下午都没有显示出我的布局。 解决方案:查了很多资料,体感自己的问题是想偷懒,把本项目的.ui删了,直接把上个项目的.ui剪切过来导致系统自动给主窗口类了一个默认布局(这也许是一个顺序问题)。最好还是重头来过,自己瞎搞不知道什么时候才能搞好。ps:setLayout只能布局一次 若是QMainwindow类,会默认布局(开头加句QWidget widget=new QWidget)应该就行了。其他的倒是不会,但我的问题是如上述所示(估计粘贴过来的是QMainwindow的)。。 纯代码再用一个垂直布局 VBoxLayout->addLayout(HBoxLayout1); VBoxLayout->addLayout(HBoxLayout2); VBoxLayout->addLayout(HBoxLayout3);
ui设计的(简单些):
QHBoxLayout* HBoxLayout=new QHBoxLayout; pushButton1=new QPushButton("1"); pushButton2=new QPushButton("2"); pushButton3=new QPushButton("3"); pushButton4=new QPushButton("4"); pushButton5=new QPushButton("5"); pushButton6=new QPushButton("6"); pushButton7=new QPushButton("6"); pushButton8=new QPushButton("8"); pushButton9=new QPushButton("9"); pushButton0=new QPushButton("0"); pushButtonAdd=new QPushButton("+"); pushButtonDy=new QPushButton("="); pushButtonJh=new QPushButton("-"); pushButtonNull=new QPushButton("Null"); pushButtonCf=new QPushButton("/");//除 pushButtonCh=new QPushButton("*");//* setLayout(HBoxLayout); //再给一个栅格布局的 QWidget* widget = new QWidget; QGridLayout* GridLayout = new QGridLayout(widget); button1 = new QPushButton("1"); button2 = new QPushButton("2"); button3 = new QPushButton("3"); button4 = new QPushButton("4"); button5 = new QPushButton("5"); button6 = new QPushButton("6"); button7 = new QPushButton("7"); button8 = new QPushButton("8"); button9 = new QPushButton("9"); GridLayout->addWidget(button1, 0, 0); GridLayout->addWidget(button2, 0, 1); GridLayout->addWidget(button3, 0, 2); GridLayout->addWidget(button4, 1, 0); GridLayout->addWidget(button5, 1, 1); GridLayout->addWidget(button6, 1, 2); GridLayout->addWidget(button7, 2, 0); GridLayout->addWidget(button8, 2, 1); GridLayout->addWidget(button9, 2, 2); setCentralWidget(widget); widget->setLayout(GridLayout);只要ui设计好了就行。
后来发现.ui真的很好用,只需要排好序,用一个QHBoxLayout就行了,把需要的按钮全部add进去就行了(这里要是用纯代码可能会复杂些?) 我居然想设四个HBoxLayout,试图分四行,实属无知行为,向巨好用的UI设计道歉
qt ui->setupUi(this);作用(本段话来自网络上一位大佬)
在一个指定的窗口建立起ui。 所以可以推测Qt首先是创建了一个QWidget(因为本程序继承了他),然后在加载ui的xml文件,更具这个xml文件,才弄出的这个界面。 总结下逻辑:先构建一个QWidget界面,再加载xml构建出我们创建的ui界面
SIGNAL(clicked()) 课上学的时候我还以为要自己写什么呢,原来可以自行调用,厉害!
slot中的方法要使用UI设计:右键按钮,转到槽,否则无效。
还出了一个警告,是我仅在widget.cpp中定义变量的时候 记得采用static关键字定义全局静态变量。 或者还是用头文件定义吧
点击数字按钮时:(例如:)
void Widget::on_pushButton0_clicked(){ n0=ui->pushButton0->text(); line+=n0; ui->lineEdit->setText(line); } //也可以 void Widget::on_pushButton0_clicked(){ QString buffer="0"; displayBuffer.append(buffer); display->setText(diaplayBuffer); }其实采用点击赋相应值也是可以的。
10.各计算:
void Widget::on_pushButtonAdd_clicked(){ flag = 1; temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来 line.clear(); //清空字符数组 ui->lineEdit->setText(line); } void Widget::on_pushButtonJh_clicked(){ flag3 = 1;//按了加号按键就改变状态 temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来 line.clear(); //清空字符数组 ui->lineEdit->setText(line); } void Widget::on_pushButtonCh_clicked(){ flag5 = 1;//按了加号按键就改变状态 temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来 line.clear(); //清空字符数组 ui->lineEdit->setText(line); } void Widget::on_pushButtonCf_clicked(){ flag4 = 1;//按了加号按键就改变状态 temp1 = ui->lineEdit->text(); //获取前面输入的字符,并临时保存起来 line.clear(); //清空字符数组 ui->lineEdit->setText(line); } void Widget::on_pushButtonNULL_clicked(){ line.clear(); temp1.clear(); temp2.clear(); sum = 0; flag = 0; flag1 = 0; flag3 = 0; flag4 =0; flag5 = 0; ui->lineEdit->setText(line); } void Widget::on_pushButtonDy_clicked(){ flag1 = 1; //按一次等于号就改变状态 if(flag == 1) //加法 { temp2 = ui->lineEdit->text(); qDebug()<<temp1<<"+"<<temp2<<"="; line.clear(); //清空字符串 sum = temp1.toInt() + temp2.toInt(); ui->lineEdi>setText(temp1+"+"+temp2+"="+QString::number(sum)); flag = 0; } else if(flag3 == 1) //减法 { temp2 = ui->lineEdit->text(); qDebug()<<temp1<<"-"<<temp2<<"="; line.clear(); //清空字符串 ui->lineEdit->setText(line); sum = temp1.toInt() - temp2.toInt(); if(sum == 0) //等于0 { ui->lineEdit->setText("0"); } ui->lineEdit->setText(temp1+"-"+temp2+"="+QString::number(sum)); flag3 = 0; //重新让标志位置零,等待下一次的减法进行 } else if(flag4 == 1) //除法 { temp2 = ui->lineEdit->text(); line.clear(); //清空字符串 if(temp2 == "0") //分母等于0 { ui->lineEdit->setText("除数不能为0"); } else {sum = temp1.toInt() / temp2.toInt(); ui->lineEdit->setText(temp1+"/"+temp2+"="+QString::number(sum)); } flag4 = 0; //重新让标志位置零,等待下一次的除法进行 } else if(flag5 == 1) //乘法 { temp2 = ui->lineEdit->text(); qDebug()<<temp1<<"*"<<temp2<<"="; line.clear(); //清空字符串 sum = temp1.toInt() * temp2.toInt(); //将字符转换成浮点型 ui->lineEdit->setText(temp1+"*"+temp2+"="+QString::number(sum)); //将浮点型转换成字符 flag5 = 0; //重新让标志位置零,等待下一次的乘法进行 } }这个方式还是太直接粗暴了,不如很多人的方法简单,不推荐尝试
又要开始上课了,希望今天顺利55555555555555555555555555555