LINUX.ORG.RU

KDM + QDialog = trouble


0

0

Всем привет!

Мне необходимо пропатчить kdm, добавив возможность регистрации
пользователей.
Я добавил кнопку "Register" и связял её сигнал clicked() со слотом:

void
KStdGreeter::fake()
{
  KRegisterDialog d;
  d.exec();
}

/////////////// kregister_dialog.h //////////////////
#ifndef K_REGISTER_DIALOG_
#define K_REGISTER_DIALOG_

#include <qdialog.h>
#include <map>

class QLabel;
class QLineEdit;
class QWidget;
class QGridLayout;
class QPushButton;


class KRegisterDialog : public QDialog
{
//      Q_OBJECT
  public:
    KRegisterDialog(QWidget *parent = 0);
    ~KRegisterDialog();
  private:
    typedef enum {studentID, login, password, passwordAgain} fields_t;
    std::map<fields_t, QLabel*> labels_;
    std::map<fields_t, QLineEdit*> lineEdits_;
    QPushButton* submitButton_;
    QGridLayout* gLayout_;
};

#endif //K_REGISTER_DIALOG_

/////////////// kregister_dialog.cpp //////////////////
#include "kregister_dialog.h"
#include <qlabel.h>
#include <qlineedit.h>
#include <qwidget.h>
#include <qlayout.h>
#include <qpushbutton.h>

KRegisterDialog::KRegisterDialog(QWidget* parent) : QDialog(parent)
{
  labels_[studentID] = new QLabel("Student ID",this);
  lineEdits_[studentID] = new QLineEdit(this);

  labels_[login] = new QLabel("Login name",this);
  lineEdits_[login] = new QLineEdit(this);

  labels_[password] = new QLabel("Password",this);
  lineEdits_[password] = new QLineEdit(this);

  labels_[passwordAgain] = new QLabel("Retype password",this);
  lineEdits_[passwordAgain] = new QLineEdit(this);

  submitButton_ = new QPushButton(this);
  submitButton_->setText("Submit");

  gLayout_ = new QGridLayout(this);

  gLayout_->addWidget(labels_[studentID] ,0,0);
  gLayout_->addWidget(lineEdits_[studentID] ,0,1);
  gLayout_->addWidget(labels_[login] ,1,0);
  gLayout_->addWidget(lineEdits_[login] ,1,1);
  gLayout_->addWidget(labels_[password] ,2,0);
  gLayout_->addWidget(lineEdits_[password] ,2,1);
  gLayout_->addWidget(labels_[passwordAgain] ,3,0);
  gLayout_->addWidget(lineEdits_[passwordAgain] ,3,1);
  gLayout_->addWidget(submitButton_ ,4,1);
}

KRegisterDialog::~KRegisterDialog()
{
  // TODO : Free all!
}


Вот что получилось:
1) Диалог открывается не в отдельном окне, а накладывается на виджет
верхнего уровня (KStdGreeter)!!!
Почему - не понимаю. На маленьком примере все работает.
Подозреваю что-то в KDE!?
2) В QLineEdit'ы я ничего ввести не могу!

Вот такие странности.
Может подскажет кто в чем здесь дело?
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.