Название: расположение виджетов в диалоге
Отправлено: 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); }
В итоге получаю: (http://s2.ipicture.ru/uploads/20110718/6y7KQxWu.png) Объясните как растянуть комбобоксы в ширину, и почему растянулся лайнэдит? p.s. пробовал делать комбобоксу setSizePolicy(QSizePolicy::Maximum, QSizePolicy::Fixed), никаких изменений
Название: Re: расположение виджетов в диалоге
Отправлено: Wlad_C от Июль 18, 2011, 14:51
Для такой формы лучше использовать QFormLayout (Смотри Assistant). И все проблемы исчезнут, да и код короче станет.
Название: Re: расположение виджетов в диалоге
Отправлено: ddrtn от Июль 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() { }
Название: Re: расположение виджетов в диалоге
Отправлено: slan от Июль 19, 2011, 08:49
Вот пример
Спасибо, пример помог. Если вместо layProp->addWidget(cbSpeed, 1, 1, Qt::AlignLeft); написать layProp->addWidget(cbSpeed, 1, 1); комбобокс растягивается в ширину, как и хотелось
|