ui界面对应的ui_*.h文件的作用:
ui_.h是ui界面的代码化表达,
即用非Qt软件打开ui文件时会显示ui_*.h文件,用代码描述ui界面内容
计算器程序:
1.通过Qt designer设计界面:
出现的问题和解决方法:
- 窗口对象名(QWidget类)要和对窗口进行操作的父类类名一致,否则会提示“引用了不完整的类型”
- 注意修改按钮名称以便下一步
2.使用QSignalMapper:
signalmapper=new QSignalMapper (this); |
出现的问题和解决方法:
- 理解QSignalMapper的工作原理和方法:
qsignalmapper:相当于一个信号转发器,将多个按钮信号连接到一个槽函数上(详见代码注释)
引入QSignalMapper头文件
还有一种获取按钮列表的方法:也可利用按钮名字的共性筛选出所需要的按钮:QString buttontext = "btn1,btn2,btn3,btn4,btn5,btn6,btn7,btn8,btn9,btn10";
QStringList texts = buttontext.split(",");if(oc->nbjectName.starswith("***")
- 最初设计ui时将所有按钮放到了gridlayout下,结果到至按钮无法访问,将按钮挪出gridlayout,若需使按钮排列整齐,designer界面上方有辅助排列功能按键。
###3.计算功能的实现:
头文件声明:
- node类
class node |
- widget类://计算器类
- 将按钮上的内容输入到字符串中:
void Widget::clicked(QString ch)
{
if(ch=="sqrt")
opt.append("k");
else if(ch=="square")
opt.append("p");
else if(ch=="rev")
opt.append("d");
else if(ch=="neg")
opt.append("f");
else if(ch=="=")
{
opt.append("=\0");
cal();
}
else {
opt.append(ch);
}
ui->display->setPlainText(opt);//显示输入内容
} - 将字符串转成链表
- QString 转 double:
t->data=t->nums.toDouble;
- QString 转 double:
- 实现节点与节点的计算
void Widget::calculate(node*a,node*b,node*c)
{
if (b->sign == '+')
a->data = a->data + c->data;
if (b->sign == '-')
a->data = a->data - c->data;
if (b->sign == '*')
a->data = a->data * c->data;
if (b->sign == '/')
a->data = a->data / c->data;
//节点合并
if (tail != c)
{
a->next=c->next;
}
else
{
a->next=nullptr;
tail=a;
}
}void Widget:: calculate(node*a,node*b)
{
if (b->sign == 'k')
a->data = sqrt(a->data);
if (b->sign == 'p')
a->data *= a->data;
if (b->sign == 'd')
a->data = 1 / a->data;
if (b->sign == 'f')
a->data = -a->data;
if(b!=tail)
a->next = b->next;
else
{
a->next = nullptr;
tail = a;
}
} - 计算样例
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.