0

Qtを使ってGUIをデザインしたい。これには、次のように相互に接続されている行とチェックボックスが含まれています。

---------- [] -----------

------ [] --------- [] -------------

(ここで、ダッシュは線を表し、[]はチェックボックス用です)

線は動的に作成されます。また、チェックボックスを選択すると、対応する行が無効になります。したがって、基本的に、行とチェックボックスは同じレイヤー上にある必要があります。

実装に関するヒント/リンクをいただければ幸いです。

4

1 に答える 1

0

QFrameQCheckBox、およびQHBoxLayoutの組み合わせが必要になります。少し凝ったものとして、セクションごとに独自のQWidgetをサブクラス化し、それらをQVBoxLayoutに段階的に追加することができます。このようなもの...

class CheckLine : public QWidget
{
    Q_OBJECT
public:
    CheckLine(int numboxes = 1, QObject* parent = 0) :
        QWidget(parent)
    {

        m_layout = new QHBoxLayout;
        m_layout->setSpacing(0);  //you can also set the margins to zero if need be
        setLayout(m_layout);

        QFrame* firstline = new QFrame();
        firstline->setFrameShape(QFrame::HLine);
        m_layout->addWidget(firstline);
        m_lines.append(firstline);

        for(int i = 0; i < numboxes; ++i)
            addBox();
    }

    void addBox()
    {
        QCheckBox* newbox = new QCheckBox("");  //add text here - or leave it blank if you want no label
        m_newbox->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
        m_layout->addWidget(newbox);
        m_boxes.append(newbox);

        QFrame* newline = new QFrame();
        newline->setFrameShape(QFrame::HLine);
        m_layout->addWidget(newline);
        m_lines.append(newline);

        /* link each checkbox to disable the line after it */
        connect(newbox, SIGNAL(toggled(bool)), newline, SLOT(setEnabled(bool)));
//      connect(newbox, SIGNAL(toggled(bool)), this, SLOT(setEnabled(bool)));  //use this instead if you want it to disable the entire row
    }

private:
    QHBoxLayout* m_layout;
    QList<QCheckBox*> m_boxes;
    QList<QFrame*> m_lines;
};

次に、QVBoxLayoutとCheckLineを使用して、毎回1​​ずつnewインクリメントするウィジェットを作成しますnumboxes。行全体を無効にするチェックボックスが必要場合は、コードを微調整します。

于 2013-03-26T19:18:49.217 に答える