Qt5 在我的主窗口中添加和删除小部件
Qt5 add and remove widgets from my mainwindows
我在 QTCreator 中创建了一个 ui 应用程序,但我需要在运行时删除它拥有的一个 tablewidget。
有人可以帮助我吗?
代码就是它。
MainWindows.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void eventos();
private:
Ui::MainWindow *ui;
public slots:
void exit();
void aboutUA();
void addCttoaction();
void listCttoaction();
};
#endif // MAINWINDOW_H
MainWindows.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
MainWindows.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>671</width>
<height>524</height>
</rect>
</property>
<property name="windowTitle">
<string>AU | Archivo Único</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QTableWidget" name="tableWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>649</width>
<height>459</height>
</rect>
</property>
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
<column>
<property name="text">
<string>Salida</string>
</property>
</column>
<column>
<property name="text">
<string>No. Contrato</string>
</property>
</column>
<column>
<property name="text">
<string>Destino</string>
</property>
</column>
<column>
<property name="text">
<string>Persona</string>
</property>
</column>
<column>
<property name="text">
<string>Tipo</string>
</property>
</column>
<column>
<property name="text">
<string>Entrada</string>
</property>
</column>
</widget>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>671</width>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuArvhivo">
<property name="title">
<string>Archivo</string>
</property>
<addaction name="actionSalir"/>
</widget>
<widget class="QMenu" name="menuAyuda">
<property name="title">
<string>Ayuda</string>
</property>
<addaction name="actionSobre_AU"/>
<addaction name="actionCr_ditos"/>
</widget>
<widget class="QMenu" name="menuContrato">
<property name="title">
<string>Editar</string>
</property>
<addaction name="actionAdicionar_contrato"/>
<addaction name="actionEditar_Contrato"/>
<addaction name="separator"/>
<addaction name="actionSalida_de_Contrato"/>
<addaction name="actionEntrada_de_contrato"/>
</widget>
<widget class="QMenu" name="menuListados">
<property name="title">
<string>Listados</string>
</property>
<addaction name="actionListado_de_Contratos"/>
<addaction name="actionContratos_Fuera"/>
<addaction name="actionContratos_Originales"/>
<addaction name="actionContratos_Copia"/>
</widget>
<addaction name="menuArvhivo"/>
<addaction name="menuContrato"/>
<addaction name="menuListados"/>
<addaction name="menuAyuda"/>
</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"/>
<action name="actionSalir">
<property name="text">
<string>Salir</string>
</property>
<property name="shortcut">
<string>Ctrl+Q</string>
</property>
</action>
<action name="actionSobre_AU">
<property name="text">
<string>Sobre AU</string>
</property>
</action>
<action name="actionCr_ditos">
<property name="text">
<string>Créditos</string>
</property>
</action>
<action name="actionAdicionar_contrato">
<property name="text">
<string>Adicionar contrato</string>
</property>
</action>
<action name="actionSalida_de_Contrato">
<property name="text">
<string>Salida de Contrato</string>
</property>
</action>
<action name="actionEntrada_de_contrato">
<property name="text">
<string>Entrada de contrato</string>
</property>
</action>
<action name="actionListado_de_Contratos">
<property name="text">
<string>Listado de Contratos</string>
</property>
</action>
<action name="actionContratos_Fuera">
<property name="text">
<string>Contratos Fuera</string>
</property>
</action>
<action name="actionContratos_Originales">
<property name="text">
<string>Contratos Originales</string>
</property>
</action>
<action name="actionContratos_Copia">
<property name="text">
<string>Contratos Copia</string>
</property>
</action>
<action name="actionEditar_Contrato">
<property name="text">
<string>Editar Contrato</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
我需要删除此文本字段,但我不知道如何在运行时使用代码执行此操作,因为我需要在此主窗口中向我的应用程序添加另一个小部件
谢谢
您可以通过简单的 deleteLater()
调用删除 UI 对象之一(在本例中为 tableWidget
):
ui->tableWidget->deleteLater();
这将取消绑定所有与其关联的信号和插槽,并安全地删除它。
但是,您一定要注意删除后不要使用它--包括调用deleteLater()
再次!所以你可能会考虑:
if(ui->tableWidget)
ui->tableWidget->deleteLater();
如果您从不显式使用 tableWidget
除非通过信号和插槽,否则释放后使用不是问题,因为 QObject 在删除时会安全地断开所有连接。
由于上述问题,我更愿意隐藏 UI 元素,而不是删除它们。为此,只需调用 hide()
槽或 `show(false) 槽:
ui->tableWidget->hide();
好处是一切都保持连接,所以你可以稍后用show()
重新显示它。
我在 QTCreator 中创建了一个 ui 应用程序,但我需要在运行时删除它拥有的一个 tablewidget。 有人可以帮助我吗? 代码就是它。
MainWindows.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
void eventos();
private:
Ui::MainWindow *ui;
public slots:
void exit();
void aboutUA();
void addCttoaction();
void listCttoaction();
};
#endif // MAINWINDOW_H
MainWindows.cpp
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
MainWindows.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>671</width>
<height>524</height>
</rect>
</property>
<property name="windowTitle">
<string>AU | Archivo Único</string>
</property>
<widget class="QWidget" name="centralWidget">
<widget class="QTableWidget" name="tableWidget">
<property name="geometry">
<rect>
<x>10</x>
<y>10</y>
<width>649</width>
<height>459</height>
</rect>
</property>
<property name="dragEnabled">
<bool>true</bool>
</property>
<property name="alternatingRowColors">
<bool>true</bool>
</property>
<property name="sortingEnabled">
<bool>true</bool>
</property>
<column>
<property name="text">
<string>Salida</string>
</property>
</column>
<column>
<property name="text">
<string>No. Contrato</string>
</property>
</column>
<column>
<property name="text">
<string>Destino</string>
</property>
</column>
<column>
<property name="text">
<string>Persona</string>
</property>
</column>
<column>
<property name="text">
<string>Tipo</string>
</property>
</column>
<column>
<property name="text">
<string>Entrada</string>
</property>
</column>
</widget>
</widget>
<widget class="QMenuBar" name="menuBar">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>671</width>
<height>21</height>
</rect>
</property>
<widget class="QMenu" name="menuArvhivo">
<property name="title">
<string>Archivo</string>
</property>
<addaction name="actionSalir"/>
</widget>
<widget class="QMenu" name="menuAyuda">
<property name="title">
<string>Ayuda</string>
</property>
<addaction name="actionSobre_AU"/>
<addaction name="actionCr_ditos"/>
</widget>
<widget class="QMenu" name="menuContrato">
<property name="title">
<string>Editar</string>
</property>
<addaction name="actionAdicionar_contrato"/>
<addaction name="actionEditar_Contrato"/>
<addaction name="separator"/>
<addaction name="actionSalida_de_Contrato"/>
<addaction name="actionEntrada_de_contrato"/>
</widget>
<widget class="QMenu" name="menuListados">
<property name="title">
<string>Listados</string>
</property>
<addaction name="actionListado_de_Contratos"/>
<addaction name="actionContratos_Fuera"/>
<addaction name="actionContratos_Originales"/>
<addaction name="actionContratos_Copia"/>
</widget>
<addaction name="menuArvhivo"/>
<addaction name="menuContrato"/>
<addaction name="menuListados"/>
<addaction name="menuAyuda"/>
</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"/>
<action name="actionSalir">
<property name="text">
<string>Salir</string>
</property>
<property name="shortcut">
<string>Ctrl+Q</string>
</property>
</action>
<action name="actionSobre_AU">
<property name="text">
<string>Sobre AU</string>
</property>
</action>
<action name="actionCr_ditos">
<property name="text">
<string>Créditos</string>
</property>
</action>
<action name="actionAdicionar_contrato">
<property name="text">
<string>Adicionar contrato</string>
</property>
</action>
<action name="actionSalida_de_Contrato">
<property name="text">
<string>Salida de Contrato</string>
</property>
</action>
<action name="actionEntrada_de_contrato">
<property name="text">
<string>Entrada de contrato</string>
</property>
</action>
<action name="actionListado_de_Contratos">
<property name="text">
<string>Listado de Contratos</string>
</property>
</action>
<action name="actionContratos_Fuera">
<property name="text">
<string>Contratos Fuera</string>
</property>
</action>
<action name="actionContratos_Originales">
<property name="text">
<string>Contratos Originales</string>
</property>
</action>
<action name="actionContratos_Copia">
<property name="text">
<string>Contratos Copia</string>
</property>
</action>
<action name="actionEditar_Contrato">
<property name="text">
<string>Editar Contrato</string>
</property>
</action>
</widget>
<layoutdefault spacing="6" margin="11"/>
<resources/>
<connections/>
</ui>
我需要删除此文本字段,但我不知道如何在运行时使用代码执行此操作,因为我需要在此主窗口中向我的应用程序添加另一个小部件 谢谢
您可以通过简单的 deleteLater()
调用删除 UI 对象之一(在本例中为 tableWidget
):
ui->tableWidget->deleteLater();
这将取消绑定所有与其关联的信号和插槽,并安全地删除它。
但是,您一定要注意删除后不要使用它--包括调用deleteLater()
再次!所以你可能会考虑:
if(ui->tableWidget)
ui->tableWidget->deleteLater();
如果您从不显式使用 tableWidget
除非通过信号和插槽,否则释放后使用不是问题,因为 QObject 在删除时会安全地断开所有连接。
由于上述问题,我更愿意隐藏 UI 元素,而不是删除它们。为此,只需调用 hide()
槽或 `show(false) 槽:
ui->tableWidget->hide();
好处是一切都保持连接,所以你可以稍后用show()
重新显示它。