• 6947阅读
  • 0回复

密码登陆问题 [复制链接]

上一主题 下一主题
离线mayuanyi853
 

只看楼主 倒序阅读 楼主  发表于: 2010-05-31
本人写了一个简单的QT4登陆界面程序

编译平台:Ubuntu8.04
运行平台:ARM2440(三星公司ARM处理器S3C2440A)
交叉编译器 :arm-linux-3.4.1
QT版本:QtEmbedded-4.5.3-arm
显示屏:4.3寸触摸屏(480*272)
基本功能已经完成,但是遇到些写小问题,特来求助
//////////////////////////////////////////////////////////////////////////////
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QTextCodec::setCodecForTr(QTextCodec::codecForName("gb18030"));
    QApplication::setFont(QFont(("unifont"),10,QFont::Normal));
    CLoginDlg dlg;
    if(dlg.exec()==QDialog::Accepted)
    {
        return a.exec();
    }
}
/////////////////////////////////////////////////////////////////////////////////////
CLoginDlg::CLoginDlg(QWidget* parent)
:    QDialog(parent)//CLoginDlg类的构造函数
{
    QPalette palette;
    palette.setBrush(QPalette::Window, QBrush(QPixmap("/usr/qtopia/c.png")));
    setPalette(palette);    
        
    QPushButton* okBtn = new QPushButton(tr("登陆"),this);
    okBtn->setGeometry(320, 140, 50, 30);
    connect(okBtn, SIGNAL(clicked()), this, SLOT(accept()));

/*    vKey = new VKey;
    QPushButton* keyButton = new QPushButton(tr("小键盘"),this);
    keyButton->setGeometry(380, 140, 50, 30);
    
    connect(keyButton, SIGNAL(clicked()),this,SLOT(disvkey()));*/

//QPushButton* cancelBtn = new QPushButton(tr("取消"));    
//connect(cancelBtn, SIGNAL(clicked()), this, SLOT(reject()));

    waitingForOperand = true;

    pwdLineEdit = new QLineEdit(this);//pwdLineEdit已在头文件中声明,为QLineEdit类的指针对象
    pwdLineEdit->setEchoMode(QLineEdit::Password);//设置pwdLineEdit的现实方式
    pwdLineEdit->setGeometry(150, 140, 160, 30);
  for(int i = 0; i < NumDigitButtons; ++i)
  {
      digitButtons = createButton(QString::number(i), SLOT(digitClicked()));
  }

   Button *backspaceButton = createButton(tr("退格"), SLOT(backspaceClicked()));
   Button *clearButton = createButton(tr("清除"), SLOT(clear()));
  QGridLayout *mainLayout = new QGridLayout;
   mainLayout->setSizeConstraint(QLayout::SetFixedSize);
    mainLayout->addWidget(digitButtons[0], 19, 19, 1, 1);
    mainLayout->addWidget(digitButtons[1], 19, 20, 1, 1);
    mainLayout->addWidget(digitButtons[2], 19, 21, 1, 1);
    mainLayout->addWidget(digitButtons[3], 19, 22, 1, 1);
    mainLayout->addWidget(digitButtons[4], 19, 23, 1, 1);
    mainLayout->addWidget(digitButtons[5], 18, 19, 1, 1);
    mainLayout->addWidget(digitButtons[6], 18, 20, 1, 1);
    mainLayout->addWidget(digitButtons[7], 18, 21, 1, 1);
    mainLayout->addWidget(digitButtons[8], 18, 22, 1, 1);
    mainLayout->addWidget(digitButtons[9], 18, 23, 1, 1);
    mainLayout->addWidget(clearButton, 19, 24, 1, 2);
    mainLayout->addWidget(backspaceButton, 18, 24, 1, 2);
   setLayout(mainLayout);
   setWindowFlags(Qt::FramelessWindowHint);  //无窗口标题栏
  resize(480,272);                                                    //全屏    
}

CLoginDlg::~CLoginDlg()//析构函数
{
//delete usrLineEdit;
    delete pwdLineEdit;
}
void CLoginDlg::accept()//重写accept()函数
{
    if(pwdLineEdit->text() == tr("123"))
    {
        QDialog::accept();
    }
    else
    {
    QMessageBox::warning(this,tr("警告"),tr("输入密码错误,请重新输入!"),QMessageBox::tr("确定"));
    pwdLineEdit->clear();    //清空密码输入框
    pwdLineEdit->setFocus();    //将光标转到密码输入框
    }
}
void CLoginDlg::digitClicked()
{
    Button *clickedButton = qobject_cast<Button *>(sender());
    int digitValue = clickedButton->text().toInt();
    if (pwdLineEdit->text() == "0" && digitValue == 0)
        return;
        
    if (waitingForOperand) {
        pwdLineEdit->clear();
        waitingForOperand = false;
    }
    
    pwdLineEdit->setText(pwdLineEdit->text() + QString::number(digitValue));
}

void CLoginDlg::enterClicked()
{
    waitingForOperand = true;
    emit setvalue(pwdLineEdit->text());
}

void CLoginDlg::pointClicked()
{
    if (waitingForOperand)
        pwdLineEdit->setText("0");
    if (!pwdLineEdit->text().contains("."))
        pwdLineEdit->setText(pwdLineEdit->text() + tr("."));
    waitingForOperand = false;
}

void CLoginDlg::changeSignClicked()
{
    QString text = pwdLineEdit->text();
    double value = text.toDouble();

    if (value > 0.0) {
        text.prepend(tr("-"));
    } else if (value < 0.0) {
        text.remove(0, 1);
    }
    pwdLineEdit->setText(text);
}

void CLoginDlg::backspaceClicked()
{
    QString text = pwdLineEdit->text();
    text.chop(1);
    if (text.isEmpty()) {
        text = "0";
        waitingForOperand = true;
    }
    pwdLineEdit->setText(text);
}

void CLoginDlg::clear()
{
    pwdLineEdit->setText("0");
    waitingForOperand = true;
}

Button *CLoginDlg::createButton(const QString &text, const char *member)
{
    Button *button = new Button(text);
    connect(button, SIGNAL(clicked()), this, member);
    return button;
}
/////////////////////////////////////////////////////////////////
现在遇到的问题是运行时界面的数字键的按钮都是黑色的,看不到数字,按的时候才会变的正常的,还有是如果我不插入背景图片的话,就不会出现这种情况。怎样才能既要背景图片又能使数字按键不正常显示呢得呢
快速回复
限100 字节
 
上一个 下一个