本人写了一个简单的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;
}
/////////////////////////////////////////////////////////////////
现在遇到的问题是运行时界面的数字键的按钮都是黑色的,看不到数字,按的时候才会变的正常的,还有是如果我不插入背景图片的话,就不会出现这种情况。怎样才能既要背景图片又能使数字按键不正常显示呢得呢