Я новичок в Qt, но не нов в C ++.
Я нахожусь под Ubuntu 18.04 и использую последний QtCreator с последней платформой Qt5
Я пытаюсь настроить вертикальный макет с горизонтальным вложенным макетом и под заказным виджетом (на данный момент на примере часов)
Я установил новый проект виджета, но, поскольку я пока не понимаю, как получить доступ к вложенному макету из кода C ++, я удалил автоматически созданную основную форму и созданный макет при исполнении.
Если я использую свой пользовательский виджет в качестве окна, оно работает, если я использую окно и добавляю свой пользовательский виджет, это работает, но если я добавляю макет, добавляю свой пользовательский виджет в этот макет и вызываю setLayout для окна, оно исчезает ...
Я перепробовал почти все заказы: сначала установите макет, либо добавьте мой виджет.
Я пытался вызвать show () на моем виджете или не до или после добавления его в макет
Я пытался добавить вложенный слой первым или последним ничего не изменилось
Я прочитал несколько примеров времени и руководство по макету и один вложенный
Я вижу свой вложенный макет, но не виджет
вот мой главный:
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
QWidget w;
w.setWindowTitle("WOUND : Windings Organiser with Usefull and Neat Drawings");
QVBoxLayout* hl=new QVBoxLayout;// top vertical layout
QHBoxLayout* slotqueryLayout=new QHBoxLayout; // nested first horizontal layout
QLabel *slotqueryLabel = new QLabel("Slot number:");
QLineEdit *slotqueryEdit = new QLineEdit("48");
slotqueryLayout->addWidget(slotqueryLabel);
slotqueryLayout->addWidget(slotqueryEdit);
hl->addLayout(slotqueryLayout);
WindingViewer* wv=new WindingViewer(&w); // my widget is just a simple canvas to draw things
hl->addWidget(wv);
wv->show(); // dont know if it's needed but if I remove it it dont change anything / tried to do it before or after adding to layout
w.setLayout(hl); // if called before adding content it dont change
w.show();
return a.exec();
}
и здесь вы можете найти мой пользовательский виджет:
class WindingViewer : public QWidget
{
Q_OBJECT
public:
explicit WindingViewer(QWidget *parent = nullptr);
protected:
void paintEvent(QPaintEvent *event) override;
signals:
public :
int SlotNumber;
public slots:
};
и
WindingViewer::WindingViewer(QWidget *parent) : QWidget(parent)
{
SlotNumber=3;
resize(200, 200);
}
void WindingViewer::paintEvent(QPaintEvent *)
{
int side = qMin(width(), height());
QColor SlotColor(127, 127, 127);
QPainter painter(this);
static const QPoint slotpolygonext[4] = {
QPoint(-2,85),
QPoint(-3,95),
QPoint(3, 95),
QPoint(2, 85)
};
static const QPoint slotpolygonint[5] = {
QPoint(-1,75),
QPoint(-2,85),
QPoint(2, 85),
QPoint(1, 75),
QPoint(-1,75),
};
painter.setRenderHint(QPainter::Antialiasing);
painter.translate(width() / 2, height() / 2);
painter.scale(side / 200.0, side / 200.0);
painter.setPen(SlotColor);
for (int i = 0; i < SlotNumber; ++i) {
painter.drawPolyline(slotpolygonext,4);
painter.drawPolyline(slotpolygonint,5);
painter.rotate(360.0/SlotNumber);
}
}
Надеюсь, вопрос достаточно ясен. Я ищу ответ здесь и через Интернет перед публикацией. Я нашел несколько вещей, но ничего общего не было.