Qt中,两个功能类似的函数如何合并为一个函数

project15 2009-04-01 02:17:08

例如有函数
点击pushButton , 点击 pushButton_2
执行的两个操作


void MainWindow::on_pushButton_clicked()
{
QString x=ui->lineEdit->text();
QString y="1";
x.append(y);
ui->lineEdit->setText(x);
// qDebug()<<ui->lineEdit->setText(x);

}

void MainWindow::on_pushButton_2_clicked()
{
QString x=ui->lineEdit->text();
QString y="2";
x.append(y);
ui->lineEdit->setText(x);
}


如何合并为一个函数
分别赋值"1"和"2"
...全文
352 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
project15 2009-04-01
  • 打赏
  • 举报
回复
connect(ui->b1,SIGNAL(clicked()),this,SLOT(on_pushButton_click()));
connect(ui->b2,SIGNAL(clicked()),this,SLOT(on_pushButton_click()));
connect(ui->bclear,SIGNAL(clicked()),this,SLOT(on_bclear_clicked()));
connect(ui->bquit,SIGNAL(clicked()),this,SLOT(on_bquit_clicked()));



void MainWindow::on_pushButton_click()
{
QPushButton *pt=qobject_cast<QPushButton *>(sender());
QString x= ui->lineEdit->text();
QString y= pt->text();
x.append(y);
ui->lineEdit->setText(x);
qDebug()<<pt->text();
}

void MainWindow::on_bquit_clicked()
{
this->close();
}


void MainWindow::on_bclear_clicked()
{
ui->lineEdit->setText("");
}


解决了~!
感谢!!
project15 2009-04-01
  • 打赏
  • 举报
回复
HelloDan,我有一个疑问就是
在程序里面声明一个组件的话
给这个组件定位是个麻烦事
你是怎么解决这个问题的?
project15 2009-04-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 HelloDan 的回复:]
C/C++ codeconnect(pushButton_2,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked()));
connect(pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked()));voidMainWindow::on_pushButton_clicked()
{

QPushButton*pt=qobject_cast<QPushButton*>(sender());if(!pt)return;
QString str;if(pt==pushButton)
str="1";else{if(pt=pushButton_2)
str="2";
}
QString x=ui->lineEdit->text();
x…
[/Quote]

理解了,这样的思路挺不错!
HelloDan 2009-04-01
  • 打赏
  • 举报
回复

connect(pushButton_2,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked()));
connect(pushButton,SIGNAL(clicked()),this,SLOT(on_pushButton_clicked()));


void MainWindow::on_pushButton_clicked()
{

QPushButton *pt=qobject_cast<QPushButton *>(sender());
if(!pt)
return;
QString str;
if(pt==pushButton)
str="1";
else
{
if(pt=pushButton_2)
str="2";
}
QString x=ui->lineEdit->text();
x.append(y);
ui->lineEdit->setText(x);
// qDebug() < <ui->lineEdit->setText(x);

}

//大概就是这样,楼主试一下,看行不行。

project15 2009-04-01
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 HelloDan 的回复:]
将两个slot全在一起,按QPushButton时都发送到同一个slot,在slot里面再判断是哪一个发送的消息的,然后再决定选1还是2.
[/Quote]

HelloDan兄,能给个例子吗?
lhy 2009-04-01
  • 打赏
  • 举报
回复

void MainWindow::on_pushButton_clicked()
{

foo("1");
}

void MainWindow::on_pushButton_2_clicked()
{
foo("2");

}
void MainWindow::foo(QString y)
{
QString x=ui->lineEdit->text();
x.append(y);
ui->lineEdit->setText(x);
}
jawiudi 2009-04-01
  • 打赏
  • 举报
回复
定义一个privat函数
借用2楼的

private:
void internalSet(QString yValue);

//在.cpp中

void MainWindow::internalSet(QString yValue)
{
…………
}
//槽函数
void MainWindow::on_pushButton_2_clicked()
{
internalSet(tr("2"));
}


void MainWindow::on_pushButton_clicked()
{
internalSet(tr("1"));
}




HelloDan 2009-04-01
  • 打赏
  • 举报
回复
将两个slot全在一起,按QPushButton时都发送到同一个slot,在slot里面再判断是哪一个发送的消息的,然后再决定选1还是2.
project15 2009-04-01
  • 打赏
  • 举报
回复
类里面修改为
void on_pushButton_clicked(QString yValue);

函数修改为
void MainWindow::on_pushButton_clicked(QString yValue)
{
QString x=ui->lineEdit->text();
QString y=yValue;
x.append(y);
ui->lineEdit->setText(x);
// qDebug()<<ui->lineEdit->setText(x);

}


这里的QString yValue 在哪个地方赋值?
ui里面按钮的哪个属性?还是?
project15 2009-04-01
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 jawiudi 的回复:]
呵,在一个函数里写代码
QString x=ui->lineEdit->text();
QString y1="1";
QString y2="2";
x.append(y1).append(y2);
ui->lineEdit->setText(x);

输出后是121212……
楼主是要这样的不?

[/Quote]

不是这样的..
是所有的按钮调用同一个函数赋不同的值,fallinleave 写的这种形式
我去测试一下
liliangbao 2009-04-01
  • 打赏
  • 举报
回复
帮顶~
学习
fallinleave 2009-04-01
  • 打赏
  • 举报
回复
合并成一个函数的好处是什么?
你可以把common的code写在一起,节省代码行数

void internalSet(QString yValue)
{
QString x = ui->lineEdit->text();
QString y = yValue;

x.append(y);
ui->lineEdit->setText(x);
}
jawiudi 2009-04-01
  • 打赏
  • 举报
回复
呵,在一个函数里写代码
QString x=ui->lineEdit->text();
QString y1="1";
QString y2="2";
x.append(y1).append(y2);
ui->lineEdit->setText(x);

输出后是121212……
楼主是要这样的不?

65,210

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧