Qt和Linux connect 冲突问题及函数末尾加const

1在 connect 函数前加上作用域符号 :: ,来表示全局的connect 。


:: 前不加空间名,表示全局的。


2、在函数的末尾加上const
      例如int   Func(int   i)   const;  
       Func()是类的成员函数才能这样用,表示这个函数不改变成员变量的值。同时用const结尾的成员函数只能调用其他const结尾的成员函数。因为其他函数并不能保证同样不修改类的成员变量。

下面是一个简单的Qt计算器的代码,可以实现、减、乘、除的基本计算功能: ```cpp #include <QtWidgets> int main(int argc, char *argv[]) { QApplication app(argc, argv); // 创建窗口 QWidget *window = new QWidget; window->setWindowTitle("Calculator"); // 创建布局 QVBoxLayout *layout = new QVBoxLayout; // 创建显示屏 QLineEdit *display = new QLineEdit; display->setReadOnly(true); display->setAlignment(Qt::AlignRight); layout->addWidget(display); // 创建按钮 QGridLayout *buttonLayout = new QGridLayout; QStringList buttons = {"7", "8", "9", "/", "4", "5", "6", "*", "1", "2", "3", "-", "0", ".", "=", "+"}; int row = 0, col = 0; for (const QString &text : buttons) { QPushButton *button = new QPushButton(text); button->setFixedSize(40, 40); buttonLayout->addWidget(button, row, col); col++; if (col > 3) { col = 0; row++; } } layout->addLayout(buttonLayout); // 连接按钮与槽函数 QObject::connect(buttonLayout, &QGridLayout::itemClicked, [&](QLayoutItem *item) { QPushButton *button = qobject_cast<QPushButton *>(item->widget()); if (!button) { return; } QString text = button->text(); if (text == "=") { display->setText(QString::number(eval(display->text()))); } else if (text == ".") { if (!display->text().contains(".")) { display->setText(display->text() + "."); } } else { display->setText(display->text() + text); } }); // 设置窗口布局 window->setLayout(layout); window->show(); return app.exec(); } double eval(const QString &expression) { QRegExp re("([\\d.]+)([+\\-*/])([\\d.]+)"); re.indexIn(expression); double a = re.cap(1).toDouble(); double b = re.cap(3).toDouble(); QString op = re.cap(2); if (op == "+") { return a + b; } else if (op == "-") { return a - b; } else if (op == "*") { return a * b; } else if (op == "/") { return a / b; } else { return 0; } } ``` 上述代码中,`eval` 函数用于计算表达式的值,`buttonLayout` 是放置计算器按钮的布局,每个按钮都连接一个匿名 lambda 表达式,用于响应按钮的点击事件。在 lambda 表达式中,如果点击的是 `=` 按钮,则调用 `eval` 函数计算表达式的值,并将结果显示在显示屏上;如果点击的是 `.` 按钮,则检查显示屏中是否已经包含了小数点,如果没有则在末尾一个小数点;否则将按钮的文本添到显示屏的末尾
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值