我在QTCreator中创建了一个ui应用程序,但我需要在运行时删除它的表小部件。有人能帮我吗?代码就是它。
主Windows.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)slot:"
ui->tableWidget->hide();
优点是所有内容都保持连接,因此您可以稍后使用show()
重新显示它。