我试图将QLabel和QLineEdit组合到自定义小部件中,以便可以将它们都插入QTreeWidgetItem中。我已经创建了该类,但是找不到在MainWindow中实际显示它的方法。
customwidget.h
#ifndef CUSTOMWIDGET_H
#define CUSTOMWIDGET_H
#include <QLineEdit>
#include <QLabel>
#include <QListWidget>
class customwidget : public QWidget
{
Q_OBJECT
public:
explicit customwidget(QWidget *parent = nullptr);
signals:
public slots:
private:
QLabel *label;
QLineEdit *edit;
};
#endif // CUSTOMWIDGET_H
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include "customwidget.h"
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
private:
Ui::MainWindow *ui;
customwidget* widget = new customwidget;
};
#endif // MAINWINDOW_H
customwidget.cpp
#include "customwidget.h"
customwidget::customwidget(QWidget *parent) : QWidget(parent)
{
label = new QLabel;
edit = new QLineEdit;
}
mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "customwidget.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
MainWindow::setCentralWidget(widget);
}
MainWindow::~MainWindow()
{
delete ui;
}
mainwindow.ui
<?xml version="1.0" encoding="UTF-8"?>
<ui version="4.0">
<class>MainWindow</class>
<widget class="QMainWindow" name="MainWindow">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
</rect>
</property>
<property name="windowTitle">
<string>MainWindow</string>
</property>
<widget class="QWidget" name="centralWidget"/>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>22</height>
</rect>
</property>
</widget>
<widget class="QToolBar" name="mainToolBar">
<attribute name="toolBarArea">
<enum>TopToolBarArea</enum>
</attribute>
<attribute name="toolBarBreak">
<bool>false</bool>
</attribute>
</widget>
<widget class="QStatusBar" name="statusBar"/>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
如何在UI中实际包含此小部件?
答案 0 :(得分:0)
要显示小部件,您需要将其设置为主窗口的中央小部件:请参见http://doc.qt.io/qt-5/qmainwindow.html#setCentralWidget。
我在您的代码中还看到了其他两个问题:
创建自定义窗口小部件时,无法在头文件中执行此操作。在主窗口的构造函数中完成
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{
widget = new customwidget(this);
setCentralWidget(widget);
}
在自定义小部件中,您需要设置布局,以告诉Qt两个子小部件的位置。例如,如果您希望它们并排放置:
customwidget::customwidget(QWidget *parent) : QWidget(parent)
{
label = new QLabel(this);
edit = new QLineEdit(this);
QHBoxLayout *layout = new QHBoxLayout(this);
layout->addItem(label);
layout->addItem(edit);
this->setLayout(layout);
}
而且-当您将小部件作为子级创建时,请始终将其传递给父级,这意味着在删除父级时会对其进行清理。