如何在主 QLabel 中包含小部件的子集(例如 QListView 和 QLabels)

Posted

技术标签:

【中文标题】如何在主 QLabel 中包含小部件的子集(例如 QListView 和 QLabels)【英文标题】:How to include in a main QLabel a subset of widgets (e.g. QListView and QLabels) 【发布时间】:2021-05-24 06:52:25 【问题描述】:

为了测试QImage 的旋转,我创建了一个快速应用程序,其中我将QLabel 子类化,如下所示。在这种情况下,基本上QLabel 对我来说就像MainWindow

下面是我的布局:

下面是我想要实现的布局:

代码下方

ma​​inwindow.h

class MainWindow : public QLabel 
   Q_OBJECT
public:
   MainWindow(int argc, char** argv, QWidget *parent = );
   virtual ~MainWindow();
protected:
   Q_SLOT void setImageMsg(const sensor_msgs::ImageConstPtr&);
   Q_SIGNAL void newImageMsg(const sensor_msgs::ImageConstPtr&);
private:
   ros::Subscriber sub;
   ros::Subscriber sub_img_bw;
;

ma​​inwindow.cpp

MainWindow::MainWindow(int argc, char** argv, QWidget *parent) : QLabel(parent) 
   qRegisterMetaType<sensor_msgs::ImageConstPtr>();
#if QT_VERSION >= QT_VERSION_CHECK(5,0,0)
   connect(this, &MainWindow::newImageMsg, this, &MainWindow::setImageMsg);
#else
   connect(this, SIGNAL(newImageMsg(sensor_msgs::ImageConstPtr)), SLOT(setImageMsg(sensor_msgs::ImageConstPtr)));
#endif
   ros::init(argc,argv,"MainWindow");
   ros::NodeHandle n;
   QComboBox *comboColorBckgd = new QComboBox(this);
   QStringList sequence_len = QStringList() << tr("Bckgd Color") << tr("Green") << tr("Blue") << tr("Black");
   comboColorBckgd->addItems(sequence_len);

   QComboBox *comboColorBeam = new QComboBox(this);
   QStringList sequence_len_beam = QStringList() << tr("Beam Color") << tr("R") << tr("G") << tr("B");
   comboColorBeam->addItems(sequence_len_beam);

   QGridLayout *grid = new QGridLayout(this);
   grid->setColumnMinimumWidth(0, 10);
   grid->addWidget(comboColorBckgd, 0, 0, Qt::AlignTop);
   grid->addWidget(comboColorBeam, 0, 1, Qt::AlignTop);
   comboColorBckgd->show();
   comboColorBeam->show();
 

我在这里面临的情况是我不完全理解为什么我不能在子会话中划分主要的QLabel

一行有一个QLabel和一个QListView和 另一行有'QListViewandQLabel`

如我试图实现的布局所示。

当然我会尝试在函数中插入必要的组件

`MainWindow::MainWindow(int argc, char** argv, QWidget *parent) : QLabel(parent) 

      // .. desired componentns here

尽管我能够添加所有组件,但我的最终布局非常混乱,尽管我确信我正确设置了 QGridLayout,但所有内容都属于单个 QLabel

也许我必须继承QGridLayout?我很困惑。

我不确定如何继续前进,我要提前感谢任何人阐明正在发生的事情或至少指出潜在的解决方案。

【问题讨论】:

【参考方案1】:

我无法看到您所拥有的布局和正在尝试实现的图像,因此我可能不完全理解您的问题,但是...

为什么必须继承QLabel?我想这会导致你的问题 - QLabel 不希望在它下面有一个子层次结构,因此它可能与 QLabel 冲突。

而不是这个父/子层次结构:

- MainWindow : public QLabel
-- QGridLayout
--- QComboBox
--- QComboBox

你试过了吗:

- MainWindow : public QWidget (or QMainWindow?)
-- QGridLayout
--- QLabel (top level)
--- QComboBox
--- QComboBox

【讨论】:

以上是关于如何在主 QLabel 中包含小部件的子集(例如 QListView 和 QLabels)的主要内容,如果未能解决你的问题,请参考以下文章

qwidget如何拖放由几个小部件组成?

设置在主类的子类中创建的 PyQt5 小部件的属性

Qt:: 如何消除 qmainwindow 中小部件和工具栏之间的间隙

如何使用 setStyleSheet 更改 QLabel 小部件的字体大小(百分比)? [复制]

获取 QLabel 中文本的 (X,Y) 位置

如何在 PyQt5 布局中更紧密地对齐两个小部件?