Qt Creator中的虚假小部件

时间:2014-11-22 18:36:22

标签: qt

我是Qt新手,在Qt Creator 3.1.2(Ubuntu Linux)中工作,Qt 5.3.1。

我的程序有一个带有按钮(pushButton)的表单,该按钮可以在按下时更改文本字段(plainTextEdit)的值。已在图形模式下添加pushButtonplainTextEdit。按钮与其插槽(on_pushButton_clicked())之间的连接也已通过图形界面进行设置。

问题是,该程序在左上角产生一个伪造的plainTextEdit,即一个不同的,输出到达,而#34; main"一个保持干净。问题是,我怎么能避免呢?一般来说,我应该如何在代码中连接图形小部件和它们的对应部分?这是我的计划:

mainwindow.h:

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QPushButton>
#include <QPlainTextEdit>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow 
{
    Q_OBJECT

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

public slots:
    void on_pushButton_clicked();

private:
    Ui::MainWindow *ui;

    QPushButton *pushButton;
    QPlainTextEdit *plainTextEdit;
};

#endif // MAINWINDOW_H

的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.cpp

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

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    plainTextEdit = new QPlainTextEdit(this);
    // whenever I remove the previous line, I get SIGSEGV
    setWindowTitle(tr("My test app..."));
}

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

void MainWindow::on_pushButton_clicked()
{
    plainTextEdit->setPlainText("Some text here");
}

1 个答案:

答案 0 :(得分:1)

您在构造函数中创建的小部件是&#34; bogus&#34;。您在表单编辑器中创建的小部件属于Ui::MainWindow,您不能在主窗口中重新创建它们。

MainWindow

中删除此内容
QPushButton *pushButton;
QPlainTextEdit *plainTextEdit;

从构造函数中删除小部件创建:

plainTextEdit = new QPlainTextEdit(this);

将您的on_pushButtonClicked成员更改为:

ui->plainTextEdit->setPlainText("Some text here");