【发布时间】:2021-02-25 01:58:48
【问题描述】:
我正在编写一个 Qt 应用程序,其中 QListWidget 填充有 QListWidgetItems,我想在双击 QListWidgetItem 时创建一个新对话框。所以我在this qt 教程中创建了一个新的对话框类。现在,我添加了on_listWidget_itemDoubleClicked(QListWidgetItem* item) 插槽,我应该在其中创建对话框类的实例。但我希望我的主应用程序仍然可以运行并继续,并且只有对话框窗口显示一些信息。所以我不能只创建一个对话框类的实例并用exec() 函数显示它。
所以我想出的是让我的对话框类中的std::unique_ptr 作为我的主类的类成员,并使用show() 方法调用对话框。每次调用on_listWidget_itemDoubleClicked(QListWidgetItem* item) 时,我都会使用std::make_unique 创建对话框类的新实例,它应该销毁旧对话框并创建一个新对话框。
这通常是一种安全的方法吗?还是有其他解决这种情况的标准方法?
编辑
这是我认为的示例:
主类:
class USB_Packet_Analyzer : public QWidget
{
Q_OBJECT
public:
USB_Packet_Analyzer(QWidget *parent = Q_NULLPTR);
private:
Ui::USB_Packet_AnalyzerClass ui;
std::unique_ptr<DataViewer> dataViewer;
private slots:
void on_listWidget_itemDoubleClicked(QListWidgetItem* item);
};
void USB_Packet_Analyzer::on_listWidget_itemDoubleClicked(QListWidgetItem* item)
{
dataViewer = std::make_unique<DataViewer>(item, this);
dataViewer->show();
}
对话框类:
class DataViewer : public QDialog
{
Q_OBJECT
public:
DataViewer(QListWidgetItem* item, QWidget *parent = Q_NULLPTR);
~DataViewer();
private:
Ui::DataViewer ui;
};
【问题讨论】:
-
贴出代码,看来你不需要在某处定义类成员对话框了......