• 4591阅读
  • 2回复

QPushButton和QLineEdit [复制链接]

上一主题 下一主题
离线robin1210
 
只看楼主 倒序阅读 楼主  发表于: 2010-10-27
— 本帖被 XChinux 执行加亮操作(2010-10-27) —
我已经画出了一个软键盘,
现在想问问怎么通过QPushButton的点击,把button上面的字母,显示在QLineEdit上,并且能连续的 输入一段字母
生活需要激情,技术需要挑战!
离线refinestar
只看该作者 1楼 发表于: 2011-01-18
用textBrowser啊,但是不能输入,因为它是显示widget
[ 此帖被refinestar在2011-01-18 11:38重新编辑 ]
离线qq867814126

只看该作者 2楼 发表于: 2011-01-27
你参考一下

#ifndef SELFKEYBOARD_H
#define SELFKEYBOARD_H
#include <QWidget>
#include "ui_selfkeyboard.h"
#include <QtGlobal>
#include <QPushButton>
#include <QTime>
#include <QSignalMapper>
#include "pushbutton.h"
class SelfKeyBoard : public QWidget
{
Q_OBJECT
public:
SelfKeyBoard(QWidget *parent = 0);
~SelfKeyBoard();
signals:
void buttonSignal(const QString &);
private:
Ui::SelfKeyBoardClass ui;
PushButton pushButton[15];
QSignalMapper * signalMapper;
};
#endif // SELFKEYBOARD_H


#include "selfkeyboard.h"
SelfKeyBoard::SelfKeyBoard(QWidget *parent)
: QWidget(parent)
{
ui.setupUi(this);
int i, j, x, y;
QString buttonText[15] = {"0","1","2","3","4","5","6","7","8","9"," ","<-","->","<=","<_|"};
QStringList stringList;

signalMapper = new QSignalMapper;
i = j = x = y = 0;
for(i = 0; i < 15; i++)
{
  stringList.append(buttonText);
}
for(j = 0; stringList.count() > 0; j ++)
{
  qsrand(QTime::currentTime().msec() + QTime::currentTime().second() * 1000);
  ui.gridLayout->addWidget(&pushButton[j], y, x, 1, 1);
  i = qrand() % stringList.count();
  pushButton[j].setText(stringList.at(i));
  signalMapper->setMapping(&pushButton[j], stringList.at(i));
  connect(&pushButton[j], SIGNAL(clicked()), signalMapper, SLOT(map()));
  //connect(&pushButton[j], SIGNAL(pressed()), signalMapper, SLOT(map()));
  stringList.removeAt(i);
  x++;
  if (5 == x)
  {
   y++;
   x = 0;
  }
}
connect(signalMapper, SIGNAL(mapped(const QString &)), this, SIGNAL(buttonSignal(const QString &)));

}
SelfKeyBoard::~SelfKeyBoard()
{
}

#include "psword.h"
void fun(QString s)
{
}
PSWord::PSWord(QWidget *parent, Qt::WFlags flags)
: QMainWindow(parent, flags)
{
ui.setupUi(this);
//this->pline->setFocusPolicy(Qt::ClickFocus);
keyBoard = new SelfKeyBoard(this);
pline = new LineEdit(this);
//pline->setReadOnly(true);

this->ui.formLayout->setWidget(0, QFormLayout::FieldRole, pline);
//this->ui.formLayout->setWidget(1, QFormLayout::FieldRole, keyBoard);
connect(pline, SIGNAL(FocusInSignal()), this, SLOT(FocusInSlot()));
//connect(pline, SIGNAL(FocusOutSignal()), this, SLOT(FocusOutSlot()));

//keyBoard->setGeometry(pline->x(), pline->y() + pline->height(),240 , 100);
keyBoard->setFixedSize(200 , 100);
this->ui.formLayout->addRow(NULL, keyBoard);
keyBoard->hide();
this->pline->setFocus();
connect(keyBoard, SIGNAL(buttonSignal(const QString &)), this, SLOT(KeyDealSlot(const QString &)));
}
PSWord::~PSWord()
{
}
void PSWord::FocusChangedSlot(QWidget * old,QWidget * now)
{
/*if(now == (QWidget *)(this->pline))
{
  keyBoard->show();
}
else
{
  keyBoard->hide();
}*/
}
void PSWord::KeyDealSlot(const QString & key)
{
if (QString("<_|") == key)
{
  FunctionEnter(fun, pline->text());
}
else if (QString("<-") == key)
{
  pline->cursorBackward(false);
}
else if (QString("->") == key)
{
  pline->cursorForward(false);
}
else if (QString("<=") == key)
{
  pline->backspace();
}
else
{
  this->pline->insert(key);
}
keyBoard->show();
this->pline->setFocus();
}
void PSWord::FunctionEnter(void (* ptrFun)(QString),QString s)
{
ptrFun(s);
}
/*void PSWord::FocusOutSlot()
{
keyBoard->hide();
}*/
void PSWord::FocusInSlot()
{
keyBoard->show();
this->pline->setFocus();
}

void PSWord::mousePressEvent(QMouseEvent * event)
{
keyBoard->hide();
this->pline->setFocus();
}

#ifndef PSWORD_H
#define PSWORD_H
#include <QtGui/QMainWindow>
#include "ui_psword.h"
#include "selfkeyboard.h"
#include "lineedit.h"
class PSWord : public QMainWindow
{
Q_OBJECT
public:
PSWord(QWidget *parent = 0, Qt::WFlags flags = 0);
~PSWord();
void FunctionEnter(void (* ptrFun)(QString),QString);
public slots:
void FocusChangedSlot(QWidget * old = NULL,QWidget * now = NULL);
void KeyDealSlot(const QString &);
//void FocusOutSlot();
void FocusInSlot();
protected:  
virtual void mousePressEvent(QMouseEvent * event);

private:
Ui::PSWordClass ui;
SelfKeyBoard * keyBoard;
LineEdit * pline;
};
#endif // PSWORD_H
快速回复
限100 字节
 
上一个 下一个