• 8761阅读
  • 12回复

[提问]如何动态获得lineedit里面的内容并显示到label中【已解决】 [复制链接]

上一主题 下一主题
离线ag2011
 
只看楼主 倒序阅读 楼主  发表于: 2011-04-04
我就想lineedit里面输入一个字符,label里面就同步显示

class test :public QWidget
{
       Q_OBJECT
public:
        test();
private:    
       QLabel   *label;
       QLineEdit   *lineedit;
private slots:
       void go();
}

void test::go()
{
   QString str  = lineedit->text();
    label->setText(str);
}

test::test()
{
       label = new QLabel(this);
       lineedit = new  QLineEdit(this);
       connect(lineedit, SIGNAL(textChanged()),  label, SLOT(go()));
}
这样写吗?textchanged()里面的参数我不知道要写什么,
写textChanged(lineedt->text())?  我试了一下这样写报错,说没有这个信号..
请问怎么实现?
[ 此帖被ag2011在2011-04-06 21:17重新编辑 ]
离线ag2011
只看该作者 1楼 发表于: 2011-04-05
找了半天就找到一句这样的textChanged()实例:
connect(lineEdit, SIGNAL(textChanged(const QString &)),
16             this, SLOT(enableFindButton(const QString &)));
但没看懂,这个textChanged里面的参数为什么就写个QString &类型就是了,不要写一个具体的引用吗?而且这信号的参数和槽函数的参数之间到底要怎么个关系?可以,信号里有个参数,但槽函数里面不写参数吗?谢谢!!
离线ag2011
只看该作者 2楼 发表于: 2011-04-05
试了下connect(lineedit, SIGNAL(textChanged(const QString &)),  label, SLOT(go()));
这样就真能行啊...
为什么还可以这样写参数啊.............
离线83888788
只看该作者 3楼 发表于: 2011-04-05
就用textchanged()信号,
链接的槽函数可以这样写

label.setText(lineEdit.text());

离线roywillow

只看该作者 4楼 发表于: 2011-04-05
textChanged信号会带上当前的文本内容,自己写一个槽接收这个QString并显示在label里就行了
比如
slot:
void setLabel(const QString& string)
{
    label->setText(string);
}

然后这样connect
connect(lineEdit, SIGNAL(textChanged(const QString&)), this, SLOT(setLabel(const QString&)));

以上代码未经测试……
[ 此帖被roywillow在2011-04-05 08:35重新编辑 ]
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线ag2011
只看该作者 5楼 发表于: 2011-04-05
回 3楼(83888788) 的帖子
connect(lineedit, SIGNAL(textChanged()),  label, SLOT(label.setText(lineEdit.text());

));
我试了下这样写也没反应。
离线ag2011
只看该作者 6楼 发表于: 2011-04-05
回 4楼(roywillow) 的帖子
按您这样写能行,但我就没搞清楚那SIGNAL()里面到底要写什么,
信号不是函数咯?
SIGNAL()里面就直接写类里面声明的信号原型就行了?
开始我以为那SIGNAL里面是个函数调用似的,调用那信号发送出去。
离线roywillow

只看该作者 7楼 发表于: 2011-04-05
建议想办法使劲弄明白信号和槽是个什么东西
信号是可以带着一些数据出来的,不只是告诉槽它被触发了,而且还能告诉槽一些参数,一些信息
就像电台广播,不同的电台用不同的波长,发出的波还会带着播音员的声音,你可以一收到某个电台的信号就开始满地打滚,也可以根据播音员的指示(如果有的话)进行有目的性和节律性的打滚……

信号的发出是类的内部用emit实现的
[ 此帖被roywillow在2011-04-05 17:04重新编辑 ]
专业维修核潜艇,回收二手航母、二手航天飞机,大修核反应堆,拆洗导弹发动机更换机油,无人侦察机手动挡改自动,航天飞机保养换三滤,飞碟外太空年检 ,各型号导弹加装迎宾踏板,高空作业擦洗卫星表面除尘、打蜡及抛光,东风全系列巡航导弹。并提供原子对撞机。量大从优,有正规发票。
离线ag2011
只看该作者 8楼 发表于: 2011-04-05
回 7楼(roywillow) 的帖子
额,这个const QString &参数就是lineedit它自己的信息。我们不用管它是怎么来的是吧。
离线83888788
只看该作者 9楼 发表于: 2011-04-05
回 8楼(ag2011) 的帖子
我可以肯定的是5楼和我的思路是没有错的
离线83888788
只看该作者 10楼 发表于: 2011-04-05
example.h


  1. #ifndef EXAMPLE_H
  2. #define EXAMPLE_H
  3. #include <QtGui>
  4. class Example:public QDialog
  5. {
  6.     Q_OBJECT
  7. public:
  8.     Example(QWidget *parent=0);
  9. protected slots:
  10.     void slotTextChanged(QString str);
  11.     void slotTextChanged();
  12. private:
  13.     QLabel *label1;
  14.     QLineEdit *lineEdit1;
  15.     QLabel *label2;
  16.     QLineEdit *lineEdit2;
  17. };
  18. #endif // EXAMPLE_H


example.cpp


  1. #include "example.h"
  2. Example::Example(QWidget *parent):QDialog(parent)
  3. {
  4.     label1=new QLabel(this);
  5.     label2=new QLabel(this);
  6.     lineEdit1=new QLineEdit(this);
  7.     lineEdit2=new QLineEdit(this);
  8.     QGridLayout *layout=new QGridLayout;
  9.     layout->addWidget(lineEdit1,0,0);
  10.     layout->addWidget(label1,0,1);
  11.     layout->addWidget(lineEdit2,1,0);
  12.     layout->addWidget(label2,1,1);
  13.     this->setLayout(layout);
  14.     connect(lineEdit1,SIGNAL(textChanged(QString)),this,SLOT(slotTextChanged(QString)));
  15.     connect(lineEdit2,SIGNAL(textChanged(QString)),this,SLOT(slotTextChanged()));
  16. }
  17. void Example::slotTextChanged(QString str)
  18. {
  19.     label1->setText(str);
  20. }
  21. void Example::slotTextChanged()
  22. {
  23.     label2->setText(lineEdit2->text());
  24. }

main.cpp

  1. #include "example.h"
  2. int main(int argc,char* argv[])
  3. {
  4.     QApplication app(argc,argv);
  5.     Example e;
  6.     e.show();
  7.     return app.exec();
  8. }



离线83888788
只看该作者 11楼 发表于: 2011-04-05
回 8楼(ag2011) 的帖子
上面这是源代码
2方式
当然  5楼的方式更好
离线ag2011
只看该作者 12楼 发表于: 2011-04-06
回 11楼(83888788) 的帖子
呵呵,原来我理解错了你的意思,跑去直接SIGNAL(textchanged())去了,所以没效果..

非常谢谢2位热心解答..
快速回复
限100 字节
 
上一个 下一个