Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. how to use QBox correctly?
Forum Updated to NodeBB v4.3 + New Features

how to use QBox correctly?

Scheduled Pinned Locked Moved Unsolved General and Desktop
4 Posts 2 Posters 1.2k 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.
  • G Offline
    G Offline
    gj21kr
    wrote on last edited by gj21kr
    #1

    Hello there,
    I'm a Qt 5.6.2 user with visual studio 2015 on Windows 7 64bit.
    The code below is programmed for Qt 4.x with visual studio 2010 on 32 bit.
    When I try to compile this program, I get a lot of C2027 and C2227 errors.
    C2027: use of undefined type 'QVBoxLayout'
    C2027: use of undefined type 'QGroupBox'
    C2227: left of '->setTitle' must point to class/struct/union/generic type
    C2027: use of undefined type 'QGridLayout'
    C2227: left of '->addWidget' must point to class/struct/union/generic type
    C2027: use of undefined type 'QCheckBox'
    C2227: left of '->setTitle' must point to class/struct/union/generic type

    Header:

    #pragma once
    #include <qdialog.h>
    class QCheckBox;
    class QGridLayout;
    class QVBoxLayout;
    class QDialogButtonBox;
    class QGroupBox;

    class ChannelsDlg : public QDialog
    {
    Q_OBJECT

    public:
    ChannelsDlg(unsigned int*);
    virtual int exec();
    void getChannels(unsigned int*);

    private:
    unsigned int m_channels[4];
    QCheckBox* m_channel[128];

    private slots:
    void accept();
    void onCheckBoard(bool);
    };

    Source:

    #include "stdafx.h"
    #include "ChannelsDlg.h"

    // initialize the channel data
    ChannelsDlg::ChannelsDlg(unsigned int* channels)
    {
    int i;
    for (i = 0; i < 4; i++)
    {
    m_channels[i] = channels[i];
    }
    }

    // user checked on a "board" or "all channels"
    void ChannelsDlg::onCheckBoard(bool checked)
    {
    QWidget* w = focusWidget();
    int i, j, start, end, board = w ? w->property("board").toInt() : 0;

    start = board > 3 ? 0 : board;
    end = board > 3 ? 4 : board + 1;
    
    for (j = start; j < end; j++)
    {
        for (i = 0; i < 32; i++)
        {
            m_channel[(j * 32) + i]->setChecked(checked);
        }
    }
    

    }

    // save the check boxes to the channel bitmask
    void ChannelsDlg::accept()
    {
    int i, index;
    m_channels[0] = m_channels[1] = m_channels[2] = m_channels[3] = 0;

    for (i = 0; i < 128; i++)
    {
        index = i / 32;
        m_channels[index] = m_channel[i]->isChecked() ? m_channels[index] | 1 << (i % 32) : m_channels[index];
    }
    
    QDialog::accept();
    

    }

    void ChannelsDlg::getChannels(unsigned int* channels)
    {
    int i;
    for (i = 0; i < 4; i++)
    {
    channels[i] = m_channels[i];
    }
    }

    // setup the dialog manually
    int ChannelsDlg::exec()
    {
    QVBoxLayout* vl = new QVBoxLayout;
    QDialogButtonBox* bb;
    QCheckBox* cb;
    QGroupBox* board;
    QGridLayout* gl;
    int i, index, row, ch;

    for (i = 0; i < 4; i++)
    {
        board = new QGroupBox;
        board->setTitle(QString(tr("Board %1")).arg(i + 1));
        gl = new QGridLayout;
    
        for (row = 0; row < 4; row++)
        {
            for (ch = 0; ch < 8; ch++)
            {
                index = (i * 32) + (row * 8) + ch;
                m_channel[index] = new QCheckBox;
                m_channel[index]->setText(QString("Ch: %1").arg(index));
                m_channel[index]->setChecked((m_channels[i] & (1 << ((row * 8) + ch))) != 0);
                gl->addWidget(m_channel[index], row, ch);
            }
        }
    
        board->setLayout(gl);
    
        cb = new QCheckBox;
        cb->setText(QString(tr("Entire Board %1")).arg(i + 1));
        cb->setProperty("board", i);
        cb->setChecked(true);
        connect(cb, SIGNAL(toggled(bool)), this, SLOT(onCheckBoard(bool)));
        vl->addWidget(cb);
        vl->addWidget(board);
    }
    
    cb = new QCheckBox;
    cb->setText(QString(tr("All Channels")));
    cb->setProperty("board", 10);
    cb->setChecked(true);
    connect(cb, SIGNAL(toggled(bool)), this, SLOT(onCheckBoard(bool)));
    vl->addWidget(cb);
    
    // make sure user can use OK & Cancel
    bb = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
    connect(bb, SIGNAL(accepted()), this, SLOT(accept()));
    connect(bb, SIGNAL(rejected()), this, SLOT(reject()));
    vl->addWidget(bb);
    
    setLayout(vl);
    resize(400, 400);
    setWindowTitle(tr("Channel Selection"));
    
    return QDialog::exec();
    

    }

    Source:
    #include "stdafx.h"
    #include "ChannelsDlg.h"

    // initialize the channel data
    ChannelsDlg::ChannelsDlg(unsigned int* channels)
    {
    int i;
    for (i = 0; i < 4; i++)
    {
    m_channels[i] = channels[i];
    }
    }

    // user checked on a "board" or "all channels"
    void ChannelsDlg::onCheckBoard(bool checked)
    {
    QWidget* w = focusWidget();
    int i, j, start, end, board = w ? w->property("board").toInt() : 0;

    start = board > 3 ? 0 : board;
    end = board > 3 ? 4 : board + 1;
    
    for (j = start; j < end; j++)
    {
        for (i = 0; i < 32; i++)
        {
            m_channel[(j * 32) + i]->setChecked(checked);
        }
    }
    

    }

    // save the check boxes to the channel bitmask
    void ChannelsDlg::accept()
    {
    int i, index;
    m_channels[0] = m_channels[1] = m_channels[2] = m_channels[3] = 0;

    for (i = 0; i < 128; i++)
    {
        index = i / 32;
        m_channels[index] = m_channel[i]->isChecked() ? m_channels[index] | 1 << (i % 32) : m_channels[index];
    }
    
    QDialog::accept();
    

    }

    void ChannelsDlg::getChannels(unsigned int* channels)
    {
    int i;
    for (i = 0; i < 4; i++)
    {
    channels[i] = m_channels[i];
    }
    }

    // setup the dialog manually
    int ChannelsDlg::exec()
    {
    QVBoxLayout* vl = new QVBoxLayout;
    QDialogButtonBox* bb;
    QCheckBox* cb;
    QGroupBox* board;
    QGridLayout* gl;
    int i, index, row, ch;

    for (i = 0; i < 4; i++)
    {
        board = new QGroupBox;
        board->setTitle(QString(tr("Board %1")).arg(i + 1));
        gl = new QGridLayout;
    
        for (row = 0; row < 4; row++)
        {
            for (ch = 0; ch < 8; ch++)
            {
                index = (i * 32) + (row * 8) + ch;
                m_channel[index] = new QCheckBox;
                m_channel[index]->setText(QString("Ch: %1").arg(index));
                m_channel[index]->setChecked((m_channels[i] & (1 << ((row * 8) + ch))) != 0);
                gl->addWidget(m_channel[index], row, ch);
            }
        }
    
        board->setLayout(gl);
    
        cb = new QCheckBox;
        cb->setText(QString(tr("Entire Board %1")).arg(i + 1));
        cb->setProperty("board", i);
        cb->setChecked(true);
        connect(cb, SIGNAL(toggled(bool)), this, SLOT(onCheckBoard(bool)));
        vl->addWidget(cb);
        vl->addWidget(board);
    }
    
    cb = new QCheckBox;
    cb->setText(QString(tr("All Channels")));
    cb->setProperty("board", 10);
    cb->setChecked(true);
    connect(cb, SIGNAL(toggled(bool)), this, SLOT(onCheckBoard(bool)));
    vl->addWidget(cb);
    
    // make sure user can use OK & Cancel
    bb = new QDialogButtonBox(QDialogButtonBox::Ok | QDialogButtonBox::Cancel);
    connect(bb, SIGNAL(accepted()), this, SLOT(accept()));
    connect(bb, SIGNAL(rejected()), this, SLOT(reject()));
    vl->addWidget(bb);
    
    setLayout(vl);
    resize(400, 400);
    setWindowTitle(tr("Channel Selection"));
    
    return QDialog::exec();
    

    }

    1 Reply Last reply
    0
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #2

      Hi
      It seems that you are missing the includes ?
      C2027: use of undefined type 'QVBoxLayout'
      C2027: use of undefined type 'QGroupBox'

      #include <QGroupBox>
      #include <QVBoxLayout>

      etc

      1 Reply Last reply
      3
      • G Offline
        G Offline
        gj21kr
        wrote on last edited by gj21kr
        #3

        Thank you, mrjj.
        You were right! After adding them, the C2027 errors are gone.

        However, My code is still not working because of C4800 and C4251 errors.
        D:\Programes\Qt\5.6.2\5.6\msvc2015_64\include\QtWidgets\qwidget.h:858: warning:
        C4800: 'uint': forcing value to bool 'true' or 'false' (performance warning)

        D:\Programes\Qt\5.6.2\5.6\msvc2015_64\include\QtWidgets\qlayoutitem.h:79: warning:
        C4251: 'QLayoutItem::align': class 'QFlagsQt::AlignmentFlag' needs to have dll-interface to be used by clients of class 'QLayoutItem'

        mrjjM 1 Reply Last reply
        1
        • G gj21kr

          Thank you, mrjj.
          You were right! After adding them, the C2027 errors are gone.

          However, My code is still not working because of C4800 and C4251 errors.
          D:\Programes\Qt\5.6.2\5.6\msvc2015_64\include\QtWidgets\qwidget.h:858: warning:
          C4800: 'uint': forcing value to bool 'true' or 'false' (performance warning)

          D:\Programes\Qt\5.6.2\5.6\msvc2015_64\include\QtWidgets\qlayoutitem.h:79: warning:
          C4251: 'QLayoutItem::align': class 'QFlagsQt::AlignmentFlag' needs to have dll-interface to be used by clients of class 'QLayoutItem'

          mrjjM Offline
          mrjjM Offline
          mrjj
          Lifetime Qt Champion
          wrote on last edited by mrjj
          #4

          @gj21kr

          Those are just warning ?

          So you program should run since they are just warnings.

          its impossible to guess at without the real source code line that it comes from. ( not the one inside Qt)
          Its most likely due to Qt4->Qt5 upgrade.

          1 Reply Last reply
          3

          • Login

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