void MyWindow::onButtomCliked(int id) { qDebug() << "ID:" << id; QString text = ui->buttonGroup->button(id)->text(); qDebug() << "text:" << text; if(text == "C") { ui->lineEdit->clear(); express.clear(); }else if(text == "←") { express.chop(1); }else if(text == "=") { //计算表达式 QStack<QString> stack; QQueue<QString> queue; //遍历计算表达式 for(auto ch: express) { if(ch.isDigit()) { stack.push_back(ch); }else { while(!stack.empty()) { if((ch == 'x' || ch == '/') && (stack.top() == '+' || stack.top() == '-')) { break; } else { QString s; s = stack.pop(); queue.enqueue(s); } } stack.push_back(ch); } } while(!queue.empty()) { QString op = queue.dequeue(); if(op == '+' ||op == '-' ||op == 'x' ||op == '/') { QString s1,s2; int a1,a2; s1 = queue.dequeue(); s2 = queue.dequeue(); bool ok; a1 = s1.toInt(&ok,16); a2 = s2.toInt(&ok,16); int sum = 0; if(op == '+') { sum = a1 + a2; }else if(op == '-') { sum = a1 - a2; }else if(op == 'x') { sum = a1 * a2; }else { sum = a1 / a2; } QString str = QString::number(sum, 16); stack.push_back(str); } else { stack.push_back(op); } } QString res = stack.pop(); //QString res = "100"; //计算结果 express += "="; express += res; }else { //限制错误输出 express += text; } ui->lineEdit->setText(express); }
时间: 2024-02-10 10:06:35 浏览: 27
这是一个计算器的槽函数,当按钮被点击时,会执行该函数。函数接受一个参数 id,用于标识按钮的身份。根据按钮的不同,函数执行不同的操作。如果是清除按钮,会清空文本框和表达式;如果是删除按钮,会删除表达式末尾的一个字符;如果是等号按钮,会计算表达式并将结果显示在文本框中;否则,会将按钮的文本添加到表达式中。函数的主要逻辑是使用栈和队列来计算表达式,遍历表达式字符串中的每一个字符,并根据运算符的优先级将数字和运算符分别放入栈和队列中,最后再从队列中取出运算符和数字进行计算,将结果再次放入栈中。最后,从栈中取出计算结果并显示在文本框中。
相关问题
wpf WindowManager帮助类含打开WindowManager.OpenWindow<MyWindow>();
WPF WindowManager 是一个开源工具,用于在 WPF 应用程序中管理窗口的生命周期。它提供了一些帮助类,用于在应用程序中打开、关闭和管理窗口。
其中,WindowManager.OpenWindow<MyWindow>() 可以用来打开一个名为 MyWindow 的 WPF 窗口。具体实现可以参考以下代码:
```csharp
public static class WindowManager
{
public static void OpenWindow<T>(bool isDialog = false) where T : Window, new()
{
var window = new T();
if (isDialog)
{
window.ShowDialog();
}
else
{
window.Show();
}
}
}
```
通过这个帮助类,你可以在代码中轻松打开窗口,例如:
```csharp
WindowManager.OpenWindow<MyWindow>();
```
这将会打开一个名为 MyWindow 的窗口,你可以根据你的需要来决定是否需要将它设置为模态窗口。
Traceback (most recent call last): File "MyWindow.py", line 12, in <module> ModuleNotFoundError: No module named 'matplotlib'
根据您提供的引用内容,出现了一个名为"ModuleNotFoundError"的错误,错误信息显示找不到名为'matplotlib'的模块。这通常意味着您的Python环境中没有安装matplotlib模块。
要解决这个问题,您可以按照以下步骤安装matplotlib模块:
1. 打开终端或命令提示符。
2. 运行以下命令来安装matplotlib模块:
```shell
pip install matplotlib
```
如果您使用的是Python 3,则可能需要使用pip3命令:
```shell
pip3 install matplotlib
```
3. 等待安装完成。
安装完成后,您应该能够成功导入和使用matplotlib模块。