gpt4 book ai didi

c++ - 如何将 QT(C++) UI 拆分为多个小部件子类并使其显示与同一类中的所有子类相同?

转载 作者:行者123 更新时间:2023-11-30 01:34:10 31 4
gpt4 key购买 nike

我正在学习 QT(我已经非常了解 C++)并试图让 UI 显示良好,但我不想使用 QT Creator 附带的 QT Designer。我有以下类(class):

#include "MainPanel.h"
#include<QVBoxLayout>

MainPanel::MainPanel(QWidget *parent)
: QWidget(parent)
{
QLayout *lo = new QVBoxLayout(this);
mList = new QListWidget(this);

mList->addItem("Testing");
setLayout(lo);
lo->addWidget(mList);
lo->setSpacing(5);
}

主窗口类有一堆额外的 protected 函数,但 initControls 方法只是这样做:

void MainWindow::initControls()
{
QHBoxLayout *loMain = new QHBoxLayout(this);

loMain->addWidget(new MainPanel(this));
setLayout(loMain);
}

当我将 MainPanel 中的所有代码放入 MainWindow::initControls() 或什至在构造函数中(无论哪种方式)时,它都有效 - 显示一个列表小部件,其中包含一个项目“测试”。但是,对于 MainPanel 中的代码,它显示为一个非常小的矩形,不适合“测试”一词,其中甚至部分也没有任何类似的文本。

我尝试重写 sizeHint() 并移动代码以创建列表小部件并将其返回到方法 getList() 中,这样我也可以从 sizeHint 访问它,但这什么也没做 - 我仍然得到一个小矩形。

我做错了什么,我需要做什么或包括什么才能让小部件正确绘制?我有更多控件要添加到此 UI(列表小部件下方的按钮面板和窗口右侧 2/3 处的详细信息面板)但是在我可以显示它之前,我无法继续休息。

我还想完全使用代码来完成此操作 - 而不是使用设计器,因为我有视觉问题并且发现很难将内容正确地放置在表单上。

请有人帮忙 - 如果 QT 网站上的文档和教程为我指明了正确的方向,那么文档和教程会很有帮助。我已经在 QWidget、QListWidget、QLayout 和 QH(和 V)BoxLayouts 下查看了 QT 的文档站点,但什么也没看到,而且许多教程都在谈论设计器。

在有人试图责备创建 SSME 或任何小程序之前 - 我已经给了你显示问题的最小的一个 - 我知道将代码全部放入主窗口可以修复它,但一个人永远不应该把所有东西都放在一个类。

最佳答案

好吧,太不清楚了,那里发生了什么,我们应该要求您提供更多代码 =)

这是尽可能小的示例,展示了您应该努力实现的目标:

主窗口.cpp:

#include "mainwindow.h"
#include "mainpanel.h"

MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
{
MainPanel* p = new MainPanel(this);
setCentralWidget(p);
}

主面板.h:

#include "mainpanel.h"

#include <QListWidget>
#include <QLayout>

MainPanel::MainPanel(QWidget *parent)
: QWidget(parent)
{
QLayout *lo = new QVBoxLayout(this);
QListWidget* mList = new QListWidget(this);

mList->addItem("Testing");
setLayout(lo);
lo->addWidget(mList);
lo->setSpacing(5);
}

ma​​in.cpp:

#include <QApplication>

#include "mainwindow.h"

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

MainWindow w;
w.resize(400, 500);
w.show();

return app.exec();
}

看起来,您已经尝试在QMainWindow 上设置布局,但它已经具有内置布局,这正是setCentralWidget 应该起作用的情况,为 QWidgetQDialog 子类保留手动布局创建。

上面的代码工作正常,试试看,然后按照你想要的方式重构。

关于c++ - 如何将 QT(C++) UI 拆分为多个小部件子类并使其显示与同一类中的所有子类相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56827174/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com