• 12875阅读
  • 17回复

【提问】新手求助QT编程,如何动态设置QLineEdit控件的内容? [复制链接]

上一主题 下一主题
离线cprcf
 

只看楼主 倒序阅读 楼主  发表于: 2006-01-14
举一个简单的例子
一个QDialog上有三个QLineEdit控件,分别为le_1,le_2,le_3
和一个QPushButton控件btn_1;
现在想通过单击btn_1这个按钮,来取出le_1和le_2中的内容,设置到le_3里去?
connect这个怎么写?
connect(btn_1,SIGNAL(clicked),le_3,SLOT(?)) SLOT 中写什么函数?
还有QLineEdit控件返回的是QString 类型的值,如果想把他变成整形或者浮点型,有什么方法?

谢谢大家,本人才接触Linux 和 QT 一天,有些东西实在搞得比较晕,烦请路过各位大虾帮忙,不胜感激.
[ 此贴被XChinux在2006-01-14 10:46重新编辑 ]
离线cprcf

只看该作者 1楼 发表于: 2006-01-14
#include <qapplication.h>
#include <qpushbutton.h>
#include <qlineedit.h>
#include <qvalidator.h>
#include <qtooltip.h>
#include <qlabel.h>
#include <qlayout.h>
#include <qwidget.h>

class SCalc : public QWidget
     {
           Q_OBJECT
           public:
                 SCalc(QWidget *parent = 0,const char *name);
                 ~SCalc();
           private:
                 QPushButton * btn_calc;
                 QLabel * lb_title;
                 QLabel * lb_add;
                 QLabel * lb_equal;
                 QLineEdit * le_bjs;
                 QLineEdit * le_js;
                 QLineEdit * le_result;
                 
     }
     SCalc::SCalc(QWidget *parent,const char *name)
           : QWidget(parent,name)
                 {
                       setMaximumSize(QSize(400,80));
                       QToolTip:add(this,tr("copyright @ cprcf"));
                             QBoxLayout *vlayout = new QVBoxLayout(this,3);
                             lb_title->setText("A Simple Calculator");
                             vlayout->addWidget(lb_title);
                             lb_title->setAlignment(AlignHCenter | AlignTop);
                             lb_title->setFont(QFont("Times",20,QFont::Bold));
                                   
                                   QBoxLayout *hlayout = new QHBoxLayout(vlayout);
                                   le_bjs = new QLineEdit(this);
                                   le_bjs->setMaxLength(10);
                                   le_bjs->setValidator(new QDoubleValidator(le_bjs));
                                   QToolTip::add(le_bjs,tr("Input Augend Here"));
                                   hlayout->addWidget(le_bjs,5);
                                   
                                   lb_add = new QLabel(this);
                                   lb_add->setText("+");
                                   hlayout->addWidget(lb_add,5);
                                   
                                   le_js = new QLineEdit(this);
                                   le_js->setMaxLength(10);
                                   le_js->setValidator(new QDoubleValidator(le_js));
                                   QToolTip::add(le_js,tr("Input Addend Here"));
                                   hlayout->addWidget(le_js,5);
                                   
                                   lb_equal = new QLabel(this);
                                   lb_equal->setText("=");
                                   hlayout->addWidget(lb_equal,5);
                                   
                                   le_result = new QLineEdit(this);
                                   le_result->setReadOnly(true);
                                   hlayout->addWidget(le_result,5);
                                   
                                   btn_calc = new QPushButton(this);
                                   btn_calc->setText("calc");
                                   QToolTip::add(btn,tr("click me"));
                                   vlayout->addWidget(btn_calc);
                                   vlayout->activate();
                                   
                                   connect(btn_calc,SIGNAL(clicked()),le_result,SLOT());
                 }
                 SCalc::~SCalc()
                       {
                       }
                       
                       int main(int argc,char **argv)
                       {
                             QApplication app(argc,argv);
                             SCalc *calc = new SCalc();
                             app.setMainWidget(calc);
                             calc->show();
                             return app.exec();
                       }
                       
//下面是错误信息
本来开头没加Q_OBJECT 编译能通过 可以运行的
加了Q_OBJECT后 出现 如下错误提示

SCalc.o:In function 'SCalc::SCalc(QWidget *,char const *)':
SCalc.o(.text+0x29): undefined reference to 'SCalc virtual table'
SCalc.o(.text+0x48): undefined reference to 'SCalc::QPaintDevice virtual table'
SCalc.o(.text+0x7c): undefined reference to 'SCalc virtual table'
SCalc.o(.text+0x8c): undefined reference to 'SCalc::tr(char const *,char const *)'
SCalc.o(.text+0x29a): undefined reference to 'SCalc::tr(char const *,char const *)'
SCalc.o(.text+0x402): undefined reference to 'SCalc::tr(char const *,char const *)'
SCalc.o(.text+0x5c6): undefined reference to 'SCalc::tr(char const *,char const *)'
SCalc.o:In function 'SCalc::~SCalc(void)':
SCalc.o(.text+0x691): undefined reference to 'SCalc virtual table'
SCalc.o(.text+0x698): undefined reference to 'SCalc::QPaintDevice virtual table'
离线XChinux

只看该作者 2楼 发表于: 2006-01-14
取:lineEdit1->text()
设置:lineEdit1->setText("your string");

最好先看一下本版置顶贴中相关的几篇学习贴,还有相关的Qt机制介绍是文章,尤其是signals and slots机制。
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线cprcf

只看该作者 3楼 发表于: 2006-01-14
谢谢谢谢
不过我时间很紧 ,来不及仔细研究现在,请大侠指点啊
离线cprcf

只看该作者 4楼 发表于: 2006-01-14
下面是引用XChinux于2006-01-14 10:49发表的:
取:lineEdit1->text()
设置:lineEdit1->setText("your string");
最好先看一下本版置顶贴中相关的几篇学习贴,还有相关的Qt机制介绍是文章,尤其是signals and slots机制。


我自己写了个slots
名为 eval()

connect(btn_calc,SIGNAL(clicked()),le_result,SLOT(eval()));

eval()里写了
设置的 ,还是不行
le_result.setText("Test");
点了按钮,还是没反应
离线cprcf

只看该作者 5楼 发表于: 2006-01-14
开头不加入 Q_OBJECT 就没有错误
加了Q_OBJECT 就出现

undefined reference to 'SCalc virtual table'
undefined reference to 'SCalc::QPaintDevice virtual table'

不加Q_OBJECT 又没法用SLOT
离线XChinux

只看该作者 6楼 发表于: 2006-01-14
把类定义,实现以及主函数分别放到三个文件中。这样就没问题了。否则你放在一个文件中,要加额外的选项处理的。

http://www.qtcn.org/bbs/read.php?tid=1855
[ 此贴被XChinux在2006-01-14 11:33重新编辑 ]
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线cprcf

只看该作者 7楼 发表于: 2006-01-14
谢谢谢谢
离线cprcf

只看该作者 8楼 发表于: 2006-01-14
再问一个很幼稚的问题
分成三个文件以后
还是
qmake -project
qmake
make
编译文件?
离线cprcf

只看该作者 9楼 发表于: 2006-01-14
我不会写makefile
离线cprcf

只看该作者 10楼 发表于: 2006-01-14
分开写 ,果然可以了
谢谢大侠
激动的我要哭了
离线cprcf

只看该作者 11楼 发表于: 2006-01-14
老大,你说话啊

我在类里加了个测试用的 slot
slotEval()
{
le_result->setText("test");
}
然后给btn_calc

connect(btn_calc,SIGNAL(clicked()),le_result,SLOT(slotEval()))

但是运行了,点击鼠标没反应啊

这个connect是不是象java中的addXXXListener()一样需要Listener 然后需要Event的啊?
离线cprcf

只看该作者 12楼 发表于: 2006-01-14
还有取出QLineEdit中的文本后,怎么进行类型转换

QString str = LineEdit1->text();

如果在 LineEdit1中输入的是 123
str = "123"
那怎么样把str中的123 变成 一个整形常量呢
用QString的toInt(),或者toLong()方法可以吗?
离线XChinux

只看该作者 13楼 发表于: 2006-01-14
自己看Qt Reference
二笔 openSUSE Vim N9 BB10 XChinux@163.com 网易博客 腾讯微博
承接C++/Qt、Qt UI界面、PHP及预算报销系统开发业务
离线cprcf

只看该作者 14楼 发表于: 2006-01-14
...............................
离线cprcf

只看该作者 15楼 发表于: 2006-01-14
问题全部搞定。
。。。。。。。。。。。。。。。。。。。。。。。
嘎嘎~~~~~~~~~~~~~~~~~
离线lord_jt
只看该作者 16楼 发表于: 2006-01-16
--------------------------------------------------------------------------------

應該是
qmake -project
qmake XXX.pro 吧
make
离线xhf
只看该作者 17楼 发表于: 2006-05-12
快速回复
限100 字节
 
上一个 下一个