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 <noreply@anthropic.com>
This commit is contained in:
2026-03-26 22:18:01 -07:00
parent cec7ca2e2e
commit 97577a677c
4 changed files with 19 additions and 10 deletions
+4 -1
View File
@@ -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
+4 -1
View File
@@ -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());
+4 -1
View File
@@ -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);
+7 -7
View File
@@ -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);