Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. International
  3. Polish
  4. Tworzenie i wypełnienie QHBoxLayout w czasie wykonania
Forum Updated to NodeBB v4.3 + New Features

Tworzenie i wypełnienie QHBoxLayout w czasie wykonania

Scheduled Pinned Locked Moved Polish
3 Posts 2 Posters 1.6k Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • K Offline
    K Offline
    kamil1338
    wrote on last edited by
    #1

    Witam wszystkich. Chciałbym utworzyć QHBoxLayout i dodać do niego przyciski w czasie wykonania programu. Postępuję tak jak jest napisane w dokumentacji. Niestety nie widać żadnego efektu. Oto kod mojej klasy:

    mainwindow.h
    @#ifndef MAINWINDOW_H
    #define MAINWINDOW_H

    #include <QMainWindow>
    #include <QPushButton>
    #include <QBoxLayout>

    namespace Ui {
    class MainWindow;
    }

    class MainWindow : public QMainWindow
    {
    Q_OBJECT

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

    private:
    Ui::MainWindow ui;
    QPushButton
    przycisk1;
    QPushButton* przycisk2;
    QPushButton* przycisk3;
    QPushButton* przycisk4;
    QHBoxLayout* uklad;
    };

    #endif // MAINWINDOW_H@

    mainwindow.cpp
    @#include "mainwindow.h"
    #include "ui_mainwindow.h"
    #include <QRect>

    MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
    {
    ui->setupUi(this);
    przycisk1 = new QPushButton("przycisk01");
    przycisk2 = new QPushButton("przycisk02");
    przycisk3 = new QPushButton("przycisk03");
    przycisk4 = new QPushButton("przycisk04");

    uklad = new QHBoxLayout;
    
    uklad->addWidget(przycisk1);
    uklad->addWidget(przycisk2);
    uklad->addWidget(przycisk3);
    uklad->addWidget(przycisk4);
    
    setLayout(uklad);
    

    }

    MainWindow::~MainWindow()
    {
    delete ui;
    }
    @

    Dostaję również następujący komunikat od debugera:

    QWidget::setLayout: Attempting to set QLayout "" on MainWindow "MainWindow", which already has a layout

    Męczę się z tym trochę i chcialbym się tego nauczyć.

    1 Reply Last reply
    0
    • T Offline
      T Offline
      turaz
      wrote on last edited by
      #2

      Rozwiązaniem twojego problemu jest ustawienie Layout'u nie bezpośrednio w MainWindow jak robisz to teraz, lecz w centralWidget czyli zmień to:
      @ setLayout(uklad); @

      na to:
      @ ui->centralWidget->setLayout(uklad); @

      W woli objaśnienia, podobna sytuacja jest w przypadku kontenerów (QScrollArea, QTabWidget, QToolBox itp). MainWindow podobnie jak one posiada 'wewnętrzny' widget, w którym ustawiany jest layout i inne widget'y.

      1 Reply Last reply
      0
      • K Offline
        K Offline
        kamil1338
        wrote on last edited by
        #3

        Rozumiem, dziękuję

        1 Reply Last reply
        0

        • Login

        • Login or register to search.
        • First post
          Last post
        0
        • Categories
        • Recent
        • Tags
        • Popular
        • Users
        • Groups
        • Search
        • Get Qt Extensions
        • Unsolved