0

我是QT的新手。我开发了一个程序,需要1024 line每行有两个按钮、两个单选按钮和两个标签。我有两种方法。

  1. 在设计器模式下,我拖放 2 * 1204 按钮、2 * 1024 标签和 2 * 1024 单选按钮,这是不合逻辑的。
  2. 有一种方法可以在没有设计器模式和拖放的情况下将此小部件添加到页面,例如在运行时我单击一个按钮并在代码隐藏中将此小部件(标签、按钮、单选按钮)添加到页面或一些像这样的事情。

我在网络编程中做了第二种方式。这在QT中可能吗?或类似的东西?

4

2 回答 2

1

您可以以编程方式创建小部件并通过布局调整它们的位置。例如,它可能看起来像这样:

QVBoxLayout *topLayout = new QVBoxLayout();

for (int lineNumber = 0; lineNumber < 1024; ++lineNumber)
{
    QWidget *oneLineWidget = new QWidget(this);
    QHBoxLayout *oneLineWidgetLayout = new QHBoxLayout();
    { //added these brackets just for the ease of reading.
        QLabel *labFirst = new QLabel(tr("first label"), oneLineWidget);
        QLabel *labSecond = new QLabel(tr("second label"), oneLineWidget);
        QPushButton *bFirst = new QPushButton(tr("first button"), oneLineWidget);
        QPushButton *bSecond = new QPushButton(tr("second button"), oneLineWidget);
        QRadioButton *rbFirst = new QRadioButton(tr("first radiobutton"), oneLineWidget);
        QRadioButton *rbSecond = new QRadioButton(tr("second radiobutton"), oneLineWidget);

        oneLineWidgetLayout->addWidget(labFirst);
        oneLineWidgetLayout->addWidget(labSecond);
        oneLineWidgetLayout->addWidget(bFirst);
        oneLineWidgetLayout->addWidget(bSecond);

        //lets put one radioButton under another. 
        QVBoxLayout *radioButtonsLayout = new QVBoxLayout();
        {
            radioButtonsLayout->addWidget(rbFirst);
            radioButtonsLayout->addWidget(rbSecond);
        }
        //and now we can combine layouts.
        oneLineWidgetLayout->addLayout(radioButtonsLayout);

    }
    oneLineWidget->setLayout(oneLineWidgetLayout);

    topLayout->addWidget(oneLineWidget);
}

this->setLayout(topLayout);

您可以使用不同类型的布局(QBoxLayout、QGridLayout、QFormLayout 等)。您可以从QLayout 文档开始。有一个继承它的类列表。我希望它会有所帮助!:) 祝你好运!

于 2013-04-17T18:00:42.760 回答
0

您在 Qt Designer 中所做的一切最终都会转换为创建对象并将它们相互链接的 C++ 代码。

因此,获取该代码(查看生成的头文件)并将其放入 for 循环是非常简单的。或者甚至自己重新开始,创建三个按钮并将它们添加到布局中只是几行代码。

于 2013-04-17T17:25:23.230 回答