Qt使用过程中遇到的问题之new出来的QDialog对象不能覆盖主窗口的问题说明

利用Qt进行开发过程中发现有时候创建的QDialog对象不会显示在主窗口的后面,如下图所示(当鼠标点击主窗口界面时,主窗口并没有覆盖new出来的子窗口):

部分源代码如下:

setWindowTitle("主窗口");

QDialog *newDialog = new QDialog(this);
QWidget *newWidget = new QWidget(newDialog);
newDialog->setWindowTitle("QDialog窗口");
QPushButton *btn = new QPushButton("按钮1",newWidget);
QPushButton *btn_Two = new QPushButton("按钮2",newWidget);
QPushButton *btn_Three = new QPushButton("按钮3",newWidget);
QVBoxLayout *layout = new QVBoxLayout;
layout->addWidget(btn);
layout->addWidget(btn_Two);
layout->addWidget(btn_Three);
newWidget->setLayout(layout);
QVBoxLayout *layout_Two = new QVBoxLayout(newDialog);
layout_Two->addWidget(newWidget);
newDialog->show();

原因:从代码中可以看到创建QDialog对象的时候指定了父对象,若不指定父对象,则可以覆盖new出来的子窗口,即修改以下代码

QDialog *newDialog = new QDialog;

效果:

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
如果你想在其他设计师界面使用窗口的数据库连接,可以通过以下步骤实现: 1. 在窗口创建一个公共的 QSqlDatabase 对象,并在窗口构造函数打开数据库连接,例如: ```c++ #include <QMainWindow> #include <QtSql> class MainWindow : public QMainWindow { Q_OBJECT public: explicit MainWindow(QWidget *parent = nullptr); ~MainWindow(); static QSqlDatabase db; // 声明公共的 QSqlDatabase 对象 private: Ui::MainWindow *ui; }; QSqlDatabase MainWindow::db; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); // 打开数据库连接 db = QSqlDatabase::addDatabase("QSQLITE"); db.setDatabaseName("mydatabase.db"); if (!db.open()) { qDebug() << "Failed to open database."; } } MainWindow::~MainWindow() { delete ui; } ``` 2. 在其他设计师界面使用窗口的公共 QSqlDatabase 对象来进行数据库操作,例如: ```c++ #include <QDialog> #include <QtSql> #include "mainwindow.h" class OtherDialog : public QDialog { Q_OBJECT public: explicit OtherDialog(QWidget *parent = nullptr); ~OtherDialog(); private: QSqlTableModel *model; private slots: void on_pushButton_clicked(); private: Ui::OtherDialog *ui; }; OtherDialog::OtherDialog(QWidget *parent) : QDialog(parent), ui(new Ui::OtherDialog) { ui->setupUi(this); // 创建一个 QSqlTableModel 来显示数据库内容 model = new QSqlTableModel(this, MainWindow::db); // 使用窗口的 QSqlDatabase 对象 model->setTable("mytable"); model->select(); // 将 QSqlTableModel 显示在 QTableView ui->tableView->setModel(model); } OtherDialog::~OtherDialog() { delete ui; } void OtherDialog::on_pushButton_clicked() { // 在按钮点击事件插入一条数据 QSqlQuery query(MainWindow::db); // 使用窗口的 QSqlDatabase 对象 query.prepare("INSERT INTO mytable (name, age) VALUES (:name, :age)"); query.bindValue(":name", "John"); query.bindValue(":age", 30); query.exec(); // 刷 QSqlTableModel 显示的数据 model->select(); } ``` 在上面的示例,我们在窗口创建了一个公共的 QSqlDatabase 对象,并在其他设计师界面使用对象来进行数据库操作。这样可以确保所有窗口使用一个数据库连接,避免了多个连接导致的问题

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值