代码之家  ›  专栏  ›  技术社区  ›  h-swell

QT——如何使用布局类?

  •  0
  • h-swell  · 技术社区  · 1 年前

    所以,我有一个QT项目,它有一个QWidget类的已实现子类,我在一开始就展示了它,不再做任何事情。字面上

    int main(int argc, char *argv[])
    {
    
        QApplication a(argc, argv);
    
        MyClass w;
        
        w.show();
        return a.exec();
    }
    

    例如,我想在我的应用程序中看到这个小部件的两个实例。我在谷歌上做了一个小调查,发现了QGridLayout和QLayout小部件。天真地假设我可以向它们添加项目并键入 myLayout.show() (HTML心态),没有收到任何积极的消息,我放弃了,现在必须在这里寻求解决方案。

    因此,问题来了:处理这种情况的适当方式是什么?如何正确显示两个或多个QWidget?最终,我希望我的应用程序看起来像这样:

    我的小工具1 我的按钮1
    我的小工具2 我的文本字段1

    我的Qt版本是6.6.0,如果这很重要的话

    使现代化

    我的QWidget子类只是一个黑色矩形:

    class MyWidget: public QWidget
    {
        Q_OBJECT
    
    public:
        MyWidget(QWidget *parent = nullptr) : QWidget(parent) {};
    protected:
        void paintEvent(QPaintEvent *event) override {
            QPainter painter(this);
            painter.fillRect(rect(), Qt::black);
            event->accept();
        };
    

    还有我的 main.cpp 文件如下所示(包括省略的部分):

    int main(int argc, char *argv[])
    {
    
        QApplication a(argc, argv);
    
        MyWidget w1;
        MyWidget w2;
        QMainWindow myWindow;
        QGridLayout myLayout;
        myLayout.addWidget(&w1, 0, 0);
        myLayout.addWidget(&w2, 0, 1);
        myWindow.setLayout(&myLayout);
    
        myWindow.show();
        return a.exec();
    }
    

    也许需要注意的是,应用程序输出抛出以下行: QWidget::setLayout: Attempting to set QLayout "" on QMainWindow "", which already has a layout

    1 回复  |  直到 1 年前
        1
  •  0
  •   David Grayson    1 年前

    没有 show QLayout的方法。您必须制作一个表示窗口的容器小部件(可能使用QMainWindow类),然后使用 QWidget::setLayout 要将布局放在该小部件中,请使用 QWidget::show 以显示窗口。

    您应该去看看与Qt捆绑在一起的一些示例的来源,比如 basic layouts example ,或者你可以找到更简单的东西。