gpt4 book ai didi

c++ - 在 Qt 中动态添加小部件时出现段错误

转载 作者:行者123 更新时间:2023-11-30 01:20:48 24 4
gpt4 key购买 nike

我试图在 Qt 运行时添加一个 QWidget,但由于段错误,它显示从操作系统收到的 SIGSEV 信号。这是我的代码:

//主窗口.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QLabel>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QtGui>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
Q_OBJECT

public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();

private slots:
void on_pushButton_submit_clicked();

private:
Ui::MainWindow *ui;
QLabel *label;
QLineEdit *line_edit;
};

#endif // MAINWINDOW_H

//主窗口.cpp

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}

MainWindow::~MainWindow()
{
delete ui;
}

void MainWindow::on_pushButton_submit_clicked()
{
QString str = ui->lineEdit1->text();
QString str1 =ui->lineEdit2->text();
if(str=="rana"&&str1=="vivek")
{
label = new QLabel();
label->setText("Success");
MainWindow.layout->addWidget(label);
label->show();
}
else
{
line_edit = new QLineEdit();
line_edit->setText("Sorry");
MainWindow.layout->addWidget(line_edit);
line_edit->show();
}
}

// main.cpp

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
QApplication a(argc, argv);
MainWindow w;
w.show();

return a.exec();
}

我知道段错误是由于空指针的取消引用而发生的,但我找不到我在哪里犯了那个错误。有什么建议吗?

最佳答案

        MainWindow.layout->addWidget(label);

没有多大意义 - 正如塞巴斯蒂安指出的那样,这甚至不应该编译。

首先,确保您在 Ui 文件中有布局(我添加了一个名为 verticalLayout 的垂直布局),这样您就有了一个可以添加小部件的布局。您将在 ui 对象中有一个指向它的指针。

现在,只需在该布局上使用 addWidget,一切都会正常工作:

void MainWindow::on_pushButton_submit_clicked()
{
QString str = ui->lineEdit1->text();
QString str1 =ui->lineEdit2->text();
if(str=="rana"&&str1=="vivek")
{
QLabel *label = new QLabel();
label->setText("Success");
ui->verticalLayout->addWidget(label);
// label->show(); widgets will became the part of the MainWindow, as the addWidget
// will add them into the hierarchy.
}
else
{
QLineEdit *line_edit = new QLineEdit();
line_edit->setText("Sorry");
ui->verticalLayout->addWidget(line_edit);
// line_edit->show()
}
}

注意 - addWidget 会将小部件的所有者设置为布局,因此该小部件将在布局销毁时被删除。

关于c++ - 在 Qt 中动态添加小部件时出现段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18915707/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com