Previous Entry Share Next Entry
(no subject)
Шар
hegan_gray wrote in ru_qt
Уважаемые сообщники, позвольте вас побеспокоить ещё раз.

Попытался тут слепить собственный виджет. Вроде как слепил и решил проверить, так ли оно выглядит. Не так. Собственно, код и скриншот:


Файл itempanels.h

#ifndef ITEMPANELS_H
#define ITEMPANELS_H

#include <QFrame>
#include <QPushButton>
#include <QLabel>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QTableWidget>
#include <QLineEdit>
#include <QComboBox>

class QbasicPanel : public QFrame
{
public:
    QbasicPanel( QWidget * parent = 0, Qt::WindowFlags f = 0 );

protected:
    QPushButton* pbSend;
    QPushButton* pbGet;
    QLabel* lbUnit;
    int wFunc;
    int rFunc;
    bool writeable;
    bool writeOnRun;
    int mult;
    QHBoxLayout* buttonsLayout;
    QHBoxLayout* dataLayout;
    QVBoxLayout* mainLayout;
};

class QbinaryPanel : public QbasicPanel
{
public:
    QbinaryPanel( QWidget * parent = 0, Qt::WindowFlags f = 0 );

protected:
    QTableWidget* table;

};

class QvaluePanel : public QbasicPanel
{
public:
    QvaluePanel( QWidget * parent = 0, Qt::WindowFlags f = 0 );

protected:
    QLineEdit* lineEdit;

};

#endif // ITEMPANELS_H
_Winnie C++ Colorizer


Файл itempanels.cpp

#include "itempanels.h"

QbasicPanel::QbasicPanel( QWidget* parent /*=0*/, Qt::WindowFlags f /*=0*/ )
        : QFrame ( parent, f )
{
    pbSend = new QPushButton (tr("Send"),this);
    pbGet = new QPushButton (tr("Get"),this);
    lbUnit = new QLabel (tr("none"),this);
    lbUnit->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);

    buttonsLayout = new QHBoxLayout(this);
    buttonsLayout->addWidget(pbSend, 0, Qt::AlignHCenter|Qt::AlignVCenter);
    buttonsLayout->addWidget(pbGet, 0, Qt::AlignHCenter|Qt::AlignVCenter);

    dataLayout = new QHBoxLayout(this);
    dataLayout->insertWidget(1, lbUnit, 1, Qt::AlignHCenter|Qt::AlignVCenter);

    mainLayout = new QVBoxLayout (this);

    mainLayout->addLayout(buttonsLayout, 0);
    mainLayout->addLayout(dataLayout, 0);

    this->setLayout(mainLayout);
}

QbinaryPanel::QbinaryPanel( QWidget* parent /*=0*/, Qt::WindowFlags f /*=0*/ )
        : QbasicPanel ( parent, f )
{
    table = new QTableWidget(3, 2, this);

    dataLayout->insertWidget(0, table, 10, Qt::AlignHCenter|Qt::AlignVCenter);
}

QvaluePanel::QvaluePanel( QWidget* parent /*=0*/, Qt::WindowFlags f /*=0*/ )
        : QbasicPanel ( parent, f )
{
    lineEdit = new QLineEdit(tr("Enter value"), this);
    lineEdit->setSizePolicy(QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding);

    dataLayout->insertWidget(0, lineEdit, 10, Qt::AlignHCenter|Qt::AlignVCenter);

}
_Winnie C++ Colorizer


Файл main.cpp

#include <QtGui/QApplication>
#include "itempanels.h"

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    QvaluePanel panel;
    panel.show();
    return a.exec();
}
_Winnie C++ Colorizer


В результате запуска получаем вот это

и, если растянуть, вот это

Надпись, как показала проверка, прячется под полем ввода.

Объясните мне, плиз, почему оно так получается, и как с этим бороться, я не догоняю.

  • 1
Ну это-то понятно, в конце концов, именно поэтапно и делаю :)

А с дизайнером я, видимо, просто ещё не договорился. Хотя товарищ вот говорит, что он тоже не может договориться никак.

  • 1
?

Log in