Russian Qt Forum
Сентябрь 22, 2024, 02:30 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: расположение виджетов в диалоге  (Прочитано 2905 раз)
slan
Гость
« : Июль 18, 2011, 13:34 »

Добрый день. Создаю вот такой диалог:
.h файл:
Код:
class TInputDialog : public QDialog
{
    Q_OBJECT

protected:
    QDialogButtonBox *btnBox;
    QGridLayout *layProp;

public:
    TInputDialog(QWidget *parent = 0);
    ~TInputDialog();
};
class TConnectDlg : public TInputDialog
{
    Q_OBJECT

protected:
    QLabel *lbSpeed, *lbPort, *lbPsw, *lbCodePage;
    QComboBox *cbSpeed, *cbPort;
    QLineEdit *lePsw;

public:
    TConnectDlg(QWidget *parent = 0);
    ~TConnectDlg();
};
.cpp файл:
Код:
TInputDialog::TInputDialog(QWidget *parent) :
        QDialog(parent, Qt::WindowTitleHint | Qt::WindowSystemMenuHint)
{
    setModal(true);

    btnBox = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel, Qt::Horizontal, this);
    connect(btnBox, SIGNAL(accepted()), this, SLOT(accept()));
    connect(btnBox, SIGNAL(rejected()), this, SLOT(reject()));

    layProp = new QGridLayout(this);
}

TConnectDlg::TConnectDlg(QWidget *parent) :
        TInputDialog(parent)
{
    lbSpeed = new QLabel("Скорость", this);
    lbPort = new QLabel("Порт", this);
    lbPsw = new QLabel("Пароль", this);

    cbSpeed = new QComboBox(this);
    QStringList slSpeed("9600");
    slSpeed.append("19200");
    slSpeed.append("57600");
    slSpeed.append("115200");
    cbSpeed->addItems(slSpeed);
    cbSpeed->setCurrentIndex(3);

    cbPort = new QComboBox(this);
    TComPort *port = new TComPort();
    QString portList = QString::fromStdString(port->GetPortList());
    QStringList slPort;
    if(portList.length())
        slPort = portList.split(",");
    else
        slPort.append("Нет доступных портов");
    cbPort->addItems(slPort);
    delete port;

    lePsw = new QLineEdit("0000", this);
    lePsw->setEchoMode(QLineEdit::Password);
    lePsw->setMaxLength(4);

    layProp->addWidget(lbPort, 0, 0, Qt::AlignLeft);
    layProp->addWidget(lbSpeed, 1, 0, Qt::AlignLeft);
    layProp->addWidget(lbPsw, 2, 0, Qt::AlignLeft);
    layProp->addWidget(cbSpeed, 1, 1, Qt::AlignLeft);
    layProp->addWidget(cbPort, 0, 1, Qt::AlignLeft);
    layProp->addWidget(lePsw, 2, 1, Qt::AlignLeft);
    layProp->addWidget(btnBox, 3, 0, 1, 2);

    setLayout(layProp);
}

В итоге получаю:


Объясните как растянуть комбобоксы в ширину, и почему растянулся лайнэдит?
p.s. пробовал делать комбобоксу setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed), никаких изменений
Записан
Wlad_C
Гость
« Ответ #1 : Июль 18, 2011, 14:51 »

Для такой формы лучше использовать QFormLayout (Смотри Assistant). И все проблемы исчезнут, да и код короче станет.
Записан
ddrtn
Гость
« Ответ #2 : Июль 19, 2011, 06:32 »

Вот пример
Код:
#ifndef DIALOG_H
#define DIALOG_H

#include <QDialog>

class QLineEdit;
class QComboBox;
class QPushButton;

class Dialog : public QDialog
{
    Q_OBJECT

public:
    explicit Dialog(QWidget *parent = 0);
    ~Dialog();

private:
QComboBox* cbSpeed;
QComboBox* cbPort;
QLineEdit* lePassword;
QPushButton* pbOk;
QPushButton* pbCancel;

};

#endif // DIALOG_H

Код:
#include "dialog.h"

#include <QtGui>

Dialog::Dialog(QWidget *parent) :
QDialog(parent)
{
cbPort = new QComboBox(this);
cbPort->addItems(QStringList() << "COM1" <<"COM2" <<"COM3");
cbSpeed = new QComboBox(this);
cbSpeed->addItems(QStringList() << "34800" <<"57600" <<"115200");
lePassword = new QLineEdit(this);
lePassword->setEchoMode(QLineEdit::Password);
pbOk = new QPushButton(tr("OK"), this);
pbCancel = new QPushButton(tr("Cancel"), this);
connect(pbOk, SIGNAL(released()), this, SLOT(accept()));
connect(pbCancel, SIGNAL(released()), this, SLOT(reject()));

QGridLayout* gl = new QGridLayout;
gl->addWidget(new QLabel(tr("Port"),this), 0, 0);
gl->addWidget(cbPort, 0, 1, 1, 2);
gl->addWidget(new QLabel(tr("Speed"),this), 1, 0);
gl->addWidget(cbSpeed, 1, 1, 1, 2);
gl->addWidget(new QLabel(tr("Password"),this), 2, 0);
gl->addWidget(lePassword, 2, 1, 1, 2);
gl->addWidget(pbOk, 3, 1);
gl->addWidget(pbCancel, 3, 2);
setLayout(gl);

}

Dialog::~Dialog()
{
}

Записан
slan
Гость
« Ответ #3 : Июль 19, 2011, 08:49 »

Вот пример

Спасибо, пример помог.
Если вместо
Код:
layProp->addWidget(cbSpeed, 1, 1, Qt::AlignLeft);
написать
Код:
layProp->addWidget(cbSpeed, 1, 1);
комбобокс растягивается в ширину, как и хотелось
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.146 секунд. Запросов: 21.