信号槽机制是这样的:connect(XXX,SIGNAL(...),this,SLOT(YYY));
帮你实现了你要的功能:(直接划到最底下有完整代码)
1,写在.h的内容,有三句话,注意位置
在piblic:添加声明 !!!
QString str; //声明str,用于接收输入的字符串
在三个权限关键字最后另起一行写 !!!
public slots://这里要回车,字体变黄色
void on_clicked();//函数名随意,括号不能少,有必要时括号里要写参数
2,在.cpp中调用。
在.h把鼠标放在on_clicked()右击,在cpp添加定义(列表第七项下面第二项),系统会自己帮定义,在定义里写需要绑定的事件,比如你这里要将lineEdit中的字符串在TextBrowser中显示。
void MainWindow::on_clicked(){
str = ui->lineEdit->text(); //这句获取输入的信息,一定要写在按钮槽函数里,因为按钮按下之前str存的值为空。这是按钮触发了才把值存到str中,没按之前我们就写了东西,所以按下了str读到的是自己写的内容。写在外面错误的方式就算自己写了内容运行的时候仍然是空,因为这里不是动态获取,自己消化一下
// ui->textBrowser->clear(); //如果希望每一次按确定后只显示一行就用这条语句,先把原来浏览器的内容清空,再把结果显示出来。
ui->textBrowser->append(str+"\n");//这里写的功能是把str追加到textBrowser中;我这里用换行是把第二次的输入也显示到浏览器中
// ui->textBrowser->setText(str); //这里也可以用setText方法,效果一样
}
3,在主函数写完整信号槽。
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_clicked())); //连接信号槽事件
//格式:connect(发送信号控件,SIGNAL(控件里的一个信号),接收的界面或控件(在同一页面一般是this),SLOT(刚定义的槽函数(函数写实现的功能));
运行效果图:
鼠标放在窗口边沿,窗口可以放大缩小,任意拉伸。qt application默认的。
//头文件:太啰嗦了,你自己把啰嗦的删掉吧,我只是怕初学者会理解不到位,故意啰嗦的
class MainWindow : public QMainWindow{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QString str; //声明str,用于接收输入的字符串
private:
Ui::MainWindow *ui;
public slots: //这里要回车,字体变黄色
void on_clicked(); //函数名随意,括号不能少,有必要时括号里要写参数
};
//源文件:
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->setPlaceholderText(QStringLiteral("Please input..."));
///*以下两条语句写的位置不对,可能会得不到期望效果(不信你就解除屏蔽看看效果)*///
// QString str; //创建字符串,错误,最好在头文件声明
// str = ui->lineEdit->text();//获取lineEdit的文本内容(最初文本内容为空,程序一运行就把lineEdit的空白存到str了,所有点击按钮发现上面是没有内容的)
connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(on_clicked())); //连接信号槽事件
///格式:connect(发送信号控件,SIGNAL(控件里的一个信号),接收的界面或控件(在同一页面一般是this),SLOT(刚定义的槽函数(函数写实现的功能));
}
void MainWindow::on_clicked()
{
str = ui->lineEdit->text(); //这句获取输入的信息,一定要写在按钮槽函数里,因为按钮按下之前str存的值为空或者未知。
// ui->textBrowser->clear(); //如果希望每一次按确定后只显示一行就用这条语句,先把原来浏览器的内容清空,再把结果显示出来。
ui->textBrowser->append(str+"\n");//这里写的功能是把str追加到textBrowser中;我这里用换行是把第二次的输入也显示到浏览器中
// ui->textBrowser->setText(str); //这里也可以用setText方法,效果一样
}
SLOT(str=lineEdit->text()),这里面要添槽函数,而不是这样弄,设计就有问题。
connect(pushButton,SIGNAL(clicked()),this,SLOT(OnBtnClicked()));
void MainWindow::OnBtnClicked()
{
QString str=ui->lineEidt->text();
ui->textBrowser->setText(str)
}
第一个SLOT中不应该这么写吧,slot中应该是函数名吧,你把那条语句copy出来放在一个函数中看可以吗?