From 97577a677ca72b565bd5da7fa4019c78d244d386 Mon Sep 17 00:00:00 2001 From: Sami Ahmed Date: Thu, 26 Mar 2026 22:18:01 -0700 Subject: [PATCH] Fix Qt widget embedding: pages rendered as floating windows instead of tabs Move centralWidget assignment before page creation to fix use of uninitialized pointer. Use Qt::Widget flags when pages have a parent (embedded in QStackedWidget) and pass centralWidget as parent for all lazily-created pages (messagePage, signMessagePage, verifyMessagePage). Also fix TransactionView which unconditionally set FramelessWindowHint. Co-Authored-By: Claude Opus 4.6 --- src/qt/addressbookpage.cpp | 5 ++++- src/qt/sendcoinsdialog.cpp | 5 ++++- src/qt/transactionview.cpp | 5 ++++- src/qt/trianglesgui.cpp | 14 +++++++------- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/src/qt/addressbookpage.cpp b/src/qt/addressbookpage.cpp index c94dab5..bf7df6d 100644 --- a/src/qt/addressbookpage.cpp +++ b/src/qt/addressbookpage.cpp @@ -27,7 +27,10 @@ AddressBookPage::AddressBookPage(Mode mode, Tabs tab, QWidget *parent) : tab(tab) { ui->setupUi(this); - setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::Window); + if (mode == ForEditing && parent) + setWindowFlags(Qt::Widget); + else + setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::Window); ui->wAddressBookHeader->installEventFilter(new DialogMoveHandler(this)); #ifdef Q_OS_MAC // Icons on push buttons are very uncommon on Mac diff --git a/src/qt/sendcoinsdialog.cpp b/src/qt/sendcoinsdialog.cpp index 4fc1d4a..98680d3 100644 --- a/src/qt/sendcoinsdialog.cpp +++ b/src/qt/sendcoinsdialog.cpp @@ -28,7 +28,10 @@ SendCoinsDialog::SendCoinsDialog(QWidget *parent) : model(0) { ui->setupUi(this); - setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::Window); + if (parent) + setWindowFlags(Qt::Widget); + else + setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::Window); #ifdef Q_OS_MAC // Icons on push buttons are very uncommon on Mac ui->addButton->setIcon(QIcon()); diff --git a/src/qt/transactionview.cpp b/src/qt/transactionview.cpp index f37d86c..884e8e8 100644 --- a/src/qt/transactionview.cpp +++ b/src/qt/transactionview.cpp @@ -40,7 +40,10 @@ TransactionView::TransactionView(QWidget *parent) : transactionSortOrder(Qt::DescendingOrder) { ui->setupUi(this); - setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::Window); + if (parent) + setWindowFlags(Qt::Widget); + else + setWindowFlags(Qt::CustomizeWindowHint | Qt::FramelessWindowHint | Qt::Window); // Build filter row dateWidget = ui->dateWidget; dateWidget->addItem(tr("All"), All); diff --git a/src/qt/trianglesgui.cpp b/src/qt/trianglesgui.cpp index 7dd594a..bd4cb2c 100644 --- a/src/qt/trianglesgui.cpp +++ b/src/qt/trianglesgui.cpp @@ -284,6 +284,7 @@ TrianglesGUI::TrianglesGUI(bool fIsTestnet, QWidget *parent): createTrayIcon(); // Create tabs + centralWidget = ui->stackedWidget; overviewPage = new OverviewPage(); { transactionsPage = new QWidget(this); @@ -296,15 +297,14 @@ TrianglesGUI::TrianglesGUI(bool fIsTestnet, QWidget *parent): vbox->addWidget(transactionView); frameMain->setLayout(vbox); } - addressBookPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::SendingTab); + addressBookPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::SendingTab, centralWidget); - receiveCoinsPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::ReceivingTab); + receiveCoinsPage = new AddressBookPage(AddressBookPage::ForEditing, AddressBookPage::ReceivingTab, centralWidget); sendCoinsPage = 0; messagePage = 0; signMessagePage = 0; verifyMessagePage = 0; - centralWidget = ui->stackedWidget; centralWidget->addWidget(overviewPage); centralWidget->addWidget(transactionsPage); centralWidget->addWidget(addressBookPage); @@ -641,7 +641,7 @@ void TrianglesGUI::ensureSendCoinsPage() if (sendCoinsPage) return; - sendCoinsPage = new SendCoinsDialog(this); + sendCoinsPage = new SendCoinsDialog(centralWidget); if (walletModel) sendCoinsPage->setModel(walletModel); centralWidget->addWidget(sendCoinsPage); @@ -652,7 +652,7 @@ void TrianglesGUI::ensureMessagePage() if (messagePage) return; - messagePage = new MessagePage(this); + messagePage = new MessagePage(centralWidget); if (messageModel) messagePage->setModel(messageModel); centralWidget->addWidget(messagePage); @@ -663,7 +663,7 @@ void TrianglesGUI::ensureSignMessagePage() if (signMessagePage) return; - signMessagePage = new SignMessagePage(this); + signMessagePage = new SignMessagePage(centralWidget); if (walletModel) signMessagePage->setModel(walletModel); centralWidget->addWidget(signMessagePage); @@ -674,7 +674,7 @@ void TrianglesGUI::ensureVerifyMessagePage() if (verifyMessagePage) return; - verifyMessagePage = new VerifyMessagePage(this); + verifyMessagePage = new VerifyMessagePage(centralWidget); if (walletModel) verifyMessagePage->setModel(walletModel); centralWidget->addWidget(verifyMessagePage);